طبقة واجهة PKCS#11
طبقة واجهة PKCS#11 هي المكوّن العلوي الذي تتحدّث إليه قاعدة بيانات Oracle. تقدّم واجهة PKCS#11 (Cryptoki) القياسية بلغة C التي يتوقّعها Oracle، وتترجم كلّ استدعاء إلى طلب تنقله الطبقات السفلى إلى DuoKey Cockpit.
نظرة عامة
المسؤوليات
واجهة دوال Cryptoki
تُنفّذ الطبقة دوال PKCS#11 (Cryptoki) القياسية التي يقودها Oracle TDE. يحمّل Oracle المكتبة عبر نقطة الدخول القياسية C_GetFunctionList ويستخدم مجموعة فرعية مركّزة:
- التهيئة:
C_Initialize،C_Finalize - الفتحة / الرمز المميّز:
C_GetSlotList،C_GetTokenInfo - الجلسة:
C_OpenSession،C_CloseSession،C_Login،C_Logout - الكائن:
C_FindObjectsInit،C_FindObjects،C_GetAttributeValue،C_CreateObject،C_DestroyObject - المفتاح:
C_GenerateKey - التشفيرية (التغليف / فكّ التغليف):
C_Encrypt،C_Decrypt، وصيغهما متعددة الأجزاء…Update/…Final
إدارة الجلسات
تحتفظ الطبقة بحالة الجلسة وتدعم جلسات متزامنة متعددة.
دورة حياة الجلسة:
الميزات:
- جلسات متعددة: تدعم جلسات متزامنة لكل فتحة.
- تتبّع الحالة: تتتبّع ما إذا كانت الجلسة مفتوحة وفي حالة المستخدم.
- العزل: لكل جلسة جدول ربط مقابض كائنات خاص بها.
- التنظيف: تحرّر الموارد عند إغلاق الجلسة.
تدخل الدالة C_Login حالة المستخدم لكنها لا ترسل رمز PIN. المصادقة مع Cockpit تتمّ عبر رمز حامل access_guid المنقول مع كلّ طلب (راجع طبقة DuoKey SDK).
إدارة مقابض الكائنات
يشير Oracle إلى الكائنات بمقابض صحيحة، بينما يشير DuoKey Cockpit إلى المفاتيح بمعرّفات دائمة. تربط طبقة الواجهة بينهما لكل جلسة — راجع ربط مقابض الكائنات للنموذج الكامل.
Oracle uses: integer object handle (e.g. 0x12345)
|
Library maps to: DuoKey key identifier
معالجة الآليات
تقبل الطبقة آليات Cryptoki القياسية التي يستخدمها Oracle TDE — CKM_AES_KEY_GEN للمفتاح الرئيسي وCKM_AES_CBC_PAD لتغليف مفاتيح الجداول والمساحات الجدولية — وتنقل العملية ومعاملاتها (IV، الحشو) إلى الطبقات السفلى. راجع الآليات التشفيرية للتفاصيل، بما في ذلك سبب لزوم مسار AES-CBC المحافظ على الطول لـ TDE.
معالجة السمات
تعالج الطبقة قوالب سمات PKCS#11 لإنشاء الكائنات والبحث عنها. السمات الشائعة:
- CKA_CLASS — فئة الكائن (مفتاح سرّي، كائن بيانات)
- CKA_KEY_TYPE — نوع المفتاح (مثل
CKK_AES) - CKA_LABEL / CKA_ID — تُستخدم لتحديد موقع المفتاح الرئيسي
- CKA_ENCRYPT / CKA_DECRYPT / CKA_WRAP / CKA_UNWRAP — علامات القدرات
إنّ CKA_VALUE سمة حسّاسة: ترفضها الدالة C_GetAttributeValue (CKR_ATTRIBUTE_SENSITIVE)، لذا لا تُرجَع بايتات المفتاح الرئيسي إلى المستدعي أبدًا.
الدوال الرئيسية
C_Initialize
تقرأ تكوين pkcs11.toml وتنشئ الاتصال بـ DuoKey Cockpit.
- تقرأ ملف التكوين (أو تجاوزات متغيّرات البيئة
DKE_PKCS11_*). - تجهّز عميل HTTPS برمز حامل
access_guid. - تتحقّق من الاتصال بـ Cockpit.
- تُرجع
CKR_OKعند النجاح، أوCKR_DEVICE_ERRORإذا تعذّر الوصول إلى Cockpit.
C_OpenSession
تفتح جلسة مع الرمز المميّز، وتهيّئ حالة الجلسة، وتنشئ جدول ربط مقابض الكائنات الخاص بالجلسة.
C_Login
تدخل حالة المستخدم. لا يُرسَل أي رمز PIN — رمز الحامل لكل طلب هو بيانات الاعتماد — لذا يتحقّق هذا الاستدعاء من الجاهزية بدلًا من إجراء تسجيل دخول تفاعلي.
C_GenerateKey
توفّر المفتاح الرئيسي AES-256: تتحقّق من الآلية، وتحلّل قالب السمات، وتطلب إنشاء المفتاح في Cockpit، وتربط معرّف المفتاح المُرجع بمقبض، وتُرجع المقبض إلى Oracle.
C_FindObjects
تحدّد موقع المفتاح الرئيسي عبر CKA_LABEL / CKA_ID، وتربط كلّ مفتاح مطابق بمقبض جلسة.
C_Encrypt / C_Decrypt
تغلّف / تفكّ تغليف مفاتيح الجداول والمساحات الجدولية تحت المفتاح الرئيسي. تُدعم الصيغ أحادية الجزء ومتعددة الأجزاء معًا؛ تحلّ الطبقة المقبض إلى معرّف مفتاح، وتنقل العملية إلى Cockpit، وتُرجع النتيجة.
معالجة الأخطاء
تترجم الطبقة أخطاء الطبقات السفلى والنقل إلى رموز إرجاع Cryptoki القياسية بحيث يرى Oracle نتائج متسقة:
| الحالة | رمز PKCS#11 |
|---|---|
| تعذّر الوصول إلى Cockpit / خطأ في الواجهة الخلفية | CKR_DEVICE_ERROR |
| فشل المصادقة | CKR_PIN_INCORRECT |
| مقبض كائن غير معروف | CKR_OBJECT_HANDLE_INVALID |
| معامل غير صالح | CKR_ARGUMENTS_BAD |
| آلية غير مدعومة | CKR_MECHANISM_INVALID |
| طُلبت سمة حسّاسة | CKR_ATTRIBUTE_SENSITIVE |
الخطوات التالية
- طبقة DuoKey SDK → - كيف تصل العمليات إلى DuoKey Cockpit
- ربط مقابض الكائنات → - افهم ترجمة المقابض
- تدفّق الاتصال → - شاهد كيفية تدفّق العمليات عبر النظام