PKCS11-TOOL(1) OpenSC Tools PKCS11-TOOL(1)

pkcs11-tool - ابزاری برای مدیریت و استفاده از توکن‌های امنیتی PKCS #11

pkcs11-tool [گزینه‌ها]

ابزار pkcs11-tool برای مدیریت اشیاء داده روی کارت‌های هوشمند و توکن‌های امنیتی مشابه PKCS #11 استفاده می‌شود. کاربران می‌توانند PINها، کلیدها و گواهی‌های ذخیره‌شده بر روی توکن را فهرست کرده و بخوانند. احراز هویت با PIN کاربر برای آن دسته از عملیات‌هایی که به آن نیاز دارند انجام می‌شود.

--attr-from filename

استخراج اطلاعات از filename (فایل گواهی با کدگذاری DER) و ایجاد ویژگی‌های متناظر در هنگام نوشتن یک شیء روی توکن. مثال: نام موضوع (subject) گواهی برای ایجاد ویژگی CKA_SUBJECT استفاده می‌شود.

--change-pin, -c

تغییر دادن PIN کاربر بر روی توکن

--unlock-pin

رفع مسدودی PIN کاربر (بدون --login رفع مسدودی در نشست واردشده انجام می‌شود؛ در غیر این صورت --login-type باید 'context-specific' باشد).

--hash, -h

درهم‌سازی (هش کردن) مقداری داده.

--hash-algorithm mechanism

مشخص کردن الگوریتم هش مورد استفاده در امضای RSA-PKCS-PSS یا رمزگشایی RSA-OAEP. مقادیر مجاز عبارتند از "SHA-1"، "SHA256"، "SHA384"، "SHA512" و برخی توکن‌ها ممکن است "SHA224" را نیز مجاز بدانند. مقدار پیش‌فرض "SHA-1" است.

توجه داشته باشید که ورودی به RSA-PKCS-PSS باید طولی برابر با الگوریتم هش مشخص‌شده داشته باشد. به عنوان مثال، برای SHA256 ورودی امضا باید دقیقاً ۳۲ بایت طول داشته باشد (برای سازوکارهای SHA256-RSA-PKCS-PSS چنین محدودیتی وجود ندارد). برای RSA-OAEP، اندازه ورودی متن آشکار mLen حداکثر باید keyLen - 2 - 2*hashLen باشد. به عنوان مثال، برای کلید ۳۰۷۲ بیتی RSA و SHA384، طولانی‌ترین متن آشکار برای رمزگذاری با RSA-OAEP (با تمام اندازه‌ها به بایت) عبارت است از: 384 - 2 - 2*48 = 286، یعنی ۲۸۶ بایت.

--id id, -d id

مشخص کردن شناسه شیء مورد نظر برای عملیات.

--init-pin

مقداردهی اولیه PIN کاربر. این گزینه با --change-pin تفاوت دارد زیرا PIN کاربر را برای نخستین بار تنظیم می‌کند. پس از تنظیم، می‌توان PIN کاربر را با استفاده از --change-pin تغییر داد.

--init-token

مقداردهی اولیه یک توکن: تنظیم برچسب توکن و همچنین PIN افسر امنیت (SO-PIN) (برچسب باید با استفاده از --label مشخص شود).

--input-file filename, -i filename

مشخص کردن مسیر فایل ورودی.

--keypairgen, -k

تولید یک جفت‌کلید جدید (جفت کلید عمومی و خصوصی).

--keygen

تولید یک کلید جدید.

--key-type specification

مشخص کردن نوع و گونه (نه همیشه الزامی) کلید برای ساخت (مانند طول بایتی کلید متقارن، طول بیتی کلید نامتقارن، شناسه منحنی بیضوی و غیره). به عنوان مثال RSA:2048، EC:prime256v1، EC:ED25519، EC:X448، GOSTR3410-2012-256:B، DES:8، DES3:24، AES:16، AES:، CHACHA20، POLY1305 یا GENERIC:64. اگر نوع کلید به طور ناقص مشخص شده باشد، مقادیر ممکن فهرست می‌شوند.

--usage-sign

تعیین فلگ کاربرد کلید برای 'sign' (امضا) (تنظیم SIGN در privkey، تنظیم VERIFY در pubkey).

--usage-decrypt

تعیین فلگ کاربرد کلید برای 'decrypt' (رمزگشایی).

برای کلیدهای RSA، مقدار DECRYPT را در privkey و ENCRYPT را در pubkey تنظیم می‌کند. برای کلیدهای محرمانه، هر دو مقدار DECRYPT و ENCRYPT را تنظیم می‌نماید.

--usage-derive

تعیین فلگ کاربرد کلید برای 'derive' (اشتقاق) (فقط برای EC).

--usage-wrap

تعیین فلگ کاربرد کلید برای 'wrap' (بسته‌بندی).

--usage-encapsulate

تعیین فلگ کاربرد کلید برای 'encapsulate' (کپسوله‌سازی) (تنظیم DECAPSULATE در privkey، تنظیم ENCAPSULATE در pubkey).

--label name, -a name

مشخص کردن نام شیء مورد نظر برای عملیات (یا برچسب توکن هنگام استفاده از --init-token).

--list-mechanisms, -M

نمایش فهرست سازوکارهای (mechanisms) پشتیبانی‌شده توسط توکن.

--list-objects, -O

نمایش فهرستی از اشیاء.

گزینه‌های --keytype، --label، --id یا --application-id می‌توانند برای فیلتر کردن اشیاء فهرست‌شده استفاده شوند.

--list-slots, -L

نمایش فهرستی از اسلات‌های در دسترس روی توکن.

--list-token-slots, -T

فهرست کردن اسلات‌های دارای توکن.

--list-interfaces

فهرست کردن رابط‌های کتابخانه PKCS #11 3.0.

--session-rw,

اجبار به باز کردن نشست PKCS#11 با CKF_RW_SESSION.

--login, -l

احراز هویت در توکن پیش از انجام سایر عملیات‌ها. در صورتی که یک PIN در خط فرمان ارائه شده باشد، نیازی به این گزینه نیست.

--login-type

مشخص کردن نوع ورود ('so'، 'user'، 'context-specific'؛ پیش‌فرض: 'user').

--mechanism mechanism, -m mechanism

استفاده از سازوکار (mechanism) مشخص‌شده برای عملیات‌های توکن. برای مشاهده فهرست سازوکارهای پشتیبانی‌شده توسط توکن خود، -M را ببینید. سازوکار را می‌توان در قالب هگزادسیمال نیز مشخص کرد، مانند 0x80001234.

--mgf function

استفاده از تابع تولید پیام (MGF) مشخص‌شده در function برای امضاهای RSA-PKCS-PSS یا رمزگشایی‌های RSA-OAEP. آرگومان‌های پشتیبانی‌شده از MGF1-SHA1 تا MGF1-SHA512 در صورت پشتیبانی درایور هستند. مقدار پیش‌فرض بر اساس انتخاب تابع هش تعیین می‌شود.

--module mod

مشخص کردن ماژول (یا کتابخانه) PKCS#11 برای بارگذاری.

--moz-cert filename, -z filename

آزمایش تولید جفت‌کلید و درخواست گواهی به شیوه موزیلا. مسیر filename را برای فایل گواهی مشخص کنید.

--output-file filename, -o filename

مشخص کردن مسیر فایل خروجی.

--pin pin, -p pin

استفاده از pin داده‌شده برای عملیات‌های توکن. اگر روی env:VARIABLE تنظیم شود، مقدار متغیر محیطی VARIABLE استفاده می‌شود. هشدار: در استفاده از این گزینه محتاط باشید زیرا سایر کاربران ممکن است بتوانند خط فرمان را از سیستم بخوانند یا در صورتی که در یک اسکریپت جاسازی شده باشد آن را مشاهده نمایند.

این گزینه همچنین گزینه --login را تنظیم خواهد کرد.

--public-key-info

خواندن کلید عمومی از ماژول با استفاده از "CKA_PUBLIC_KEY_INFO" (همراه با --read-object --type public استفاده شود). خروجی یک "SubjectPublicKeyInfo" است، یعنی همان ساختاری که در گواهی‌ها و openssl استفاده می‌شود.

--puk puk

ارائه PUK کاربر در خط فرمان.

--new-pin pin

ارائه PIN جدید کاربر در خط فرمان.

--sensitive

تنظیم ویژگی CKA_SENSITIVE (شیء نمی‌تواند به‌صورت متن آشکار فاش شود).

--extractable

تنظیم ویژگی CKA_EXTRACTABLE (شیء قابل استخراج است).

--undestroyable

تنظیم ویژگی CKA_DESTROYABLE روی false (شیء قابل نابود کردن نیست).

--set-id id, -e id

تنظیم CKA_ID برای شیء.

--show-info, -I

نمایش اطلاعات عمومی توکن.

--sign, -s

امضا کردن مقداری داده.

--decrypt,

رمزگشایی مقداری داده.

--encrypt,

رمزگذاری مقداری داده.

--unwrap,

باز کردن (unwrap) کلید.

--wrap,

بسته‌بندی (wrap) کلید.

--derive,

اشتقاق یک کلید محرمانه با استفاده از یک کلید دیگر و مقداری داده.

--derive-pass-der,

اشتقاق کلید عمومی کدگذاری‌شده با DER برای ECDHpass جهت سازگاری با برخی پیاده‌سازی‌های PKCS#11.

--salt-len bytes

مشخص کردن تعداد بایت‌های salt مورد استفاده در امضاهای RSA-PSS. دو مقدار ویژه را می‌پذیرد: "-1" به معنای برابر بودن طول salt با طول digest است؛ "-2" یا "-3" به معنای استفاده از حداکثر طول مجاز است. برای عملیات اعتبارسنجی (verify)، مقدار "-2" به این معناست که طول salt به‌طور خودکار از امضا بازیابی می‌شود. مقدار "-2" برای عملیات اعتبارسنجی فقط برای ماژول opensc pkcs#11 پشتیبانی می‌شود. مقدار پیش‌فرض، طول digest (-1) است.

--slot id

مشخص کردن شناسه اسلات مورد استفاده (قالب HEX با پیشوند 0x یا عدد ده‌دهی را می‌پذیرد).

--slot-description description

مشخص کردن توضیحات اسلات مورد استفاده.

--slot-index index

مشخص کردن نمایه (index) اسلات مورد استفاده.

--object-index index

مشخص کردن نمایه (index) شیء مورد استفاده.

--use-locking

اعلام به ماژول pkcs11 برای استفاده از قفل‌گذاری ریسمان‌های سیستم‌عامل.

--test-threads options

آزمایش کاربرد ریسمان ماژول pkcs11. (کد منبع را ببینید).

--token-label label

مشخص کردن برچسب توکن. نخستین اسلاتی که توکن واردشده با این برچسب را داشته باشد استفاده خواهد شد.

--so-pin pin

استفاده از pin داده‌شده به عنوان PIN افسر امنیت (SO-PIN) برای برخی عملیات‌های توکن (مقداردهی اولیه توکن، مقداردهی اولیه PIN کاربر و غیره). اگر روی env:VARIABLE تنظیم شود، مقدار متغیر محیطی VARIABLE استفاده می‌شود. همان هشدار ذکرشده برای --pin در اینجا نیز صدق می‌کند.

--test, -t

انجام برخی آزمایش‌ها بر روی توکن. این گزینه بیشترین کاربرد را در هنگام استفاده همراه با --login یا --pin دارد.

--test-hotplug

آزمایش قابلیت‌های اتصال گرم (C_GetSlotList + C_WaitForSlotEvent).

--private

تنظیم ویژگی CKA_PRIVATE (شیء فقط پس از ورود قابل مشاهده است).

--always-auth

تنظیم ویژگی CKA_ALWAYS_AUTHENTICATE روی یک شیء کلید خصوصی. در صورت تنظیم، کاربر باید برای هر بار استفاده (امضا یا رمزگشایی) از کلید، PIN را وارد کند.

--allowed-mechanisms mechanisms

تنظیم ویژگی CKA_ALLOWED_MECHANISMS روی اشیاء کلید هنگام وارد کردن یک شیء یا تولید کلیدها. این آرگومان فهرستی از الگوریتم‌های جداشده با کاما را می‌پذیرد که می‌توانند با کلید داده‌شده استفاده شوند.

--test-ec

آزمایش EC (بهتر است همراه با گزینه --login یا --pin استفاده شود).

--test-fork

آزمایش فرآیند fork و فراخوانی C_Initialize() در فرآیند فرزند.

--type type, -y type

مشخص کردن نوع شیء مورد نظر برای عملیات. مقادیر معتبر عبارتند از cert، privkey، pubkey، secrkey و data.

--verbose, -v

موجب افزایش جزئیات خروجی pkcs11-tool می‌شود.

توجه: این مورد تأثیری بر سطح اشکال‌زدایی OpenSC ندارد! برای قرار دادن ماژول OpenSC PKCS#11 در حالت اشکال‌زدایی، متغیر محیطی OPENSC_DEBUG را روی یک عدد غیر صفر تنظیم کنید.

--verify,

اعتبارسنجی امضای مقداری داده.

--read-object, -r

دریافت ویژگی CKA_VALUE شیء (همراه با --type استفاده شود).

--delete-object, -b

حذف یک شیء.

--application-label label

مشخص کردن برچسب برنامه شیء داده (همراه با --type data استفاده شود).

--application-id id

مشخص کردن شناسه برنامه شیء داده (همراه با --type data استفاده شود).

--issuer data

مشخص کردن صادرکننده در قالب هگزادسیمال (همراه با --type cert استفاده شود).

--subject data

مشخص کردن موضوع (subject) در قالب هگزادسیمال (همراه با --type cert/privkey/pubkey استفاده شود).

--signature-file filename

مسیر فایل امضا برای اعتبارسنجی امضا

--signature-format format

قالب امضای ECDSA: مقادیر 'rs' (پیش‌فرض)، 'sequence'، 'openssl'.

--write-object filename, -w filename

نوشتن یک شیء کلید یا گواهی بر روی توکن. filename به فایل گواهی یا کلید با کدگذاری DER اشاره دارد.

--generate-random num

دریافت num بایت داده تصادفی.

--allow-sw

اجازه استفاده از سازوکارهای نرم‌افزاری که فلگ CKF_HW برای آن‌ها تنظیم نشده است. ممکن است هنگام استفاده از توکن‌های نرم‌افزاری و شبیه‌سازها مورد نیاز باشد.

--iv data

بردار مقداردهی اولیه (IV) برای رمزهای متقارن. مقدار data یک عدد هگزادسیمال است، مانند "000013aa7bffa0".

--mac-general-param num

تنظیم طول MAC برای سازوکارهای طول عمومی MAC به num بایت.

--aad data

داده‌های احراز هویت شده اضافی (AAD) برای رمزهای AEAD. مقدار data یک عدد هگزادسیمال است.

--tag-bits-len num

تنظیم طول برچسب (tag) برای رمزهای AEAD به num بیت.

--salt-file filename

مشخص کردن فایل حاوی salt برای HKDF (اختیاری)

--info-file filename

مشخص کردن فایل حاوی اطلاعات (info) برای HKDF (اختیاری)

--uri value

مشخص کردن شناسه PKCS#11 URI برای ماژول، اسلات، توکن یا شیء

--uri-with-slot-id

گنجاندن SlotId در PKCS#11 URI

انجام آزمایش پایه‌ای از عملکرد کارت:

pkcs11-tool --test --login

فهرست کردن تمام گواهی‌های موجود بر روی کارت هوشمند:

pkcs11-tool --list-objects --type cert

خواندن گواهی با شناسه CERT_ID در قالب DER از کارت هوشمند و تبدیل آن به PEM از طریق OpenSSL:

pkcs11-tool --read-object --id $CERT_ID --type cert \
					--output-file cert.der
openssl x509 -inform DER -in cert.der -outform PEM > cert.pem

نوشتن یک گواهی بر روی توکن:

pkcs11-tool --login --write-object certificate.der --type cert

تولید جفت‌کلید RSA جدید:

pkcs11-tool --login --keypairgen --key-type RSA:2048

تولید جفت‌کلید RSA جدید با قابلیت استخراج:

pkcs11-tool --login --keypairgen --key-type RSA:2048 --extractable

تولید یک جفت‌کلید منحنی بیضوی با OpenSSL و وارد کردن آن به کارت با شناسه $ID:

openssl genpkey -out EC_private.der -outform DER \
	-algorithm EC -pkeyopt ec_paramgen_curve:P-521
pkcs11-tool --write-object EC_private.der --id "$ID" \
	--type privkey --label "EC private key" -p "$PIN"
openssl pkey -in EC_private.der -out EC_public.der \
	-pubout -inform DER -outform DER
pkcs11-tool --write-object EC_public.der --id "$ID" \
	--type pubkey  --label "EC public key" -p $PIN

فهرست کردن کلیدهای خصوصی:

pkcs11-tool --login --list-objects --type privkey

امضا کردن مقداری داده ذخیره‌شده در فایل data با استفاده از کلید خصوصی با شناسه ID و با استفاده از سازوکار RSA-PKCS:

pkcs11-tool --sign --id $ID --mechanism RSA-PKCS \
	--input-file data --output-file data.sig

همچنین ارسال داده‌ها از طریق لوله‌کشی (pipe) از stdin به جای تعیین فایل ورودی امکان‌پذیر است:

dd if=data bs=128 count=1 \
	| pkcs11-tool --sign --id $ID --mechanism RSA-PKCS \
	> data.sig

اعتبارسنجی داده‌های امضاشده:

pkcs11-tool --id ID --verify -m RSA-PKCS \
	--input-file data --signature-file data.sig

برای رمزگذاری یک فایل با استفاده از کلید AES با شناسه ۸۵ و با استفاده از سازوکار AES-CBC با padding:

pkcs11-tool --login --encrypt --id 85 -m AES-CBC-PAD \
	--iv "00000000000000000000000000000000" \
	-i file.txt -o encrypted_file.data

رمزگشایی فایل رمزگذاری‌شده:

pkcs11-tool --login --decrypt --id 85 -m AES-CBC-PAD \
	--iv "00000000000000000000000000000000" \
	--i encrypted_file.data -o decrypted.txt

استفاده از کلید با شناسه ۷۵ و سازوکار AES-CBC-PAD با بردار مقداردهی اولیه "00000000000000000000000000000000" جهت بسته‌بندی (wrap) کلید با شناسه ۷۶ در فایل خروجی exported_aes.key:

pkcs11-tool --login --wrap --id 75 --mechanism AES-CBC-PAD \
	--iv "00000000000000000000000000000000" \
	--application-id 76 \
	--output-file exported_aes.key

استفاده از کلید با شناسه ۲۲ و سازوکار RSA-PKCS جهت باز کردن (unwrap) کلید از فایل aes_wrapped.key. پس از یک عملیات unwrap موفق، یک کلید AES جدید روی توکن ایجاد می‌شود. شناسه این کلید روی ۹۰ و برچسب آن روی unwrapped-key تنظیم می‌شود. نکته: برای کارت MyEID، اندازه کلید AES باید در مشخصات کلید وجود داشته باشد، یعنی AES:16.

pkcs11-tool --login --unwrap --mechanism RSA-PKCS --id 22 \
	-i aes_wrapped.key --key-type AES: \
	--application-id 90 --application-label unwrapped-key

استفاده از SO-PIN برای مقداردهی اولیه یا بازنشانی مجدد PIN:

pkcs11-tool --login --login-type so --init-pin

pkcs11-tool توسط Olaf Kirch <okir@suse.de> نوشته شده است.

06/02/2026 opensc