إنتقل إلى المحتوى الرئيسي

طبقة واجهة 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

إدارة الجلسات​

تحتفظ الطبقة بحالة الجلسة وتدعم جلسات متزامنة متعددة.

دورة حياة الجلسة:

الميزات:

  • جلسات متعددة: تدعم جلسات متزامنة لكل فتحة.
  • تتبّع الحالة: تتتبّع ما إذا كانت الجلسة مفتوحة وفي حالة المستخدم.
  • العزل: لكل جلسة جدول ربط مقابض كائنات خاص بها.
  • التنظيف: تحرّر الموارد عند إغلاق الجلسة.
لا يُرسَل رمز PIN

تدخل الدالة 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

الخطوات التالية​