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

Tink in sé non è Standard FIPS 140-2 convalidato. Tuttavia, supporta diverse FIPS 140-2 algoritmi approvati e le implementazioni sottostanti possono utilizzare di crittografia convalidati come BoringSSLs BoringCrypto. Tink include un AREA DI LAVORO per creare BoringSSL in modalità FIPS.

Tieni presente che l'area di lavoro non offre alcuna garanzia intrinseca che l'utilizzo di BoringSSL è conforme allo standard FIPS. Ti consigliamo vivamente di leggere il criteri di sicurezza per BoringCrypto.

Algoritmi supportati

I seguenti algoritmi in Tink sono approvati in base a FIPS 140-2 (leggi ulteriori informazioni all'indirizzo FIPS 140-2 Allegato 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 ti viene richiesto di utilizzare algoritmi approvati FIPS 140-2 e puoi creare Tink solo in modalità FIPS. Ciò limita agli algoritmi approvati e controlla se Tink sta utilizzando una modulo crittografico.

Questo modifica il comportamento di Tink nei seguenti modi:

  • Le funzioni Register() registrano solo gli algoritmi con un FIPS un'implementazione convalidata. Ciò significa che puoi utilizzare solo Set di chiavi per algoritmi che utilizzano 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 è disponibili.
  • L'uso delle primitive in subtle/ è limitato agli algoritmi che utilizzano un modulo crittografico convalidato.

BoringCrypto

Tink usa BoringCrypto in C++ per fornire l'accesso a un modulo crittografico convalidato. È attuale lo stato di convalida impone i seguenti vincoli aggiuntivi sui algoritmi solo in modalità 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 dal Definizione di local_repository per boringssl in C++ AREA DI LAVORO.

Abilita al momento della 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 solo in modalità FIPS, puoi includere l'intestazione internal/fips_utils.h, che fornisce la costante kUseOnlyFips.

Se non stai creando Tink in modalità solo FIPS, può comunque utilizzare implementazioni convalidate per alcuni algoritmi senza limitare l'utilizzo di altri algoritmi.

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 restrizioni alle primitive FIPS.

AVVISO: se utilizzi l'opzione di runtime, crypto::tink::RestrictToFips() deve essere chiamato prima di gestire qualsiasi materiale delle chiavi, registrare il gestore delle chiavi o le altre funzionalità di Tink. Inoltre, devi assicurarti che BoringSSL abbia con il modulo BoringCrypto, altrimenti Tink non ti consente elaborare qualsiasi dato.