إحضار مواصفات المفتاح الخاصة بك

توضح هذه الوثيقة مواصفات استيراد المفاتيح المحمية من HSM من HSMs الداخلية للعملاء إلى مفتاح Key Vault.

السيناريو

يرغب عميل Key Vault في نقل مفتاح بشكل آمن من HSM الداخلي خارج Azure، إلى Azure Key Vault المدعوم من HSM. يشار إلى عملية استيراد مفتاح تم إنشاؤه خارج Key Vault باسم إحضار المفتاح الخاص بك (BYOK).

فيما يلي المتطلبات:

  • ينبغي ألا يتواجد المفتاح الذي سيتم نقله خارج في HSM في صيغة نص عادي على الإطلاق.
  • خارج HSM، المفتاح الذي سيتم نقله محمي دائمًا بواسطة مفتاح موجود في HSM داخل Azure Key Vault

المصطلحات

اسم المفتاح نوع المفتاح أصل الوصف
Key Exchange Key (KEK) RSA Azure Key Vault HSM زوج مفاتيح RSA مدعوم من HSM تم إنشاؤه في Azure Key Vault
مفتاح التغليف AES Vendor HSM مفتاح AES [سريع الزوال] تم إنشاؤه بواسطة HSM المحلي
مفتاح الهدف RSA، EC، AES (مُدار بواسطة HSM فقط) Vendor HSM المفتاح الذي سيتم نقله إلى مفتاح Azure Vault HSM

مفتاح Exchange Key: مفتاح مدعوم من HSM يقوم العميل بإنشاؤه في key vault حيث سيتم استيراد مفتاح BYOK. يجب أن يحتوي KEK هذا على الخصائص التالية:

  • مفتاح RSA-HSM (4096 بت أو 3072 بت أو 2048 بت)
  • سوف تحتوي على Key_ops ثابت («استيراد» فقط)، سوف يسمح له باستخدامه فقط خلال BYOK
  • يجب أن يكون في نفس المخزن حيث سيتم استيراد المفتاح الهدف

خطوات المستخدم

لتنفيذ نقل مفتاح، ينفذ المستخدم الخطوات التالية:

  1. إنشاء KEK.
  2. استرداد المفتاح العمومي لـ KEK.
  3. باستخدام مورد HSM الذي يُقدم أداة BYOK - قم باستيراد KEK إلى HSM الهدف وتصدير مفتاح الهدف المحمي بواسطة KEK.
  4. استيراد مفتاح الهدف المحمي إلى Azure Key Vault.

يستخدم العملاء أداة BYOK والوثائق المقدمة بواسطة مورد HSM لإكمال الخطوة 3. ينتج كائن ثنائي كبير الحجم لنقل المفتاح (ملف «.byok»).

قيود HSM

قد تطبق HSM الحالية قيودًا على المفتاح الذي يديرونه، بما في ذلك:

  • قد تحتاج إلى تكوين HSM للسماح بتصدير المفتاح المستند إلى الالتفاف
  • قد يستلزم الأمر وضع علامة CKA_EXTRACTABLE على المفتاح الهدف لـ HSM للسماح بالتصدير الخاضع للرقابة
  • في بعض الحالات، قد تحتاج KEK ومفتاح التغليف إلى وضع علامة CKA_TRUSTED، ما يسمح باستخدامه لالتفاف المفاتيح في HSM.

يكون تكوين مصدر HSM، بشكل عام، خارج نطاق هذه المواصفات. تتوقع Microsoft أن يقوم بائع HSM بإنتاج الوثائق المصاحبة لأداة BYOK الخاصة به لتتضمن أي خطوات تكوين من هذا القبيل.

ملاحظة

يمكن تنفيذ العديد من هذه الخطوات باستخدام واجهات أخرى مثل Azure PowerShell ومدخل Microsoft Azure. كما يمكن تنفيذها برمجيًا باستخدام وظائف مكافئة في Key Vault SDK.

إنشاء KEK

استخدم الأمرaz keyvault key createلإنشاء KEK مع تعيين عمليات المفتاح إلى استيراد. لاحظ عودة «kid» أسفل مُعرف المفتاح من الأمر أدناه.

az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --vault-name ContosoKeyVaultHSM

ملاحظة

تدعم الخدمات أطوال KEK مختلفة؛ على سبيل المثال، يدعم Azure SQL أطوال المفاتيح فقط من 2048 أو 3072 بايت. راجع الوثائق الخاصة بالخدمة للحصول على تفاصيل.

استرداد المفتاح العام ل KEK

قم بتنزيل جزء المفتاح العمومي من KEK وتخزينه في ملف PEM.

az keyvault key download --name KEKforBYOK --vault-name ContosoKeyVaultHSM --file KEKforBYOK.publickey.pem

إنشاء كائن ثنائي كبير الحجم لنقل المفتاح باستخدام أداة BYOK التي يوفرها مورد HSM

سيستخدم العميل أداة BYOK المقدمة مورد HSM لإنشاء كائن ثنائي كبير الحجم لنقل المفتاح (يتم تخزينه كملف "byok."). سيكون المفتاح العام KEK (كملف .pem) أحد المدخلات لهذه الأداة.

كائن ثنائي كبير الحجم لنقل المفتاح

على المدى الطويل، ترغب Microsoft في استخدام آلية CKM_RSA_AES_KEY_WRAP PKCS#11 لنقل المفتاح الهدف إلى Azure Key Vault لأن هذه الآلية تنتج كائن ثنائي كبير الحجم واحد، والأهم من ذلك، يتم التعامل مع مفتاح AES المتوسط بواسطة وحدتي HSM ويضمن أن يكون سريع الزوال. هذه الآلية غير متوفرة حاليًا في بعض وحدات HSM ولكن تركيبة حماية المفتاح الهدف مع CKM_AES_KEY_WRAP_PAD باستخدام مفتاح AES وحماية المفتاح AES مع CKM_RSA_PKCS_OAEP تنتج كائن ثنائي كبير الحجم مكافئ.

يعتمد النص العادي للمفتاح الهدف على نوع المفتاح:

  • بالنسبة لمفتاح RSA، يُشفر المفتاح الخاص ASN.1 DER [RFC3447] مغلفة في PKCS # 8 [RFC5208]
  • بالنسبة لمفتاح EC، يُشفر المفتاح الخاص ASN.1 DER [RFC5915] مُغلف في PKCS#8 [RFC5208]
  • بالنسبة لمفتاح الثمانية بتات، تكون البايتات البسيطة للمفتاح

يتم تحويل وحدات البايت لمفتاح النص العادي بعد ذلك باستخدام آلية CKM_RSA_AES_KEY_WRAP:

  • يتم إنشاء مفتاح AES سريع الزوال وتشفيره باستخدام تغليف مفتاح RSA باستخدام RSA-OAEP مع SHA1.
  • يتم تشفير مفتاح النص العادي المشفر باستخدام مفتاح AES باستخدام تغليف مفتاح AES مع ترك مساحة.
  • يُسلسل مفتاح AES المشفر ومفتاح النص العادي المشفر لإنتاج الكائن الثنائي كبير الحجم للنص المشفر النهائي.

يستخدم تنسيق الكائن الثنائي كبير الحجم للنقل تسلسل مضغوط لتشفير الويب JSON (RFC7516) بشكل رئيسي كوسيلة لتسليم بيانات التعريف المطلوبة إلى الخدمة لفك التشفير الصحيح.

إذا تم استخدام CKM_RSA_AES_KEY_WRAP_PAD، فإن تسلسل JSON للكائن الثنائي كبير الحجم للنقل هو:

{
  "schema_version": "1.0.0",
  "header":
  {
    "kid": "<key identifier of the KEK>",
    "alg": "dir",
    "enc": "CKM_RSA_AES_KEY_WRAP"
  },
  "ciphertext":"BASE64URL(<ciphertext contents>)",
  "generator": "BYOK tool name and version; source HSM name and firmware version"
}

  • kid = معرف مفتاح KEK. لمفاتيح Key Vault، يبدو مثل هذا: https://ContosoKeyVaultHSM.vault.azure.net/keys/mykek/eba63d27e4e34e028839b53fac905621
  • alg - خوارزمية.
  • dir = الوضع المباشر، أي، يتم استخدام الطفل المشار إليه لحماية النص المشفر مباشرة الذي يمثل تمثيلا دقيقا CKM_RSA_AES_KEY_WRAP
  • مُنشئ = حقل معلوماتي يشير إلى اسم وإصدار أداة BYOK ومصدر الشركة المُصنّعة لوحدات HSM والطراز. هذه المعلومات مخصصة للاستخدام في استكشاف الأخطاء وإصلاحها والدعم.

يتم تخزين الكائن الثنائي كبير الحجم JSON في ملف مع امتداد «.byok» بحيث يُعامل عملاء Azure PowerShell/CLI بطريقة صحيحة عندما يتم استخدام أوامر «Add-AzKeyVaultKey» (PSH) أو «استيراد مفتاح az keyvault» (CLI).

تحميل كائن ثنائي كبير الحجم لنقل المفتاح لاستيراد مفتاح HSM

سيقوم العميل بنقل الكائن الثنائي كبير الحجم لنقل المفتاح (ملف «.byok») إلى محطة عمل متصلة، ثم تشغيل أمر استيراد مفتاح az keyvault» لاستيراد هذا الكائن الثنائي كبير الحجم كمفتاح مدعوم من HSM إلى Key Vault.

لاستيراد مفتاح RSA، استخدم هذا الأمر:

az keyvault key import --vault-name ContosoKeyVaultHSM --name ContosoFirstHSMkey --byok-file KeyTransferPackage-ContosoFirstHSMkey.byok --ops encrypt decrypt

لاستيراد مفتاح EC، يجب تحديد نوع المفتاح واسم المنحنى.

az keyvault key import --vault-name ContosoKeyVaultHSM --name ContosoFirstHSMkey --byok-file --kty EC-HSM --curve-name "P-256" KeyTransferPackage-ContosoFirstHSMkey.byok --ops sign verify

عند تنفيذ الأمر أعلاه، ينتج عن إرسال طلب REST API كما يلي:

PUT https://contosokeyvaulthsm.vault.azure.net/keys/ContosoFirstHSMKey?api-version=7.0

طلب النص الأساسي عند استيراد مفتاح RSA:

{
  "key": {
    "kty": "RSA-HSM",
    "key_ops": [
      "decrypt",
      "encrypt"
    ],
    "key_hsm": "<Base64 encoded BYOK_BLOB>"
  },
  "attributes": {
    "enabled": true
  }
}

طلب النص الأساسي عند استيراد مفتاح EC:

{
  "key": {
    "kty": "EC-HSM",
    "crv": "P-256",
    "key_ops": [
      "sign",
      "verify"
    ],
    "key_hsm": "<Base64 encoded BYOK_BLOB>"
  },
  "attributes": {
    "enabled": true
  }
}

تكون قيمة «key_hsm» هي تنسيق KeyTransferPackage-ContosoFirstHSMkey.byok بأكمله.

المراجع

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