كيف تعمل
كيف تتصرف مكتبة 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، ثم تنسى المقبض المحلي.
تسجيل الدخول والمصادقة
لا يُرسِل 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 الدقيقة بدلاً من خطأ نقل عام.
أسبقية التكوين
تقرأ المكتبة ملف 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.