Modos de cifra e protocolos
ECB, CBC, CTR, AEAD, repetição e acordo de chaves com Diffie-Hellman.
AES transforma blocos de 16 bytes. A lista de preços da loja ocupa mais do que isso: é preciso proteger vários blocos com a mesma chave. Uma cifra de bloco define a transformação de um bloco; não define sozinha como proteger uma mensagem inteira. Para proteger uma mensagem maior, dividimos a mensagem em blocos e precisamos de uma regra, o modo de operação, que define a relação entre blocos e os valores adicionais usados na cifragem. O XOR compara bits e dá 1 quando são diferentes e 0 quando são iguais: e ; por exemplo, 1010 XOR 1100 = 0110.
ECB, CBC e CTR
| Modo | Relação entre blocos | Valor adicional | Limite importante |
|---|---|---|---|
| ECB | Cada bloco cifra independentemente | Nenhum | Blocos iguais com a mesma chave dão cifras iguais |
| CBC | Cada bloco combina-se com a cifra anterior | IV inicial imprevisível | Exige blocos completos; sozinho não autentica |
| CTR | XOR da mensagem com blocos de uma sequência cifrada de contadores | Contadores que não se repetem sob a mesma chave | Reutilização revela relações entre mensagens; sozinho não autentica |
Em ECB, cada bloco cifra de forma independente. Uma mensagem de blocos A A B A dá um padrão X X Y X. Um observador não precisa de descobrir A para reconhecer repetições, por isso “usar AES” sem dizer o modo não responde a este problema.
Em CBC, , com . Aqui é um bloco de texto em claro, um bloco cifrado e a chave. Com dois blocos: primeiro calcula-se e ; depois e . Para decifrar, inverte-se cada passo: e , como mostra o diagrama seguinte com estes dois blocos.
Em CTR, . O IV de CBC e os contadores de CTR têm requisitos distintos. Em CTR, evita repetir qualquer bloco de contador, inclusive entre mensagens: inícios diferentes ainda podem gerar sequências sobrepostas.
CBC convencional recebe blocos completos. Com preenchimento PKCS#7 e blocos de 16 bytes, uma mensagem de 14 bytes recebe dois bytes 02 02. Uma de 16 bytes recebe um bloco completo de dezasseis bytes de valor 16, para distinguir preenchimento de dados. Ao remover, o recetor lê o último byte , exige e pelo menos bytes disponíveis, e verifica que os últimos bytes valem todos . Se alguma condição falha, rejeita em vez de remover. O preenchimento não autentica a mensagem. CTR pode usar apenas os bytes necessários do último bloco e não precisa deste preenchimento.
Alterar bits sem conhecer a chave
Em CTR sem autenticação, alterar um bit de altera exatamente o bit correspondente de . O contador e a sequência cifrada mantêm-se. Se o atacante aplica uma máscara , o recetor obtém:
Ao retirar a mesma sequência , fica:
Com e máscara 00000011, os dois bits finais mudam e o resultado é 01000010. Não há propagação automática aos restantes blocos. Confidencialidade não impede esta alteração; uma etiqueta de autenticação válida é uma condição adicional. AES real tem blocos de 128 bits, ou 16 bytes; um bloco menor num exercício representa apenas um modelo para seguir o XOR.
Reutilizar uma sequência de XOR
Se duas mensagens usam a mesma sequência , temos e . Ao combinar as cifras:
porque . Se uma mensagem é conhecida, a outra fica recuperável. Este problema aparece no one-time pad reutilizado e no CTR com contadores repetidos.
Para ver um byte, toma (A), (B) e :
| Estado | Bits |
|---|---|
01110001 | |
01110010 | |
00000011 | |
01000010, o B original |
O atacante conhece a primeira mensagem e as duas cifras. A última linha recupera a segunda mensagem sem conhecer previamente .
Os bytes deste exemplo só mostram a identidade algébrica; não implementam uma cifra segura. O one-time pad só tem confidencialidade perfeita com chave uniformemente aleatória, tão longa como a mensagem, secreta e usada uma única vez.
Cifragem autenticada
Um MAC autentica dados, mas não os esconde. Cifrar sem autenticar pode permitir alterações controladas ou ataques através das respostas a dados inválidos. AEAD protege a confidencialidade do conteúdo e a integridade do conteúdo e dos dados associados, como um número de sequência. Estes dados associados não ficam cifrados.
Usa construções estudadas, como AES-GCM ou ChaCha20-Poly1305, com os requisitos de nonce da construção. Para GCM, reutilizar um nonce com a mesma chave compromete a segurança. A aplicação deve rejeitar dados cuja etiqueta não verifica, antes de lhes dar significado. Usa uma construção analisada, em vez de combinar por conta própria uma cifra e um hash.
AEAD não elimina automaticamente a repetição. Uma mensagem válida antiga continua a ter uma etiqueta válida, porque a etiqueta prova que alguém com a chave protegeu aquele conteúdo e dados associados. Não prova que a mensagem é nova. A frescura precisa de mecanismo próprio, conforme o protocolo: por exemplo incluir um número de sequência nos dados associados e manter estado de receção com janela que tolera reordenação legítima, ou usar um desafio fresco por operação e rejeitar respostas fora do desafio pendente.
No esquema, o identificador 7 está autenticado com a mensagem. O atacante só copia os bytes; a segunda receção é recusada pelo estado da aplicação, não por uma falha da etiqueta.
A verificação de unicidade e o efeito têm de ficar ligados atomicamente. Caso contrário, dois pedidos concorrentes podem observar o identificador como novo antes de qualquer um o registar. Este exemplo não define um protocolo completo.
Ordem entre cifragem e MAC
Os nomes indicam que dados se autenticam e quando. Escrevemos para cifragem, para MAC e para concatenação; e têm funções separadas.
- Encrypt-then-MAC: calcula , depois , e envia .
- MAC-then-Encrypt: calcula , depois , e envia .
- Encrypt-and-MAC: calcula separadamente e , e envia .
No primeiro caso, o recetor pode verificar a etiqueta antes de decifrar. No segundo, precisa de decifrar para chegar à etiqueta. Se diferenças de resposta revelarem erros de preenchimento antes da autenticação, essa ordem pode criar um oráculo: o atacante aprende algo pelas respostas a cifras alteradas. No terceiro, um MAC sobre o texto em claro pode revelar relações que a cifra pretendia esconder.
Estes esquemas distinguem composições, não provam segurança de qualquer implementação. É preciso proteger também IV/nonce e contexto conforme a construção, separar chaves e cumprir os requisitos das primitivas. Usar AEAD analisada evita inventar esse protocolo. Enviar só uma etiqueta MAC não envia a mensagem; enviar a chave MAC em claro permite ao observador criar etiquetas para mensagens alteradas.
Diffie-Hellman em números pequenos
A conta usa a aritmética modular, com números pequenos para permitir refazer as contas; não são parâmetros seguros.
Ana e Bruno publicam e . Ana escolhe e envia . Bruno escolhe e envia . Ana calcula e Bruno calcula .
A igualdade vem de aplicar os dois expoentes à mesma base:
Ana não precisa de conhecer : usa o valor público e o seu . Bruno faz a operação correspondente com e .
Num protocolo real, os parâmetros e a validação dos valores recebidos têm requisitos de segurança, e uma função de derivação transforma o segredo em chaves adequadas. A igualdade anterior explica a coincidência dos resultados no grupo usado, não a autenticação dos participantes.
Sem autenticação, um intermediário pode substituir A e B pelos seus valores e estabelecer um segredo com cada lado. O acordo não prova com quem falamos. No diagrama seguinte, o intermediário combina um segredo com Ana e outro segredo com Bruno; Ana e Bruno veem trocas aparentemente normais, mas partilham segredos diferentes com o intermediário.
Certificados e assinaturas sobre o contexto da troca, ou uma chave previamente partilhada, podem autenticar o acordo.
Chaves efémeras corretamente usadas e apagadas podem dar sigilo futuro: comprometer mais tarde a chave de autenticação de longo prazo não permite recuperar sessões antigas gravadas. Isso não protege uma sessão cujo próprio segredo efémero foi comprometido.
O vídeo acompanha a troca de valores públicos. Compara-a com os dois diagramas: obter um segredo comum e verificar a identidade do interlocutor continuam a ser problemas diferentes.
Exercícios
O segredo de Diffie-Hellman
Num acordo de brinquedo com , Ana tem e recebe . Qual segredo calcula Ana? Não uses estes parâmetros numa comunicação real.
Pista
Usa o valor público recebido com o expoente privado da Ana.
Solução
. Logo . Ana calcula 3.
Erros frequentes
O valor B é público. Não o confundas com o expoente privado b.
Uma transferência repetida
Uma aplicação usa AEAD corretamente, mas aceita a mesma mensagem válida de transferência várias vezes. A etiqueta verifica em todas. Explica a falha e propõe uma regra adicional.
Pista
O atacante mudou algum byte da mensagem?
Solução
A aplicação não verifica frescura ou unicidade da operação. Deve autenticar também o contexto relevante e recusar operações já usadas, por exemplo com identificador e estado transacional. AEAD sozinha não define essa política.
Confere a tua resposta:
- Distingue autenticidade/integridade de frescura.
- Explica que uma cifra e etiqueta antigas podem continuar válidas.
- Propõe número de sequência/identificador de operação e rejeição de repetição com estado adequado.
Erros frequentes
Não alegues que a etiqueta tem de falhar: a mensagem repetida não foi alterada.
Duas cifras, uma sequência
Temos e . O atacante conhece , e . Deriva uma expressão para recuperar .
Pista
XOR de um valor consigo próprio dá zero.
Mais uma pista
Combina a primeira cifra com a primeira mensagem conhecida.
Solução
. Assim, . A defesa depende de não repetir a sequência sob a mesma chave.
Confere a tua resposta:
- Usa C1 XOR P1 = S.
- Obtém P2 = C2 XOR C1 XOR P1.
- Explica que a repetição da sequência elimina o segredo na relação entre cifras.
Erros frequentes
Ter mensagens diferentes não evita o problema. O nonce pode ser público, mas tem de cumprir o requisito da construção.
Inícios diferentes, blocos repetidos
Num CTR de brinquedo, a primeira mensagem usa os contadores 10, 11, 12 e 13; a segunda usa 12, 13 e 14, sob a mesma chave. A equipa afirma que não há reutilização porque os contadores iniciais são diferentes. Avalia a afirmação.
Pista
Compara todos os blocos de contador, não só os primeiros.
Solução
A afirmação é falsa. Os valores 12 e 13 geram a mesma sequência em duas posições de mensagens distintas, ou seja o XOR das cifras dessas posições revela o XOR dos textos em claro; conhecer um deles permite recuperar o outro. A regra precisa de impedir sobreposição de todos os contadores sob a chave, incluindo o retorno a valores antigos por overflow.
Confere a tua resposta:
- Identifica os contadores 12 e 13 como repetidos.
- Relaciona os blocos repetidos com a mesma sequência XOR sob a mesma chave.
- Exige intervalos de contadores sem sobreposição e sem retorno ao início por overflow.
Erros frequentes
Inícios únicos não bastam quando as sequências podem sobrepor-se. Tornar os contadores secretos não corrige a reutilização.
Decifrar dois blocos CBC
Com , e recebidos, escreve as expressões de e em CBC e explica a dependência entre blocos. Uma mensagem de 16 bytes com blocos de 16 bytes recebe quantos bytes de preenchimento PKCS#7 e com que valor?
Pista
Inverte cada passo da cifragem por ordem.
Mais uma pista
O preenchimento tem de distinguir dados de enchimento mesmo quando a mensagem já é múltipla do bloco.
Solução
e . A decifragem de precisa de , porque a cifragem combinou com antes da cifra de bloco. Com 16 bytes em blocos de 16, acrescenta-se um bloco completo de dezasseis bytes de valor 16.
Confere a tua resposta:
- Escreve P1=D(C1) XOR IV e P2=D(C2) XOR C1.
- Explica que P2 precisa da cifra anterior.
- Calcula o preenchimento PKCS#7 para 16 bytes em bloco de 16.
Erros frequentes
Não confundas o IV, que só entra no primeiro bloco, com a cifra anterior de cada bloco seguinte.
A cifra mudou, a etiqueta ficou
Num modelo de um byte em CTR, o texto em claro é 00110000. O atacante aplica XOR com 00000101 à cifra, mantendo o contador. Sem autenticação, que texto recebe o destinatário? O protocolo passa depois a enviar a cifra e uma etiqueta MAC sobre o contador, o contexto e a cifra, nessa ordem. O contador e o contexto não precisam de ser secretos. O atacante muda a cifra e conserva a etiqueta antiga. Assume que não consegue forjar uma etiqueta válida. Identifica a composição e a decisão do recetor. Como mudaria a ordem se a etiqueta estivesse dentro da mensagem cifrada?
Solução
Retirar a sequência CTR deixa a mesma máscara aplicada ao texto: 00110000 XOR 00000101 = 00110101. Mudam dois bits, sem necessidade de conhecer a chave. O novo protocolo é Encrypt-then-MAC: a etiqueta autentica a cifra e verifica-se antes de decifrar. A cifra alterada com etiqueta antiga falha, nas hipóteses dadas, e o recetor rejeita-a. Em MAC-then-Encrypt, calcula-se o MAC do texto em claro, concatena-se a etiqueta e cifra-se tudo; o recetor precisa de decifrar antes de obter essa etiqueta. A comparação das ordens não dispensa uma construção analisada.
Confere a tua resposta:
- Obtive 00110101 ao aplicar a máscara ao texto em claro.
- Identifiquei Encrypt-then-MAC e verificação antes da decifragem.
- Distingui MAC-then-Encrypt pela etiqueta dentro do conteúdo cifrado.
