Tink بحد ذاته ليس تم التحقق من صحة FIPS 140-2. مع ذلك، يتوافق مع العديد من بروتوكولات FIPS يمكن أن يستخدم 140-2 من الخوارزميات المعتمدة وعمليات التنفيذ الأساسية وحدات التشفير التي تم التحقق منها مثل BoringSSLs BuringCrypto. يتضمن Tink WorkSPACE لإنشاء BuringSSL في وضع FIPS.
تجدر الإشارة إلى أنّ مساحة العمل لا تقدّم أي ضمانات متأصّلة أنّ استخدامك لـ BuringSSL متوافق مع معيار FIPS ننصحك بشدة بقراءة المقالة الرسمية سياسة الأمان لشركة BuringCrypto.
الخوارزميات المتوافقة
تمت الموافقة على الخوارزميات التالية في Tink وفقًا FIPS 140-2 (يمكنك الاطّلاع على مزيد من المعلومات على الملحق "أ" (أ) وفقًا لمعايير FIPS 140-2:
- التشفير الذي تمت مصادقته
- 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 والذي تم التحقق من صحته. وهذا يعني أنه يمكنك فقط استخدام مجموعات مفاتيح خاصة بالخوارزميات التي تستخدم وحدة تشفير تم التحقق من صحتها. - يتحقّق Tink مما إذا كان قد تم إنشاء BuringSSL باستخدام وحدة BuringCrypto.
تعرض استدعاءات الوحدات الأولية خطأ
INTERNAL
عندما تكون الوحدة غير مفعّلة المتوفرة. - يقتصر استخدام الأساسيات في
subtle/
على الخوارزميات التي تستخدم وحدة تشفير تم التحقق من صحتها.
BoringCrypto
يستخدم Tink أداة BoringCrypto في لغة C++ لإتاحة الوصول إلى وحدة تشفير تم التحقق من صحتها. الوقت الحالي تفرض حالة التحقق من الصحة القيود الإضافية التالية على الخوارزميات عندما تكون في وضع FIPS فقط:
- لم يتم التحقق من صحة AES-CMAC وهي غير متاحة
- تم تقييد RSA-SSA-PKCS1 على معامل 3072 بت.
- يقتصر RSA-SSA-PSS على معامل 3072 بت
لاستخدام وحدة BuringCrypto مع 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 الأخرى. بالإضافة إلى ذلك، يجب التأكد من أن BuringSSL لديه
باستخدام وحدة BuringCrypto، وبخلاف ذلك، لن تسمح لك Tink
معالجة أي بيانات.