Utilizzare Tink per soddisfare i requisiti di sicurezza dello standard FIPS 140-2

Tink stesso non è convalidato FIPS 140-2. Tuttavia, supporta diversi algoritmi approvati da FIPS 140-2 e le implementazioni sottostanti possono utilizzare moduli crittografici convalidati come BoringSSLs BoringCrypto. Tink include un elemento WORKSPACE per creare BoringSSL in modalità FIPS.

Tieni presente che l'area di lavoro non offre alcuna garanzia intrinseca che l'utilizzo di BoringSSL sia conforme a FIPS. Ti consigliamo vivamente di leggere le norme di sicurezza ufficiali di BoringCrypto.

Algoritmi supportati

I seguenti algoritmi in Tink sono approvati secondo lo standard FIPS 140-2 (per ulteriori informazioni, consulta il documento FIPS 140-2 Annex A):

  • Crittografia autenticata
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC
    • HMAC-SHA256
    • AES-CMAC
  • Firme digitali
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

Modalità solo FIPS in C++

Se devi utilizzare algoritmi approvati FIPS 140-2 e implementazioni convalidate, puoi creare Tink in modalità solo FIPS. Questo limita l'utilizzo agli algoritmi approvati e controlla se Tink utilizza un modulo crittografico convalidato.

Questo modifica il comportamento di Tink nei seguenti modi:

  • Le funzioni Register() registrano solo gli algoritmi con un'implementazione convalidata FIPS. Ciò significa che puoi utilizzare i set di chiavi solo per gli algoritmi che usano un modulo crittografico convalidato.
  • Tink controlla se BoringSSL è stato creato con il modulo BoringCrypto. Le chiamate alle primitive restituiscono un errore INTERNAL quando il modulo non è disponibile.
  • L'utilizzo delle primitive in subtle/ è limitato agli algoritmi che utilizzano un modulo crittografico convalidato.

BoringCrypto

Tink utilizza BoringCrypto in C++ per fornire l'accesso a un modulo crittografico convalidato. Il suo stato di convalida attuale impone i seguenti vincoli aggiuntivi sugli algoritmi disponibili in modalità solo FIPS:

  • AES-CMAC non è stato convalidato e non è disponibile
  • RSA-SSA-PKCS1 è limitato al modulo a 3072 bit
  • RSA-SSA-PSS è limitato al modulo a 3072 bit

Per utilizzare il modulo BoringCrypto con Bazel, puoi rimuovere il commento dalla definizione di local_repository per boringssl nell'area di lavoro in C++.

Abilita in fase di compilazione

Per creare Tink in modalità solo FIPS, imposta un flag al momento della compilazione:

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

Se vuoi verificare in fase di runtime se Tink è stato creato in modalità solo FIPS, puoi includere l'intestazione internal/fips_utils.h, che fornisce la costante kUseOnlyFips.

Se non stai creando Tink in modalità solo FIPS, questo può comunque utilizzare implementazioni convalidate per alcuni algoritmi, ma non limitarne l'utilizzo.

Abilita in fase di esecuzione

In alternativa alla creazione di Tink in modalità solo FIPS, puoi chiamare crypto::tink::RestrictToFips() da config/tink_fips.h, che imposta un flag in fase di runtime per abilitare le limitazioni alle primitive FIPS.

AVVISO: se utilizzi l'opzione di runtime, è necessario chiamare crypto::tink::RestrictToFips() prima di gestire il materiale della chiave, la registrazione del gestore di chiavi o altre funzionalità di Tink. Inoltre, devi assicurarti che BoringSSL sia stato creato con il modulo BoringCrypto, altrimenti Tink non consente di elaborare dati.