الاختبار باستخدام pkcs11-tool
دليل شامل لاختبار مكتبة DuoKey PKCS#11 باستخدام OpenSC pkcs11-tool
ينطبق على:
OpenSC pkcs11-toolمكتبة DuoKey PKCS#11Linux / Windows
المتطلبات المسبقة
المتطلبات المسبقة
- تثبيت OpenSC pkcs11-tool
- مكتبة DuoKey PKCS#11 مُصرَّفة (libdke_pkcs11.so أو dke_pkcs11.dll)
- ملف pkcs11.toml (المسار في DKE_PKCS11_CONF) أو متغيرات DKE_PKCS11_* مُكوَّنة (راجع نظرة عامة ← التكوين)
ملاحظة
يمكن أن تكون قيمة PIN (مثل
1234) أي قيمة لأنها لا تُتحقَّق منها حالياً من المكتبة. تُطلَب بموجب صياغة pkcs11-tool لكن تُتجاهَل من مكتبة DuoKey.معلومات عامة
عرض معلومات الرمز
pkcs11-tool --module ./libdke_pkcs11.so --list-token-slots
سرد الآليات المدعومة
pkcs11-tool --module ./libdke_pkcs11.so --list-mechanisms
سرد الكائنات والمفاتيح
سرد كل الكائنات
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so --list-objects
سرد مفتاح محدد بالتسمية
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--list-objects \
--label "test-key-RSA-2048"
التصفية حسب نوع المفتاح
# List public keys only
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--list-objects \
--type pubkey
# List by key type (e.g., AES)
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--list-objects \
--key-type "AES"
تنبيه
مرشِّح
--key-type معطوب (لا يعمل) في الإصدار 0.26 من pkcs11-tool.تصدير المفاتيح العامة
لا يمكن تصدير إلا المفاتيح العامة. تبقى المفاتيح الخاصة محمية في خلفية Cockpit.
تصدير مفتاح RSA العام
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--read-object \
--type pubkey \
--label "test-key-RSA-2048" \
--output-file test-key-RSA-2048.pubkey
تصدير مفتاح ECC العام
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--read-object \
--type pubkey \
--label "test-key-ECC-256" \
--output-file test-key-ECC-256.pubkey
التشفير وفك التشفير
مهم
بالنسبة لعمليات التشفير/فك التشفير، لا تدعم pkcs11-tool البحث عن المفتاح إلا بالمعرّف (لا بالتسمية). استخدم أمر
--list-objects أعلاه لاكتشاف معرّف المفتاح المطلوب استخدامه.تشفير / فك تشفير RSA
# Encrypt
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--encrypt \
--mechanism RSA-PKCS-OAEP \
--hash-algorithm sha256 \
--mgf MGF1-SHA256 \
--id "63336235376338372d333734662d346366332d396231332d626532353837333865666336" \
--input-file plaintext.txt \
--output-file encrypted.txt
# Decrypt
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--decrypt \
--mechanism RSA-PKCS-OAEP \
--hash-algorithm sha256 \
--mgf MGF1-SHA256 \
--id "63336235376338372d333734662d346366332d396231332d626532353837333865666336" \
--input-file encrypted.txt \
--output-file plaintext-2.txt
تشفير / فك تشفير AES-GCM
# Encrypt with AES-GCM
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--encrypt \
--mechanism AES-GCM \
--iv 000102030405060708090a0b0c0d0e0f \
--aad "48656c6c6f" \
--tag-bits-len 128 \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file plaintext.txt \
--output-file encrypted-aes.txt
# Decrypt with AES-GCM
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--decrypt \
--mechanism AES-GCM \
--iv 000102030405060708090a0b0c0d0e0f \
--aad "48656c6c6f" \
--tag-bits-len 128 \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file encrypted-aes.txt \
--output-file plaintext-2-aes.txt
تشفير / فك تشفير AES-CBC-PAD
# Encrypt with AES-CBC-PAD
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--encrypt \
--mechanism AES-CBC-PAD \
--iv 000102030405060708090a0b0c0d0e0f \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file plaintext.txt \
--output-file encrypted-aes-cbc.txt
# Decrypt with AES-CBC-PAD
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--decrypt \
--mechanism AES-CBC-PAD \
--iv 000102030405060708090a0b0c0d0e0f \
--id "30613263353462622d643436322d343864632d613132302d343135326661393033323063" \
--input-file encrypted-aes-cbc.txt \
--output-file plaintext-2-aes-cbc.txt
إدارة الكائنات
تُنشَأ الكائنات بواسطة أوامر توليد المفاتيح أدناه أو تُكتشَف بـ --list-objects. إنشاء كائن بيانات بـ --write-object غير مدعوم (C_CreateObject).
حذف مفتاح
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--delete-object \
--type secrkey \
--label 'test-pkcs11-generated-key-aes-1'
غير مدعوم
إنشاء الكائنات (--write-object)، ونسخ الكائنات، وتعديل السمات غير مدعومة. راجع تغطية الوظائف.
توليد المفاتيح
توليد زوج مفاتيح RSA
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--keypairgen \
--label 'test-pkcs11-generated-key-rsa' \
--key-type RSA:2048
توليد مفتاح AES
pkcs11-tool -l --pin 1234 --module ./libdke_pkcs11.so \
--keygen \
--label 'test-pkcs11-generated-key-aes-1' \
--key-type AES:256
المحاذير
التوقيع/التحقق والتغليف/فك التغليف مدعومان (لمفاتيح RSA / EC؛ ولا ينطبقان على مفاتيح Oracle TDE الرئيسية من نوع AES فقط). المحاذير الحقيقية هي:
| العنصر | ملاحظة |
|---|---|
| إنشاء الكائنات (--write-object) | غير مدعوم (C_CreateObject / C_CopyObject / C_SetAttributeValue). |
| العمليات متعددة الأجزاء | لا يُدعَم إلا التشفير/فك التشفير/التوقيع/التحقق/التلخيص أحادي الجزء. |
| اشتقاق المفاتيح | غير مدعوم (C_DeriveKey). |
| تلخيص SHA-1 | CKM_SHA_1 مُعلَنة لكن مرفوضة من الخلفية — استخدم SHA-256 / 384 / 512. |
| مرشِّح --key-type | معطوب في pkcs11-tool 0.26 (خلل في pkcs11-tool، وليس في المكتبة). |