O primitivo de função pseudoaleatória (PRF, na sigla em inglês) permite produzir saídas pseudoaleatórias estáveis e arbitrárias para uma determinada entrada.
Como a Tink opera em conjuntos de chaves, esse primitivo expõe um conjunto correspondente de PRFs em vez de um único PRF. Os PRFs são indexados por um ID de chave de 32 bits. Isso pode ser usado para alternar a chave usada para editar uma informação, sem perder a associação anterior.
O PRF tem as seguintes propriedades:
- Determinista: o cálculo de um PRF para uma determinada entrada sempre produzirá a mesma saída.
- Aleatoriedade: a saída de um PRF é indistinguível de bytes aleatórios.
Escolher um tipo de chave
Recomendamos o uso de HMAC_SHA256_PRF
para a maioria dos usos, mas também há outras
opções.
De modo geral, o seguinte se aplica:
- O
HMAC_SHA512_PRF
pode ou não ser mais rápido, dependendo do tamanho da entrada e das especificidades do hardware usado. HMAC_SHA512_PRF
é o modo mais conservador que pode ser usado para um número praticamente ilimitado de mensagens.AES_CMAC_PRF
é mais rápido em sistemas compatíveis com a aceleração de hardware AES-NI.
Garantias mínimas de segurança
- Sem o conhecimento da chave, a PRF é indistinguível de uma função aleatória
- Segurança pelo menos de 128 bits, também em cenários multiusuário (quando um invasor não está visando uma chave específica, mas qualquer chave de um conjunto de até 232 chaves)
- Pelo menos 16 bytes de saída disponíveis
Exemplos de casos de uso
Os casos de uso do PRF incluem a edição determinística de informações de identificação pessoal (PII), funções hash com chave e a criação de subIDs que não permitem a mesclagem com o conjunto de dados original sem conhecer a chave.
Embora os PRFs possam ser usados para provar a autenticidade de uma mensagem, o primário MAC é recomendado para esse caso de uso porque oferece suporte para verificação, evitando os problemas de segurança que geralmente acontecem durante a verificação e oferecendo suporte automático para a rotação de chaves. Ela também permite algoritmos não determinísticos.