استخدام Tink لاستيفاء متطلبات الأمان على معيار FIPS 140-2

لم يتم التحقق من صحة FIPS 140-2 في تطبيق Tink نفسه. ومع ذلك، فإنّه يتوافق مع العديد من خوارزميات FIPS 140-2 المعتمَدة، ويمكن لعمليات التنفيذ الأساسية استخدام وحدات تشفير تم التحقّق من صحتها، مثل BoringSSLs BuringCrypto. يتضمّن Tink WORKSPACE لإنشاء BoingSSL في وضع FIPS.

تجدُر الإشارة إلى أنّ مساحة العمل لا تقدّم ضمانًا متأصلًا بأنّ استخدامك لـ BoringSSL متوافق مع معيار FIPS. ننصحك بشدّة بقراءة سياسة الأمن الرسمية لموقع BuringCrypto.

الخوارزميات المتوافقة

تمت الموافقة على الخوارزميات التالية في Tink وفقًا لـ FIPS 140-2 (يمكنك الاطّلاع على مزيد من المعلومات في FIPS 140-2 الملحق A):

  • التشفير المُصادَق عليه
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • عنوان MAC
    • تقنية HMAC-SHA256
    • بروتوكول AES-CMAC
  • التوقيعات الرقمية
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

وضع FIPS فقط في C++

إذا طُلب منك استخدام خوارزميات FIPS 140-2 وعمليات التنفيذ التي تم التحقق من صحتها، يمكنك إنشاء Tink في وضع FIPS فقط. وهذا من شأنه حصر الاستخدام على الخوارزميات المعتمدة والتحقق مما إذا كان Tink يستخدم وحدة تشفير تم التحقق من صحتها.

سيؤدي هذا إلى تغيير سلوك Tink بالطرق التالية:

  • لا تسجِّل دوال Register() سوى الخوارزميات التي تتضمّن تنفيذ FIPS. وهذا يعني أنّه يمكنك فقط استخدام مجموعات المفاتيح للخوارزميات التي تستخدم وحدة تشفير تم التحقّق من صحتها.
  • يتحقق تينك مما إذا كان قد تم إنشاء BoingSSL باستخدام وحدة BoingCrypto. عند استدعاء الوحدات الأساسية، يعرض الخطأ INTERNAL عندما لا تكون الوحدة النمطية متاحة.
  • يقتصر استخدام الوحدات الأساسية في subtle/ على الخوارزميات التي تستخدم وحدة تشفير تم التحقّق من صحتها.

BoringCrypto

يستخدم Tink لغة BoringCrypto في لغة C++ لتوفير إمكانية الوصول إلى وحدة التشفير التي تم التحقّق من صحتها. تفرض حالة التحقق الحالية القيود الإضافية التالية على الخوارزميات المتاحة عند استخدام وضع FIPS فقط:

  • لم يتم التحقق من صحة AES-CMAC وهي غير متاحة.
  • تم تقييد RSA-SSA-PKCS1 بمعامل 3072 بت
  • يتم تقييد RSA-SSA-PSS بمعامل 3072 بت

لاستخدام وحدة BoingCrypto مع Bazel، يمكنك إلغاء تعليق تعريف local_repository لـ boringssl في C++ WORKSPACE.

التفعيل في وقت التجميع

لإنشاء Tink في وضع FIPS فقط، حدِّد علامة في وقت التجميع:

bazel build ... --//third_party/tink/cc/config:use_only_fips=True

إذا كنت تريد التحقق في وقت التشغيل مما إذا كان Tink قد تم إنشاؤه في وضع FIPS فقط، فيمكنك تضمين العنوان internal/fips_utils.h الذي يوفر القيمة kUseOnlyFips الثابتة.

إذا لم تكن تصمم Tink في وضع FIPS فقط، سيظل بإمكانه الاستفادة من عمليات التنفيذ التي تم التحقق من صحتها لبعض الخوارزميات بدون تقييد استخدام الخوارزميات الأخرى.

التفعيل في وقت التشغيل

بدلاً من إنشاء Tink في وضع FIPS فقط، يمكنك استدعاء crypto::tink::RestrictToFips() من config/tink_fips.h الذي يضع علامة في وقت التشغيل لتفعيل القيود على أساسيات FIPS.

تحذير: في حال استخدام خيار وقت التشغيل، يجب استدعاء "crypto::tink::RestrictToFips()" قبل معالجة أي مادة أساسية أو تسجيل مدير المفاتيح أو وظائف Tink الأخرى. بالإضافة إلى ذلك، يجب أن تتأكد من إنشاء BoingSSL باستخدام وحدة BoingCrypto، وإلا فإن Tink لا يسمح لك بمعالجة أي بيانات.