Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
padro SHA-3
Marco Antnio Lasmar Almada
Resumo
Cdigos de Autenticao de Mensagem (MACs) so utilizados para garantir a integridade de mensagens enviadas em um canal inseguro. Uma
construo bem difundida de MACs a HMAC, que utiliza funes de resumo para a gerao de cdigos de autenticao. Como o HMAC envolve
o uso de uma chave compartilhada apenas entre as partes da comunicao
como parmetro da funo de resumo, a segurana da construo depende
do hash subjacente.
Uma segunda construo possvel de MACs faz uso do K ECCAK, algoritmo baseado na ideia de funes-esponja e recentemente selecionado pelo
NIST como o padro SHA-3. Pelas propriedades de segurana que foram
verificadas at o momento para o K ECCAK, este se mostra uma boa opo
para autenticao de mensagens baseada em resumo, tanto em uso direto,
quanto combinada com HMAC. Assim, o K ECCAK oferece uma soluo
com perspectivas de validade a longo prazo para a gerao de MACs.
Palavras-chave: Funes criptogrficas de hash, MAC, SHA-3
Introduo
Cdigos de Autenticao de Mensagem so um mecanismo utilizado em comunicaes por um canal inseguro, em que uma chave compartilhada entre as
partes da comunicao empregada para garantir que a mensagem no foi alterada no trajeto. O emissor utiliza algum procedimento para gerar um cdigo de
autenticao de mensagem, que enviado junto com a mensagem a ser transmitida. Ao receber a mensagem, o emissor utiliza o mesmo processo para gerar um
Universidade
cdigo de autenticao da mensagem recebida; a mensagem enviada ser considerada ntegra se e somente se o cdigo de autenticao gerado e o cdigo recebido
forem iguais. O presente texto tem por objetivo apresentar duas construes que
podem ser utilizadas para a gerao de cdigos de autenticao de mensagem.
Como um preldio discusso dos mtodos, realizada uma breve discusso
sobre funes de resumo criptogrficas, do ponto de vista de segurana. Tambm so apresentadas as funes-esponja, que surgem como uma generalizao
do conceito de funo de resumo aplicvel a vrios problemas de criptografia,
dentre eles o problema de gerao de cdigos de autenticao de mensagem.
O primeiro mtodo a ser discutido para a gerao de cdigos de autenticao
de mensagem o HMAC, descrito em [3] por Bellare, Canetti e Krawczyk. Dada
uma mensagem e uma chave secreta, a construo proposta em [3] para o HMAC
gera uma etiqueta HMACK (m) a partir de duas aplicaes aninhadas de uma funo criptogrfica de resumo H. A chave secreta transformada e combinada com
o texto e com o resultado do primeiro resumo, fornecendo a entrada para a segunda funo de resumo, cuja sada utilizada como cdigo de autenticao de
mensagem. Com isso, se obtm uma funo de resumo chaveada, isto , cuja sada
dependente da chave utilizada na gerao. A segurana da construo HMAC
depende das propriedades criptogrficas da funo de resumo escolhida. [2][3]
Outra soluo possvel para a gerao de cdigos de autenticao de mensagem o uso do SHA-3, novo padro de algoritmos criptogrficos de resumo. [10]
O algoritmo do SHA-3 foi selecionado em uma competio conduzida em trs
fases entre 2007 e 2012, com o objetivo de fornecer uma soluo de hashing baseada em princpios distintos daqueles subjacentes ao SHA-2, padro atual que,
apesar de ainda seguro na prtica, est sujeito a certas vulnerabilidades tericas.
[8]
O K ECCAK, descrito em [6] para a terceira fase da competio do SHA-3,
um algoritmo baseado no princpio de funes-esponja, uma generalizao da
ideia de funes de resumo capaz de gerar sadas de tamanho arbitrrio a partir de
entradas de tamanho arbitrrio. Alm disso, as especificaes da competio para
a qual o K ECCAK foi construdo visam evitar diversas vulnerabilidades conhecidas em outros algoritmos de criptografia, em particular ataques de extenso. Com
isso, ele pode ser utilizado tanto como ncleo do HMAC quanto de maneira mais
direta para a gerao de cdigos de autenticao de mensagem.
Ao final, so descritas as perspectivas futuras para o uso de ambas as construes na gerao de cdigos de autenticao de mensagem, assim como algumas
possibilidades em aberto para investigao futura.
Funes de Resumo
Funes de resumo so primitivas criptogrficas que, a partir de uma mensagem m de tamanho arbitrrio, geram uma sntese d cujo tamanho independe
da mensagem. Esta sntese pode ser empregada como um identificador da mensagem em diversas aplicaes criptogrficas, como armazenamento de senhas e
esquemas de assinaturas digitais. Uma aplicao de particular interesse para os
fins deste texto o uso em esquemas de autenticao de mensagens. [12]
Para lidar com mensagens de tamanho arbitrrio, implementaes de funes
de resumo costumam utilizar uma abordagem iterativa, processando blocos de b
bits a cada iterao. Caso o tamanho da mensagem no seja um mltiplo de b bits,
os blocos de tamanho insuficiente devem ser expandidos, em geral de uma forma
especificada no prprio algoritmo de resumo.
2.1
Uma funo de resumo adequada para fins criptogrficos deve possuir trs
propriedades: ser unidirecional, possuir resistncia de segunda pr-imagem e resistncia coliso. [12] A unidirecionalidade ou resistncia de pr-imagem de
uma funo consiste na impossibilidade de se obter uma mensagem m a partir de
sua sntese d. Caso a funo de resumo no seja unidirecional, terceiros podem
utilizar a sntese para a reconstituio da mensagem, o que, alm de comprometer o sigilo da mensagem original, pode servir de ponto de partida para outros
ataques.
Como o espao de entradas possveis para uma funo de resumo ilimitado,
ao passo que a sada da funo limitada, existe em teoria um nmero infinito
de mensagens que so mapeadas em uma mesma sntese, graas ao princpio da
casa dos pombos. No caso de cdigos de autenticao de mensagem, tal vulnerabilidade d margem a um ataque conhecido como ataque de extenso de comprimento.
Seja um cdigo de autenticao m = H(K||x) gerado a partir de uma funo de
resumo H aplicada sobre a mensagem x, com a chave secreta K adicionada como
prefixo da mensagem. Uma parte maliciosa que intercepte a mensagem pode, sem
conhecer a chave, gerar uma mensagem cujo contedo seja diferente da mensagem
enviada, e adicionar caracteres semanticamente vazios (como o NUL do ASCII) at
encontrar uma mensagem alterada que gere a mesma sntese m; como o cdigo de
autenticao de mensagens gerado pela mensagem recebida ser igual ao cdigo
transmitido, o receptor da mensagem no ter como verificar que aquela no foi a
3
2.2
Funes-esponja
3
3.1
3.2
A construo HMAC
Estrutura do HMAC
produz uma sada de l bits. Sejam, alm disso, x a mensagem a ser autenticada e
K a chave compartilhada pelas partes legtimas da comunicao.
A etiqueta de autenticao gerada pelo HMAC
HMACK (x) = H((K opad)||H((K ipad)||x)),
onde ipad o byte 0x36 repetido b vezes e opad o byte 0x5C repetido b vezes.
A chave no deve ter mais que b bytes, e, caso seja menor que isso, deve ter zeros
adicionados ao seu final, de forma a obter uma chave de b bytes para a realizao
do XOR. As constantes ipad e opad servem para aumentar a segurana no caso
em que a chave tem originalmente menos que b bytes.
Como no caso geral do MAC, a etiqueta computada transmitida com a mensagem e comparada com a etiqueta computada pelo receptor. O uso de uma boa
funo de resumo garantir que a mensagem recebida x0 no ter sido adulterada
se e somente se a etiqueta HMACK (x0 ) obtida a partir dela for condizente com a
etiqueta recebida junto com x0 . [12]
3.2.2
Segurana
Para satisfazer as condies esperadas de um cdigo de autenticao de mensagem, a construo HMAC deve ser segura, o que, para um MAC, significa ser
resistente a falsificao. Em [2], os autores mostram que um terceiro que, sem
conhecer a chave K, consiga determinar a etiqueta HMACK (x) associada a algum
texto x tambm consegue quebrar a funo de espalhamento subjacente com o
mesmo esforo; desta forma, o HMAC seguro se a funo de resumo for uma
funo pseudo-aleatria e livre de colises. [3]
Este resultado foi posteriormente estendido por Bellare [1] para mostrar que
a funo de resumo ser pseudo-aleatria condio suficiente para que o HMAC
seja um MAC seguro, isto , que um terceiro no consiga gerar a etiqueta correspondente a um dado texto sem conhecer a chave secreta entre as partes da
comunicao.
Contra algumas funes de resumo que sabidamente no satisfazem a condio de [1], possvel criar ataques que diferenciem HMAC gerados a partir destas
funes aleatrias ou do HMAC de funes aleatrias, o que pode servir como
ponto de partida para um ataque.[9] Porm, no caso geral, a construo torna impraticveis alguns ataques conhecidos contra funes criptogrficas de espalhal
mento: ataques de aniversrio, para a busca de colises, exigiriam a coleta de 2 2
pares mensagem-MAC para um HMAC de l bits,[3] enquanto ataques de extenso
7
4.1
A competio para definir o padro a ser adotado como SHA-3 teve incio em
2007, com uma chamada pblica para a submisso de algoritmos. Das sessenta e
quatro submisses feitas para a competio, o NIST selecionou cinquenta e uma
para uma primeira rodada, das quais catorze foram selecionadas para uma segunda
etapa. A terceira fase iniciou-se em 2011, com a seleo de cinco algoritmos
finalistas; os autores dos finalistas puderam efetuar ajustes em relao s suas
submisses origniais. [8]
O critrio principal considerado na avaliao dos algoritmos foi a segurana:
sob esse prisma, foram avaliadas a segurana dos algoritmos nas aplicaes tpicas
de funo de espalhamento; o suporte dos algoritmos a HMAC, a funes pseudoaleatrias e a resumos aleatorizados; a resistncia a ataques conhecidos contra
funes de espalhamento; dentre outras consideraes de segurana. Tais critrios
foram avaliados a partir do feedback da comunidade criptogrfica ao longo do
processo de seleo. [8]
1 rgo do governo americano responsvel,
tecnolgicos.
4.2
Esta sesso apresentar o K ECCAK de acordo com a submisso feita pelos autores do algoritmo para a terceira fase da competio do SHA-3. [6] O algoritmo
consiste em uma famlia de funes-esponja 2 K ECCAK[r, c], em que o estado da
construo descrito por r + c bits, dos quais r so alterados por bits da mensagem entre cada aplicao da funo de permutao K ECCAK- f , cuja largura de
b = r + c bits.
A capacidade c do algoritmo pode ser escolhida independentemente do tamanho do bloco de sada do algoritmo; porm, a definio restringe a soma r + c ao
conjunto {25, 50, 100, 200, 400, 800, 1600}. A escolha do valor de c determina o
nvel de segurana que se pode esperar da funo.
A funo deve ser capaz de lidar com entradas de tamanho arbitrrio. Porm, o
tamanho do bloco da entrada da funo K ECCAK- f determinado pela soma r +c,
o que exige que a entrada seja um mltiplo deste tamanho. Para lidar com entradas
cujo tamanho no mltiplo de b, necessrio definir um de preenchimento (ou
padding) que estenda as entradas a um tamanho adequado.
Na terceira rodada da competio, [6] os autores decidiram adotar a regra
10*1, que consiste em adicionar mensagem dois bits 1, intercalados por pelo
menor nmero de zeros que torne o tamanho da mensagem resultante um mltiplo
2 Ver
subseo 2.2
de b bits.
O acolchoamento adicionar no mnimo dois bits e no mximo um bloco mais
um bit; este ltimo caso ocorre quando o tamanho da entrada uma unidade menor
do que um mltiplo de r + c, situao na qual a adio de dois bits faz com que
a diviso da mensagem em blocos desse tamanho resulte em um bloco a mais do
que antes, bloco este que precisar ser preenchido inteiramente pelos zeros e pelo
1 final.
O K ECCAK possui trs parmetros controlveis: a largura b da permutao
K ECCAK- f , a capacidade c da funo e o nmero nr de rodadas da funo de
permutao. Em [6], os autores propem o K ECCAK [], uma variante da funo
com valores-padro para as variveis: largura de 1600 bits, por motivos que sero discutidos na subseo 4.3; capacidade de 576 bits, para que a complexidade
esperada do ataque genrico seja da ordem de 2288 ; e 24 rodadas de permutao,
como equilbrio entre segurana e desempenho.
A competio do SHA-3 definia que o algoritmo deveria ser capaz de gerar
pelo menos quatro tamanhos de snteses: 224, 256, 384 e 512 bits, com os nveis
de segurana associados. Para gerar tais sadas, a soluo do K ECCAK consiste
em truncar a sada da funo
K ECCAK[r = 1600 2n, c = 2n],
com n {224, 256, 394, 512}, de forma que sejam mantidos os n bits mais significativos da sada. De forma geral, um nvel de segurana de n bits pode ser obtido
definido a capacidade da funo de permutao K ECCAK- f como 2n bits, uma vez
que um ataque genrico (como o do paradoxo do aniversrio) ter complexidade
esperada de 20.5c . [5]
Foi proposta pelos autores de [6] uma implementao de referncia em software utilizando a linguagem C, assim como o uso de K ECCAK T OOLS como uma
referncia para a implementao do algoritmo em C++. Em [7], os autores oferecem um guia para as questes relativas implementao do K ECCAK em software
e hardware, incluindo a discusso de vulnerabilidades contra ataques de canais laterais.
4.3
A construo esponja faz uso de uma funo de permutao tanto em sua fase
de absoro quanto em sua fase de espremedura, adicionando perturbao aos
dados absorvidos. Para que a funo de esponja seja criptograficamente segura, a
funo de esponja escolhida deve possuir propriedades estatsticas adequadas.
10
O K ECCAK tem em seu cerne a famlia de funes de permutao K ECCAKf [b], descrita em [5], em que a largura da permutao dada por
b = r + c {25, 50, 100, 200, 400, 800, 1600}.
O valor da largura define o parmetro ` por b = 25 2` , que por sua vez define
o nmero nr de rodadas necessrias para o algoritmo a partir da equao nr =
12 + 2`.
O estado a do algoritmo representado como uma array tridimensional 5
5 w de elementos do corpo finito GF(2), com w = 2` ; um bit do estado ser denotado por a[x][y][z], com x, y Z5 e z Zw . Convencionaram-se nomes especficos para as partes unidimensionais do estado: uma linha possui y e z constantes
(tendo, portanto, cinco elementos com diferentes valores de x); uma coluna de
cinco elementos possui x e z constantes; e uma faixa de w elementos possui x e y
constantes. As partes bidimensionais tambm possuem nomes especficos: uma
folha um subconjunto 5w com x constante; um plano 5w possui y constante;
e uma fatia 5 5 possui z constante. A figura 1, originalmente apresentada em
[5], mostra as partes do estado do K ECCAK.
A execuo da funo de permutao consiste na aplicao de nr rodadas R.
Cada rodada pode ser descrita como uma composio de cinco funes aplicadas
sobre os parmetros de entrada:
R = ,
em que as duas primeiras operaes e so aplicadas sobre cada elemento do
estado, um rearranjo das faixas do estado, aplicada nas folhas do estado, e
a soma do estado com uma constante de rodada. A descrio mais precisa das
operaes pode ser vista em [5]; porm, a viso de alto nvel apresentada acima
mostra o carter bottom-up das transformaes no estado, isto , as mudanas
ocorrem dos elementos de menor dimensionalidade para os de maior dimensionalidade.
Na submisso final do K ECCAK, os autores propuseram o uso da funo K EC CAK - f [1600], uma vez que esta verso da funo de permutao pode ser utilizada
para gerar todas as variantes de K ECCAK- f alm de K ECCAK []: o usurio pode
definir a capacidade da funo conforme as necessidades do uso, uma vez que
valores menores de c resultam em um nvel de segurana menor, mas resultam em
ganho de desempenho. As sadas de tamanhos n < 1600bits podem ser geradas
truncando a sada de K ECCAK- f [1600] aos primeiros n bits. [6]
11
12
Referncias
[1] Mihir Bellare. New proofs for NMAC and HMAC: Security without
collision-resistance. pages 602619. Springer-Verlag, 2006.
[2] Mihir Bellare, Ran Canetti, and Hugo Krawczyk. Keying hash functions for
message authentication. pages 115. Springer-Verlag, 1996.
[3] Mihir Bellare, Ran Canetti, and Hugo Krawczyk. Message authentication
using hash functions the HMAC construction. CryptoBytes, 2, 1996.
[4] Guido Bertoni, Joan Daemen, Michal Peeters, and Giles van Assche. Cryptographic sponge functions. Technical report, 2011.
[5] Guido Bertoni, Joan Daemen, Michal Peeters, and Giles van Assche. The
Keccac reference. Technical report, 2011.
[6] Guido Bertoni, Joan Daemen, Michal Peeters, and Giles van Assche. The
Keccac SHA-3 submission. Technical report, 2011.
[7] Guido Bertoni, Joan Daemen, Michal Peeters, and Giles van Assche. Keccac implementation overview. Technical report, 2012.
[8] Shu-Jen Chang, Ray Perlner, William E. Burr, Meltem Snmez Turan,
John M. Kelsey, Souradyuti Paul, and Lawrence E. Bassham. Third-round
report of the SHA-3 cryptographic hash algorithm competition, 2012.
14
[9] Jongsung Kim, Alex Biryukov, Bart Preneel, and Seokhie Hong. On the
security of HMAC and NMAC based on HAVAL, MD4, MD5, SHA-0 and
SHA-1. Springer-Verlag, 2006.
[10] National Institute of Standards and Technology. SHA-3 selection announcement, 2012.
[11] National Institute of Standards and Technology.
SHA-3 standard:
Permutation-based hash and extendable-output functions. Technical report,
2014.
[12] C. Paar and J. Pelzl. Understanding Cryptography: A Textbook for Students
and Practitioners. Springer-Verlag New York Inc, 2010.
15