از Tink برای برآوردن الزامات امنیتی FIPS 140-2 استفاده کنید

Tink خود با FIPS 140-2 تایید نشده است. با این حال، چندین الگوریتم تأیید شده FIPS 140-2 را پشتیبانی می کند و پیاده سازی های زیربنایی می توانند از ماژول های رمزنگاری معتبر مانند BoringSSLs BoringCrypto استفاده کنند. Tink شامل یک WORKSPACE برای ساخت BoringSSL در حالت FIPS است.

توجه داشته باشید که فضای کاری هیچ تضمینی وجود ندارد که استفاده شما از BoringSSL مطابق با FIPS باشد. ما قویاً توصیه می کنیم که سیاست امنیتی رسمی BoringCrypto را بخوانید.

الگوریتم های پشتیبانی شده

الگوریتم‌های زیر در Tink مطابق با FIPS 140-2 تأیید شده‌اند (اطلاعات بیشتر را در FIPS 140-2 پیوست A ببینید):

  • رمزگذاری تایید شده
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • مک
    • HMAC-SHA256
    • AES-CMAC
  • امضاهای دیجیتال
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

حالت فقط FIPS در C++

اگر لازم است از الگوریتم های تأیید شده FIPS 140-2 و پیاده سازی های معتبر استفاده کنید، می توانید Tink را در حالت فقط FIPS بسازید. این استفاده را به الگوریتم های تایید شده محدود می کند و بررسی می کند که آیا Tink از یک ماژول رمزنگاری معتبر استفاده می کند یا خیر.

این رفتار Tink را به روش های زیر تغییر می دهد:

  • توابع Register() فقط الگوریتم‌هایی را ثبت می‌کنند که پیاده‌سازی تأیید شده FIPS دارند. این بدان معنی است که شما فقط می توانید از Keysets برای الگوریتم هایی استفاده کنید که از یک ماژول رمزنگاری معتبر استفاده می کنند.
  • Tink بررسی می‌کند که آیا BoringSSL با ماژول BoringCrypto ساخته شده است یا خیر. هنگامی که ماژول در دسترس نباشد، فراخوانی به primitives یک خطای INTERNAL برمی‌گرداند.
  • استفاده از ابتدایی در subtle/ محدود به الگوریتم هایی است که از یک ماژول رمزنگاری معتبر استفاده می کنند.

BoringCrypto

Tink از BoringCrypto در C++ برای دسترسی به یک ماژول رمزنگاری معتبر استفاده می‌کند. وضعیت اعتبار سنجی فعلی آن محدودیت های اضافی زیر را بر روی الگوریتم های موجود در حالت فقط FIPS اعمال می کند:

  • AES-CMAC تایید نشده و در دسترس نیست
  • RSA-SSA-PKCS1 به مدول 3072 بیتی محدود شده است
  • RSA-SSA-PSS به مدول 3072 بیتی محدود شده است

برای استفاده از ماژول BoringCrypto با 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 تنظیم می‌کند.

اخطار: اگر از گزینه runtime استفاده می‌کنید، باید crypto::tink::RestrictToFips() قبل از رسیدگی به هر ماده کلیدی، ثبت نام مدیر کلید یا سایر قابلیت‌های Tink فراخوانی شود. علاوه بر این، باید مطمئن شوید که BoringSSL با ماژول BoringCrypto ساخته شده است، در غیر این صورت Tink به شما اجازه پردازش هیچ داده ای را نمی دهد.