Capítulo 17 — Conceitos de criptografia
Mapa da aula
Aula 17 publicada. Mapa, exemplo, EX049.
flowchart TD
N0["17.1 O princípio de Kerckhoffs"]
N1["Laboratório — Quebrar uma cifra de César"]
N2["17.2 Por que as cifras clássicas falham"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX049"]
Desenho lógico
flowchart LR
N0["17.1 O princípio de Kerckhoffs"]
N1["Laboratório — Quebrar uma cifra de César"]
N2["17.2 Por que as cifras clássicas falham"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3 --> Q["EX049"]
[17.1 O princípio de Kerckhoffs]
|
v
[Laboratório — Quebrar uma cifra de César]
|
v
[17.2 Por que as cifras clássicas falham]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX049]
Objetivos de aprendizagem
Você vai (1) explicar o princípio de Kerckhoffs; (2) mostrar por que as cifras clássicas falham; (3) definir objetivos modernos de segurança, como a indistinguibilidade.
17.1 O princípio de Kerckhoffs
Uma cifra deve continuar segura mesmo que tudo sobre ela, exceto a chave, seja público. Esse princípio, enunciado por Auguste Kerckhoffs no século XIX, orienta a criptografia moderna: o AES é integralmente publicado no FIPS 197, e sua segurança se apoia no sigilo das chaves. Priya aprende por que algoritmos secretos são uma aposta ruim: eles acabam sendo descobertos por engenharia reversa, recebem pouco escrutínio público e mudá-los é caro. Normas públicas e bem analisadas concentram a atenção dos especialistas onde as fraquezas podem ser encontradas e corrigidas cedo. Os fornecedores da Tidewell são solicitados a confirmar que usam algoritmos publicados.
Laboratório — Quebrar uma cifra de César
"""Break a toy Caesar cipher by frequency analysis to show why classical ciphers fail."""
from collections import Counter
TEXT = "THE LIBRARY OPENS AT NINE AND THE READING ROOM CLOSES AT EIGHT EVERY EVENING"
def shift(s, k):
return "".join(chr((ord(c) - 65 + k) % 26 + 65) if c.isalpha() else c for c in s)
def main():
ct = shift(TEXT, 11)
top = Counter(c for c in ct if c.isalpha()).most_common(1)[0][0]
k = (ord(top) - ord("E")) % 26
print("ciphertext:", ct[:30], "...")
print("most common letter:", top, "-> guessed shift", k)
print("recovered:", shift(ct, -k)[:30], "...")
print("keys to try by brute force:", 25)
if __name__ == "__main__":
main()
Execute com python3 lab_caesar.py. Saída verificada:
ciphertext: ESP WTMCLCJ ZAPYD LE YTYP LYO ...
most common letter: P -> guessed shift 11
recovered: THE LIBRARY OPENS AT NINE AND ...
keys to try by brute force: 25
17.2 Por que as cifras clássicas falham
O laboratório cifra uma frase sobre o horário da biblioteca com um deslocamento de César de 11. A letra mais comum do texto cifrado é P, e supor que ela representa o E, a letra mais comum do inglês, dá o deslocamento 11 e recupera o texto. Mesmo sem análise de frequência, existem apenas 25 deslocamentos, então a força bruta é instantânea. Priya amplia a lição: as cifras de substituição preservam os padrões das letras, e qualquer cifra que vaze estrutura sobre o texto claro pode ser atacada estatisticamente. O Handbook of Applied Cryptography, no capítulo 7, faz um panorama desses sistemas clássicos e de por que eles foram abandonados.
17.3 Objetivos modernos
A criptografia moderna define a segurança com precisão. Katz e Lindell descrevem a indistinguibilidade: um atacante que escolhe duas mensagens e vê a cifração de uma delas não deve conseguir dizer qual, com probabilidade significativamente melhor do que o lançamento de uma moeda. Isso exclui o vazamento de padrões, à parte o tamanho. Um esquema determinístico, em que a mesma mensagem sempre é cifrada da mesma forma, falha nessa definição, porque as mensagens repetidas ficam visíveis. É por isso que a cifração moderna usa nonces aleatórios ou únicos e por que a cifração autenticada também garante a integridade.
Exemplo resolvido
Priya quebra uma cifra de César com deslocamento 11 por análise de frequência, explica o princípio de Kerckhoffs usando o FIPS 197 e mostra por que a cifração determinística falha na indistinguibilidade.
Caso sintético. A mensagem é inventada; o FIPS 197 e o Handbook são reais.
Erros e limites
A indistinguibilidade não esconde o tamanho da mensagem. As cifras clássicas servem para a história e o ensino, nunca para a proteção.
Exercícios
-
EX049 — Kerckhoffs. Enuncie o princípio de Kerckhoffs. Rubrica: 3 = uma cifra deve ser segura mesmo que tudo, exceto a chave, seja público;; 2 = sigilo da chave;; 1 = algoritmo secreto;; 0 = nenhuma.
-
EX050 — Quebra da cifra de César. Como o laboratório encontrou o deslocamento? Rubrica: 3 = a letra mais comum, P, foi tomada como E, dando o deslocamento 11;; 2 = frequência;; 1 = só força bruta;; 0 = nenhuma.
-
EX051 — Falha determinística. Por que a cifração determinística falha na indistinguibilidade? Rubrica: 3 = mensagens repetidas são cifradas de forma idêntica, revelando a repetição;; 2 = padrões;; 1 = passa;; 0 = nenhuma.
Síntese
Algoritmos públicos, definições precisas e cifração aleatorizada substituíram as cifras clássicas, cujos padrões as denunciavam.
Continue estudando — aula 17 (capítulo 17 de 40)
← Capítulo 16 · Índice das aulas · Capítulo 18 →
Continue para a próxima aula já escrita.