A Tink não é validada pelo FIPS 140-2 (em inglês). No entanto, ela oferece suporte a vários algoritmos aprovados pelo FIPS 140-2, e as implementações subjacentes podem usar módulos criptográficos validados, como BoringSSLs BoringCrypto. O Tink inclui um Espaço de trabalho para criar o BoringSSL no modo FIPS.
Observe que o espaço de trabalho não oferece garantia inerente de que o uso do BoringSSL seja compatível com o FIPS. É altamente recomendável ler a política de segurança oficial do BoringCrypto.
Algoritmos com suporte
Os algoritmos a seguir no Tink são aprovados de acordo com a norma FIPS 140-2 (em inglês). Confira mais informações no FIPS 140-2 Anexo A (em inglês):
- Criptografia autenticada
- AES-GCM
- AES-CTR-HMAC-SHA256
- MAC
- HMAC-SHA256
- AES-CMAC
- Assinaturas digitais
- ECDSA
- RSA-SSA-PKCS1
- RSA-SSA-PSS
Modo somente FIPS em C++
Se você precisar usar implementações validadas e algoritmos aprovados pelo FIPS 140-2, crie o Tink no modo somente para FIPS. Isso restringe o uso a algoritmos aprovados e verifica se o Tink está usando um módulo criptográfico validado.
Isso altera o comportamento do Tink das seguintes maneiras:
- As funções
Register()
só registram algoritmos que têm uma implementação validada pelo FIPS. Isso significa que você só pode usar conjuntos de chaves para algoritmos que utilizam um módulo criptográfico validado. - O Tink verifica se o BoringSSL foi criado com o módulo BoringCrypto.
As chamadas para primitivos retornam um erro
INTERNAL
quando o módulo não está disponível. - O uso de primitivos em
subtle/
é restrito a algoritmos que utilizam um módulo criptográfico validado.
BoringCrypto
O Tink usa o BoringCrypto em C++ para fornecer acesso a um módulo criptográfico validado. O status de validação atual impõe as seguintes restrições extras aos algoritmos disponíveis quando no modo somente FIPS:
- O AES-CMAC não foi validado e não está disponível.
- RSA-SSA-PKCS1 é restrito a módulos de 3072 bits
- RSA-SSA-PSS é restrito a módulos de 3.072 bits
Para usar o módulo BoringCrypto com o Bazel, remova a marca de comentário da definição
local_repository
para boringssl
no Espaço de trabalho
C++.
Ativar no tempo de compilação
Para criar o Tink no modo somente FIPS, defina uma flag no tempo de compilação:
bazel build ... --//third_party/tink/cc/config:use_only_fips=True
Se você quiser verificar no momento da execução se o Tink foi criado no modo somente FIPS,
é possível incluir o cabeçalho internal/fips_utils.h
, que fornece a constante
kUseOnlyFips
.
Se você não estiver criando o Tink no modo somente FIPS, ele ainda poderá utilizar implementações validadas para alguns algoritmos, mas sem restringir o uso de outros.
Ativar no ambiente de execução
Como alternativa à criação do Tink no modo somente FIPS, é possível chamar
crypto::tink::RestrictToFips()
em config/tink_fips.h
, que define uma sinalização
no tempo de execução para ativar as restrições aos primitivos FIPS.
AVISO: se você usar a opção de execução, crypto::tink::RestrictToFips()
precisará ser chamado antes de processar qualquer material de chave, registrar o gerenciador de chaves ou
outras funcionalidades do Tink. Além disso, é preciso garantir que o BoringSSL tenha sido criado com o módulo BoringCrypto. Caso contrário, o Tink não permitirá que você processe nenhum dado.