Menggunakan Tink untuk memenuhi persyaratan keamanan FIPS 140-2

Tink sendiri tidak FIPS 140-2 divalidasi. Namun, kriptografi ini mendukung beberapa algoritma yang disetujui FIPS 140-2 dan implementasi yang mendasarinya dapat menggunakan modul kriptografi yang divalidasi seperti BoringSSLs BoringCrypto. Tink menyertakan WORKSPACE untuk membangun BoringSSL dalam mode FIPS.

Perlu diperhatikan bahwa ruang kerja tidak memberikan jaminan inheren bahwa penggunaan BoringSSL Anda mematuhi FIPS. Sebaiknya baca kebijakan keamanan resmi untuk BoringCrypto.

Algoritma yang didukung

Algoritma berikut di Tink disetujui sesuai dengan FIPS 140-2 (lihat informasi selengkapnya di FIPS 140-2 Lampiran A):

  • Enkripsi yang Diautentikasi
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC
    • HMAC-SHA256
    • AES-CMAC
  • Tanda Tangan Digital
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

Mode khusus FIPS di C++

Jika diharuskan untuk menggunakan algoritma yang disetujui FIPS 140-2 dan implementasi tervalidasi, Anda dapat mem-build Tink dalam mode khusus FIPS. Tindakan ini akan membatasi penggunaan algoritma yang disetujui dan memeriksa apakah Tink menggunakan modul kriptografi yang divalidasi.

Tindakan ini akan mengubah perilaku Tink dengan cara berikut:

  • Fungsi Register() hanya mendaftarkan algoritma yang memiliki implementasi tervalidasi FIPS. Ini berarti Anda hanya dapat menggunakan Keyset untuk algoritme yang menggunakan modul kriptografi yang divalidasi.
  • Tink memeriksa apakah BoringSSL telah dibuat dengan modul BoringCrypto. Panggilan ke primitif akan menampilkan error INTERNAL jika modul tidak tersedia.
  • Penggunaan primitif di subtle/ dibatasi untuk algoritme yang menggunakan modul kriptografis yang divalidasi.

BoringCrypto

Tink menggunakan BoringCrypto di C++ untuk memberikan akses ke modul kriptografi yang divalidasi. Status validasinya saat ini menimbulkan batasan tambahan berikut pada algoritma yang tersedia saat dalam mode khusus FIPS:

  • AES-CMAC belum divalidasi dan tidak tersedia
  • RSA-SSA-PKCS1 dibatasi untuk modulus 3072-bit
  • RSA-SSA-PSS dibatasi untuk modulus 3072-bit

Untuk menggunakan modul BoringCrypto dengan Bazel, Anda dapat membatalkan komentar definisi local_repository untuk boringssl di C++ WORKSPACE.

Aktifkan pada waktu kompilasi

Untuk mem-build Tink dalam mode khusus FIPS, tetapkan flag pada waktu kompilasi:

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

Jika pada runtime ingin memeriksa apakah Tink telah di-build dalam mode khusus FIPS, Anda dapat menyertakan header internal/fips_utils.h yang menyediakan kUseOnlyFips yang konstan.

Jika Anda tidak mem-build Tink dalam mode khusus FIPS, Tink masih dapat menggunakan penerapan tervalidasi untuk beberapa algoritma, tetapi tidak membatasi penggunaan algoritma lainnya.

Aktifkan pada waktu proses

Sebagai alternatif untuk mem-build Tink dalam mode khusus FIPS, Anda dapat memanggil crypto::tink::RestrictToFips() dari config/tink_fips.h yang menetapkan flag saat runtime untuk mengaktifkan batasan pada primitif FIPS.

PERINGATAN: Jika Anda menggunakan opsi runtime, crypto::tink::RestrictToFips() harus dipanggil sebelum menangani materi kunci apa pun, mendaftarkan pengelola kunci, atau fungsi Tink lainnya. Selain itu, Anda harus memastikan bahwa BoringSSL telah di-build dengan modul BoringCrypto. Jika tidak, Tink tidak akan mengizinkan Anda untuk memproses data apa pun.