Pred tisíckami rokov rímsky vojevódca Július Caesar chcel posielať tajné správy svojim generálom. Vymyslel jednoduchý trik: každé písmeno v správe posunul o niekoľko miest v abecede. Táto metóda sa volá Caesarova šifra a je jedným z najstarších šifrovacích algoritmov v histórii.
Ako funguje Caesarova šifra?
Princíp je jednoduchý: každé písmeno v správe nahradíš písmenom, ktoré je v abecede posunuté o pevný počet miest — tento počet sa nazýva kľúč.
Príklad s posunom 3:
Originálna abeceda: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Posunutá abeceda: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Správa: AHOJ → Zašifrované: DKRM
- A → D (posun o 3)
- H → K (posun o 3)
- O → R (posun o 3)
- J → M (posun o 3)
Na dešifrovanie jednoducho posunieme písmená späť o 3 miesta.
Caesar vraj používal posun 3. Preto sa niekedy táto šifra nazýva „ROT-3". Šifra ROT-13 (posun o 13) je špeciálna — keďže anglická abeceda má 26 písmen, zašifrovanie aj dešifrovanie je ten istý postup.
Implementácia v Pythone
def caesar_sifra(text, posun):
"""Zašifruje alebo dešifruje text Caesarovou šifrou."""
vysledok = ""
for znak in text.upper():
if znak.isalpha():
# Posunieme písmeno v abecede (cyklicky)
novy_kod = (ord(znak) - ord('A') + posun) % 26
vysledok += chr(novy_kod + ord('A'))
else:
vysledok += znak # Medzery a interpunkciu ponecháme
return vysledok
# Šifrovanie
sprava = "AHOJ SVET"
zasifrovana = caesar_sifra(sprava, 3)
print(f"Zašifrované: {zasifrovana}") # DKRM VYHW
# Dešifrovanie (negatívny posun alebo posun 26 - kluc)
desifrovana = caesar_sifra(zasifrovana, -3)
print(f"Dešifrované: {desifrovana}") # AHOJ SVET
Operátor % (modulo) zabezpečuje, že po písmene Z sa abeceda „zabalí" a pokračuje od A. Takže Z s posunom 3 sa stane C, nie [ (znak za Z v ASCII).
Prečo je Caesarova šifra nespoľahlivá?
Caesarova šifra je veľmi ľahko prelomiteľná:
-
Hrubá sila (Brute force): Anglická abeceda má 26 písmen — existuje iba 25 rôznych posunov. Útočník môže vyskúšať všetky za niekoľko sekúnd.
-
Frekvenčná analýza: V každom jazyku sa niektoré písmená vyskytujú oveľa častejšie (v slovenčine napr. „a", „o", „e"). Útočník zistí, ktoré písmeno je v šifrovanom texte najčastejšie, a odvodí posun.
# Hrubá sila — vyskúšanie všetkých posunov
zasifrovana = "DKRM VYHW"
for posun in range(26):
pokus = caesar_sifra(zasifrovana, -posun)
print(f"Posun {posun:2d}: {pokus}")
Caesarova šifra sa nikdy nesmie použiť na ochranu skutočne citlivých dát. Moderné šifrovanie (AES, RSA) je nepomerne silnejšie — prelomenie by trvalo milióny rokov aj tým najrýchlejším počítačom.
Historický kontext
Napriek svojej jednoduchosti bola Caesarova šifra za čias Rímskeho impéria pomerne bezpečná — väčšina nepriateľov ani netušila, že správy sú vôbec šifrované. Moderné šifrovanie stojí na oveľa sofistikovanejších matematických základoch.
Cvičné príklady
Zašifruj slovo 'MAMA' Caesarovou šifrou s posunom 5.
Zobraziť odpoveď
Prečo Caesarova šifra nie je bezpečná v dnešnej dobe? Uveď aspoň jednu konkrétnu metódu útoku.