Para calcular a etiqueta de autenticação no modo Galois / Contador (GCM), primeiro um MAC é calculado usando GHASH sobre a cifra texto e os dados adicionais. Depois disso, este MAC é criptografado usando GCTR (usando o primeiro contador).
Minha pergunta é: por que esta última etapa de criptografia é necessária? Qual seria o problema de segurança se eu apenas usasse a saída de GHASH diretamente como a tag de autenticação?
Resposta
Qual seria o problema de segurança se eu apenas usasse a saída do GHASH diretamente como a tag de autenticação?
Então, alguém ouvindo mensagens criptografadas poderia recuperar $ H $ , um dos quais está correto.
A saída do GHASH é um polinômio público (baseado no texto cifrado e no AAD), avaliado em um valor secreto $ H $ . Acontece que, dado esse polinômio, $ H $ pode ser recuperado com eficiência, seja reescrevendo o polinômio como $ \ mathrm {GHASH} (H) + \ mathrm {Tag} = 0 $ , e recuperando as raízes disso (o que pode ser feito em um campo finito), ou ainda mais fácil, obtendo dois desses textos cifrados, reescrevendo ambos e usar um valor Euclidiano estendido para recuperar sua raiz comum.
Dado $ H $ , um invasor pode fazer modificações arbitrárias em mensagens criptografadas trivialmente ; sim, isso é ruim.
Comentários
- Mais uma pergunta: por que é necessário usar GCTR para criptografar o bloco GHASH em vez de apenas usar $ Enc_H (GHASH) $ como a tag? Dessa forma, o GMAC pode ser usado sem a necessidade de um IV.
- @mat: você quer dizer enviar $ GHASH $ por meio de AES (usando $ H $ como uma chave )? Bem, na verdade, esse tipo de coisa funcionaria (bem, eu não ' não usaria $ H $ como uma chave, mas fora isso …) e seria um design mais conservador; no entanto, o GCM foi originalmente projetado para ser um modo pipe-lineable; ou seja, poderia ser implementado com uma implementação de hardware AES em que a cada ciclo de clock, damos o próximo bloco de texto simples ao hardware, e a cada ciclo de clock o texto cifrado de 10-14 ciclos atrás aparece. Ao fazer uma criptografia no GHASH, ' d bloqueamos o pipeline …
- Quero dizer apenas um simples Criptografia ECB (usando $ H $ ou $ K $ como chave) do GHASH em vez de fazê-lo com GCTR. você teria a vantagem de que o GMAC seria mais fácil de usar, porque não ' não precisaria mais de um nonce. O pipelinig não é um problema aqui, já que a criptografia da tag é a última etapa a ser feita no GCM de qualquer maneira, então o pipeline está definitivamente vazio neste estágio.
- @David 天宇 Wong: principalmente desempenho ( GHASH é paralisável, hashes sem chave normalmente aren ' t)
- @David 天宇 Wong: oh, certo, isso também …