إنتقل إلى المحتوى الرئيسي
ينطبق على:
PKCS#11 (Cryptoki) 2.40مكتبة DuoKey PKCS#11

تكمّل هذه الملاحظات النظرة العامة وتغطية الوظائف. تصف كيف يتصرف المزوّد بحيث يستطيع المتكاملون فهم الأخطاء والجلسات والتكوين.

نموذج الوكيل​

لا تنفّذ المكتبة أي تشفير محلياً ولا تحتفظ بأي مفاتيح. يتحوّل كل استدعاء Cryptoki إلى طلب HTTPS واحد إلى DuoKey Cockpit، الذي ينفّذ العملية مقابل خزنة المستأجر أو HSM الداعم ويعيد النتيجة. تكتفي المكتبة بترميز الحمولات وإعادة توجيهها؛ ولا تعبر مادة المفتاح أبداً حدود PKCS#11 إلى مضيف التطبيق.

  • جلسات تسلسلية فقط. تُسلسَل حالة المكتبة بأكملها خلف قفل عام واحد، ولا تُدعَم إلا الجلسات التسلسلية — ترفض C_OpenSession أي طلب يفتقر إلى CKF_SERIAL_SESSION بـ CKR_SESSION_PARALLEL_NOT_SUPPORTED. تُنفَّذ الرحلة الشبكية البطيئة دون الاحتفاظ بالقفل، بحيث لا تحجب خلفية بطيئة استدعاءات غير ذات صلة.
  • مقابض الكائنات. تُربَط مقابض PKCS#11 الصحيحة بمعرّفات كائنات على جانب الخادم. يزيل التدخين (interning) التكرار حسب معرّف الخادم، بحيث تُعيد إعادة اكتشاف الكائن نفسه المقبض نفسه. تحذف C_DestroyObject الكائن في Cockpit، ثم تنسى المقبض المحلي.

تسجيل الدخول والمصادقة​

لا يُرسَل أي PIN

لا يُرسِل C_Login أي PIN — تُتجاهَل الوسيطتان pPin / ulPinLen. تُنقَل مصادقة الخلفية لكل طلب عبر رمز الوصول الحامل من التكوين. لا يقبل C_Login إلا CKU_USER وCKU_CONTEXT_SPECIFIC (يعيد دور SO القيمة CKR_USER_TYPE_INVALID) وينقل الجلسة ببساطة إلى حالة المستخدم كي يواصل التطبيق عمله. يتطلب C_GenerateKey وC_GenerateKeyPair حالة تسجيل الدخول.

السمات والمادة الحساسة​

يجيب C_GetAttributeValue من واصف مخزَّن مؤقتاً ويتّبع بروتوكول المخزن المؤقت القياسي ذا الاستدعاءين لـ Cryptoki (مؤشر قيمة فارغ يعيد الطول المطلوب؛ ومخزن مؤقت صغير جداً يعيد CKR_BUFFER_TOO_SMALL).

  • تعيد CKA_VALUE دائماً CKR_ATTRIBUTE_SENSITIVE — لا تقيم مادة المفتاح الخام إلا في الخلفية.
  • تُبلِغ المفاتيح عن قيم افتراضية معقولة: CKA_TOKEN = true، وCKA_SENSITIVE = true، وCKA_EXTRACTABLE = false، وCKA_NEVER_EXTRACTABLE = true، وCKA_MODIFIABLE = false.
  • يعيد نوع سمة غير معروف القيمة CKR_ATTRIBUTE_TYPE_INVALID. تُهمَل بصمت السمات غير المعروفة في مرشِّحات البحث وقوالب توليد المفاتيح.

معالجة AES-GCM​

بالنسبة لـ AES-GCM، تُلحَق علامة المصادقة بالنص المشفَّر (ciphertext || tag) وتُفصَل مرة أخرى عند فك التشفير، بحيث يرى المستدعون كتلة معتمة واحدة.

بروتوكول النقل​

كل عملية Cryptoki هي طلب HTTPS واحد إلى server_url المكوَّن الوحيد، موثَّق برمز الوصول الحامل. تُعاد الإخفاقات التشفيرية بطريقة تتيح للمكتبة تخطيط قيمة إرجاع Cryptoki الدقيقة بدلاً من خطأ نقل عام.

مرجع API
بروتوكول الطلب/الاستجابة التفصيلي موثّق بشكل منفصل في توثيق المطورين ← واجهة API لـ DKE.

أسبقية التكوين​

تقرأ المكتبة ملف TOML من DKE_PKCS11_CONF؛ وتتجاوز متغيرات البيئة الملف. الأسبقية هي متغيّر البيئة (غير الفارغ) > ملف TOML > الافتراضي المدمَج. إذا لم يُضبَط أي ملف، يُبنى التكوين بالكامل من متغيرات البيئة (يُطلَب على الأقل DKE_PKCS11_SERVER_URL).

  • يعطّل verify_tls = false التحقق من شهادة TLS — للاختبار فقط.
  • يُهيَّأ التسجيل عند C_Initialize من logging_level / logging_folder.

راجع النظرة العامة ← التكوين للاطلاع على مخطط pkcs11.toml الكامل وقائمة المتغيرات.

غرابات ومحاذير معروفة​

حالات حافة للآليات
  • تُعلِن C_GetMechanismList عن CKM_SHA_1، لكن الخلفية ترفض ملخَّص SHA-1 (CKR_MECHANISM_INVALID) — لا تُحسَب إلا SHA-256/384/512.
  • يستخدم التشفير وفك التشفير الأداة الأولية نفسها في الخزنة، لذا فإن آلية Cryptoki استشارية — سلامة الذهاب والإياب مضمونة للكتل المعتمة التي يخزّنها المستهلك.
لا إنشاء كائنات محلي

C_CreateObject وC_CopyObject وC_SetAttributeValue غير مدعومة (CKR_FUNCTION_NOT_SUPPORTED). تُنشَأ الكائنات عبر عمليات توليد المفاتيح (C_GenerateKey / C_GenerateKeyPair) أو تُكتشَف بـ C_FindObjects، ولا تُجمَّع أبداً سمة بسمة على العميل.

يستخدم المستهلكون آليات مختلفة

بما أن هذا مزوّد Cryptoki عام، تُستخدَم الآليات المُعلَنة (AES / RSA / EC / SHA / HMAC) حسب كل مستهلك. يستخدم Oracle TDE AES فقط — مفتاحه الرئيسي هو AES256 — راجع Oracle TDE ← Cockpit v2.