تغطية وظائف PKCS#11
كل وظيفة وآلية وسمة من Cryptoki 2.40 في مكتبة DuoKey PKCS#11، وحالتها الدقيقة.
تنفّذ المكتبة المجموعة الفرعية أحادية الجزء من Cryptoki اللازمة لإدارة المفاتيح واستخدامها عبر DuoKey Cockpit. كل خانة في جدول الوظائف مؤشر صالح: تؤدي الوظائف المُنفَّذة عملها، وتعيد البقية خطأً واضحاً (CKR_FUNCTION_NOT_SUPPORTED أو CKR_FUNCTION_NOT_PARALLEL).
الوظائف المُنفَّذة
أغراض عامة
| الوظيفة | السلوك |
|---|---|
C_GetFunctionList | تعيد جدول الوظائف (الرمز المصدَّر الوحيد). |
C_Initialize | تحمّل التكوين، وتبني عميل الوكيل، وتهيّئ الحالة العامة. |
C_Finalize | تفكّك الحالة العامة. |
C_GetInfo | تُبلِغ عن Cryptoki 2.40، والمكتبة 0.1، والصانع "DuoKey". |
إدارة الفتحة والرمز
| الوظيفة | السلوك |
|---|---|
C_GetSlotList | تعرض فتحة افتراضية واحدة بالضبط (slot_id من التكوين). |
C_GetSlotInfo | "DKE Cockpit Virtual HSM Slot" ثابتة، بأعلام CKF_TOKEN_PRESENT | CKF_HW_SLOT. |
C_GetTokenInfo | أعلام الرمز وبياناته الوصفية (أفضل جهد من الوكيل، مع احتياط دون اتصال). |
C_GetMechanismList | تعيد قائمة الآليات المُعلَنة (انظر أدناه). |
C_GetMechanismInfo | نطاق حجم المفتاح والأعلام لكل آلية؛ تُضمِّن CKF_HW بعملية OR في الأعلام. |
إدارة الجلسة
| الوظيفة | السلوك |
|---|---|
C_OpenSession | جلسات تسلسلية فقط؛ تُرفَض المتوازية بـ CKR_SESSION_PARALLEL_NOT_SUPPORTED. |
C_CloseSession | تغلق جلسة. |
C_CloseAllSessions | تغلق كل جلسات الفتحة. |
C_GetSessionInfo | تشتق حالة RO/RW × العام/المستخدم. |
C_Login | تنقل الجلسة إلى حالة المستخدم. **لا يُرسَل أي PIN**؛ لا يُقبَل إلا CKU_USER / CKU_CONTEXT_SPECIFIC. |
C_Logout | تمسح علامة تسجيل الدخول. |
إدارة الكائنات
| الوظيفة | السلوك |
|---|---|
C_FindObjectsInit / C_FindObjects / C_FindObjectsFinal | تستعلم من Cockpit بمرشّح القالب، وتتدخّن النتائج وتُقسِّمها إلى صفحات. |
C_GetAttributeValue | تجيب عن السمات من الواصف المخزَّن مؤقتاً (بروتوكول طول المخزن المؤقت مدعوم). |
C_DestroyObject | تحذف الكائن في Cockpit وتنسى المقبض. |
التشفير وفك التشفير (أحادي الجزء)
| الوظيفة | السلوك |
|---|---|
C_EncryptInit / C_Encrypt | تشفير أحادي الجزء؛ بالنسبة لـ AES-GCM تُلحَق العلامة بالنص المشفَّر. |
C_DecryptInit / C_Decrypt | فك تشفير أحادي الجزء. |
التوقيع والتحقق والتلخيص (أحادي الجزء)
| الوظيفة | السلوك |
|---|---|
C_SignInit / C_Sign | توقيع أحادي الجزء. |
C_VerifyInit / C_Verify | تحقق أحادي الجزء؛ CKR_SIGNATURE_INVALID عندما تُبلِغ الخلفية عن عدم صلاحية. |
C_DigestInit / C_Digest | تلخيص أحادي الجزء بلا مفتاح (يُحسَب في Cockpit). |
إدارة المفاتيح
| الوظيفة | السلوك |
|---|---|
C_GenerateKey | تولّد مفتاحاً متماثلاً (تتطلب تسجيل دخول). |
C_GenerateKeyPair | تولّد زوج مفاتيح غير متماثل (تتطلب تسجيل دخول). |
C_WrapKey | تغلّف مفتاحاً تحت مفتاح تغليف. |
C_UnwrapKey | تفك تغليف كتلة إلى كائن مفتاح جديد. |
العشوائية
| الوظيفة | السلوك |
|---|---|
C_GenerateRandom | تطلب N بايت عشوائي من الخلفية. |
C_SeedRandom | تُقبَل وتُتجاهَل — لا يمكن للعميل بذر مولّد الأرقام العشوائية في الخلفية. |
غير مدعوم
- إدارة الرمز/PIN —
C_InitToken، وC_InitPIN، وC_SetPIN - حالة العملية —
C_GetOperationState، وC_SetOperationState - إنشاء/نسخ/حجم/ضبط سمة الكائن —
C_CreateObject، وC_CopyObject، وC_GetObjectSize، وC_SetAttributeValue - تشفير/فك تشفير متعدد الأجزاء —
C_EncryptUpdate، وC_EncryptFinal، وC_DecryptUpdate، وC_DecryptFinal - تلخيص متعدد الأجزاء —
C_DigestUpdate، وC_DigestKey، وC_DigestFinal - توقيع وتحقق متعدد الأجزاء / بالاسترداد —
C_SignUpdate، وC_SignFinal، وC_SignRecoverInit، وC_SignRecover، وC_VerifyUpdate، وC_VerifyFinal، وC_VerifyRecoverInit، وC_VerifyRecover - ثنائي الوظيفة —
C_DigestEncryptUpdate، وC_DecryptDigestUpdate، وC_SignEncryptUpdate، وC_DecryptVerifyUpdate - اشتقاق المفاتيح —
C_DeriveKey - أحداث الفتحة —
C_WaitForSlotEvent
C_GetFunctionStatus، وC_CancelFunction (إدارة الوظائف المتوازية القديمة).
لا تُستخدَم هذه العمليات في تدفقات عمل المفاتيح المدعومة، والتي هي أحادية الجزء بحكم البناء.
الآليات
يُعلِن C_GetMechanismList عن الآليات أدناه. تعيد C_GetMechanismInfo نطاق حجم المفتاح والأعلام وتضبط أيضاً CKF_HW. تتبع وحدات حجم المفتاح الآلية: AES بالبايت، وRSA/EC بالبت.
| الآلية | الحد الأدنى | الحد الأقصى | العمليات |
|---|---|---|---|
CKM_AES_KEY_GEN | 16 | 32 | التوليد |
CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD | 16 | 32 | التشفير، فك التشفير، التغليف، فك التغليف |
CKM_AES_GCM | 16 | 32 | التشفير، فك التشفير |
CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD | 16 | 32 | التغليف، فك التغليف |
CKM_GENERIC_SECRET_KEY_GEN | 1 | 512 | التوليد |
CKM_RSA_PKCS_KEY_PAIR_GEN | 2048 | 4096 | توليد زوج مفاتيح |
CKM_RSA_PKCS | 2048 | 4096 | التشفير، فك التشفير، التوقيع، التحقق، التغليف، فك التغليف |
CKM_RSA_PKCS_OAEP | 2048 | 4096 | التشفير، فك التشفير، التغليف، فك التغليف |
CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS | 2048 | 4096 | التوقيع، التحقق |
CKM_EC_KEY_PAIR_GEN | 256 | 521 | توليد زوج مفاتيح |
CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384 | 256 | 521 | التوقيع، التحقق |
CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512 | — | — | التلخيص |
CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC | 1 | 512 | التوقيع، التحقق |
يُحسَب التلخيص في Cockpit ويدعم حالياً SHA-256 / 384 / 512. تُعلَن CKM_SHA_1 لكن الخلفية ترفض ملخَّص SHA-1 (CKR_MECHANISM_INVALID).
الكائنات والسمات
فئات الكائنات: CKO_DATA, CKO_CERTIFICATE, CKO_PUBLIC_KEY, CKO_PRIVATE_KEY, CKO_SECRET_KEY, CKO_DOMAIN_PARAMETERS.
أنواع المفاتيح: CKK_AES, CKK_RSA, CKK_EC, CKK_GENERIC_SECRET, CKK_DSA, CKK_DH, CKK_SHA256_HMAC, CKK_SHA384_HMAC, CKK_SHA512_HMAC.
يعيد C_GetAttributeValue، من الواصف المخزَّن مؤقتاً: CKA_CLASS, CKA_KEY_TYPE, CKA_LABEL, CKA_ID, CKA_VALUE_LEN, CKA_MODULUS, CKA_PUBLIC_EXPONENT, CKA_MODULUS_BITS, CKA_EC_PARAMS, CKA_EC_POINT، وأعلام القدرة المنطقية (CKA_TOKEN, CKA_PRIVATE, CKA_SENSITIVE, CKA_EXTRACTABLE, CKA_ENCRYPT, CKA_DECRYPT, CKA_WRAP, CKA_UNWRAP, CKA_SIGN, CKA_VERIFY, CKA_DERIVE, ...).
تعيد CKA_VALUE دائماً CKR_ATTRIBUTE_SENSITIVE — لا تقيم مادة المفتاح الخام إلا في الخلفية ولا تعبر أبداً حدود PKCS#11. تُبلِغ المفاتيح عن CKA_EXTRACTABLE = false، وCKA_SENSITIVE = true، وCKA_NEVER_EXTRACTABLE = true. يعيد أي نوع سمة غير معروف القيمة CKR_ATTRIBUTE_TYPE_INVALID.