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

A Tink em si não é Validado pelo FIPS 140-2. No entanto, ele aceita vários FIPS, 140 ou 2 algoritmos aprovados e as implementações subjacentes podem usar módulos criptográficos validados, como BoringSSLs BoringCrypto. O Tink inclui uma WORKSPACE para criar o BoringSSL no modo FIPS.

O espaço de trabalho não oferece nenhuma garantia inerente de que o uso do BoringSSL está em conformidade com o FIPS. Recomendamos que você leia a documentação oficial política de segurança da BoringCrypto.

Algoritmos com suporte

Os seguintes algoritmos no Tink são aprovados de acordo com a FIPS 140-2 (consulte mais informações em Anexo A do FIPS 140-2):

  • 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 for necessário usar algoritmos aprovados pelo FIPS 140-2 e validados você pode criar o Tink no modo somente FIPS. Isso restringe o uso em algoritmos aprovados e verifica se o Tink está utilizando uma módulo criptográfico.

Isso muda o comportamento do Tink das seguintes maneiras:

  • As funções Register() só registram algoritmos que têm um FIPS validada. Isso significa que você pode usar Conjuntos de chaves para algoritmos que usam um módulo criptográfico validado.
  • O Tink verifica se o BoringSSL foi criado com o módulo BoringCrypto. Chamadas para primitivos retornam um erro INTERNAL quando o módulo não está disponíveis.
  • O uso de primitivos no subtle/ é restrito a algoritmos que usam um módulo criptográfico validado.

BoringCrypto

O Tink usa o BoringCrypto em C++ para fornecer acesso a um módulo criptográfico validado. Atual o status de validação impõe as seguintes restrições adicionais à disponibilidade no modo somente FIPS:

  • O AES-CMAC não foi validado e não está disponível
  • RSA-SSA-PKCS1 está restrito ao módulo de 3072 bits
  • RSA-SSA-PSS está restrito a módulos de 3.072 bits

Para usar o módulo BoringCrypto com o Bazel, remova a marca de comentário do Definição de local_repository para boringssl no C++ ESPAÇO DE TRABALHO.

Ativar durante a 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 durante a 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á usar validadas para alguns algoritmos, mas sem restringir o uso de outros algoritmos.

Ativar no ambiente de execução

Como alternativa à criação do Tink no modo somente FIPS, você pode chamar crypto::tink::RestrictToFips() de config/tink_fips.h, que define uma sinalização durante a execução para ativar as restrições aos primitivos do FIPS.

AVISO: se você usar a opção de execução, crypto::tink::RestrictToFips() deve ser chamado antes de lidar com qualquer material de chave, registrar o gerenciador de chaves ou outras funcionalidades do Tink. Além disso, você deve garantir que a BoringSSL tenha foi criado com o módulo BoringCrypto. Caso contrário, o Tink não permite que você e processar os dados.