Menggunakan Tink untuk memenuhi persyaratan keamanan FIPS 140-2

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

Perlu diketahui bahwa ruang kerja tidak memberikan jaminan bawaan bahwa penggunaan BoringSSL oleh Anda adalah sesuai dengan FIPS. Sebaiknya Anda membaca kebijakan keamanan untuk BoringCrypto.

Algoritma yang didukung

Algoritma berikut di Tink disetujui berdasarkan 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 Anda diharuskan menggunakan algoritma FIPS 140-2 yang disetujui dan divalidasi standar, Anda dapat membangun Tink dalam mode FIPS saja. Ini membatasi ke algoritma yang disetujui dan memeriksa apakah Tink menggunakan modul kriptografi.

Tindakan ini akan mengubah perilaku Tink dengan cara berikut:

  • Fungsi Register() hanya mendaftarkan algoritma yang memiliki FIPS implementasi yang divalidasi. Ini berarti Anda hanya dapat menggunakan Keyset untuk algoritma 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 yang tersedia.
  • Penggunaan primitif di subtle/ dibatasi untuk algoritma yang menggunakan modul kriptografi yang tervalidasi.

BoringCrypto

Tink menggunakan BoringCrypto di C++ untuk menyediakan akses ke modul kriptografi yang divalidasi. Saat ini memberlakukan batasan tambahan berikut terkait status validasi data algoritme saat dalam mode FIPS saja:

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

Untuk menggunakan modul BoringCrypto dengan Bazel, Anda dapat menghapus tanda komentar Definisi local_repository untuk boringssl dalam C++ RUANG KERJA.

Aktifkan pada waktu kompilasi

Untuk membangun Tink dalam mode khusus FIPS, setel flag pada waktu kompilasi:

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

Jika Anda ingin memeriksa pada saat runtime, apakah Tink telah dibangun dalam mode FIPS saja, Anda dapat menyertakan header internal/fips_utils.h yang memberikan konstanta kUseOnlyFips.

Jika Anda tidak membuat Tink dalam mode khusus FIPS, Tink masih dapat digunakan implementasi yang divalidasi untuk beberapa algoritma tetapi tidak membatasi penggunaan algoritma-algoritma lain.

Aktifkan saat runtime

Sebagai alternatif untuk membangun Tink dalam mode FIPS saja, Anda dapat memanggil crypto::tink::RestrictToFips() dari config/tink_fips.h yang menyetel tanda saat runtime untuk mengaktifkan pembatasan terhadap primitif FIPS.

PERINGATAN: Jika Anda menggunakan opsi runtime, crypto::tink::RestrictToFips() harus dipanggil sebelum menangani materi kunci, mendaftarkan pengelola kunci, atau fungsi Tink lainnya. Selain itu, Anda harus memastikan bahwa BoringSSL memiliki dibuat dengan modul BoringCrypto, jika tidak, Tink tidak memungkinkan Anda memproses data apa pun.