--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