Use o Tink para atender aos requisitos de segurança do FIPS 140-2

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ê 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.