FPE, format-preserving encryption é uma modalidade onde o formato do dado de saída (o texto cifrado) o mesmo formato da entrada (o texto simples).
O FPE simplifica o processo de transição, preservando a formatação e o comprimento dos dados originais, permitindo uma substituição direta de valores de texto simples por seus textos cifrados em aplicativos legados.
Um dos motivos para usar o FPE é resolver os problemas associados à integração da criptografia em aplicativos existentes, com modelos de dados bem definidos. Um exemplo típico é proteger um número de cartão de crédito, como 1234567812345670 (16 bytes de comprimento, apenas dígitos).
Adicionar criptografia a tais aplicativos pode ser um desafio se os modelos de dados forem alterados, envolveria a alteração dos atributos e tamanhos de dados. Por exemplo, a saída de uma cifra de bloco típica transformaria o número do cartão de crédito em um hexadecimal (por exemplo ,0x96a45cbcf9c2a9425cde9e274948cb67, 34 bytes, dígitos hexadecimais) ou valor Base64 (por exemplo, lqRcvPnCqUJc3p4nSUjLZw ==, 24 bytes e caracteres especiais alfanuméricos) mas os aplicativos esperam que o número do cartão de crédito seja um número de 16 dígitos.
Além de problemas simples de formatação, usando AES-128-CBC, este número de cartão de crédito pode ser criptografado para o valor hexadecimal 0xde015724b081ea7003de4593d792fd8b695b39e095c98f3a220ff43522a2df02.
Além dos problemas causados ​​pela criação de caracteres inválidos e pelo aumento do tamanho dos dados, os dados criptografados usando o modo CBC de um algoritmo de criptografia também muda seu valor quando são descriptografados e criptografados novamente. Isso acontece porque o valor de semente aleatório usado para inicializar o algoritmo de criptografia e incluído como parte do valor criptografado é diferente para cada operação de criptografia.
Por causa disso, é impossível usar dados que foram criptografados com o modo CBC como uma chave exclusiva para identificar uma linha em um banco de dados.
O NIST e as recomendações para o FPE
Em março de 2016, o NIST publicou o documento "Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption", com o objetivo de fornecer métodos aprovados para a criptografia dados com preservação de formato (FPE).