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