Caesar-chifferet , även känt som shift - chifferet , Caesar-koden är en av de enklaste och mest kända krypteringsmetoderna.
Ett Caesar-chiffer är en typ av substitutionschiffer där varje tecken i klartexten ersätts av ett tecken som är ett konstant antal positioner till vänster eller höger om det i alfabetet . Till exempel, i ett chiffer med en högerförskjutning på 3, skulle A ersättas med D, B skulle bli D, och så vidare.
Chiffert är uppkallat efter den romerske generalen Gaius Julius Caesar , som använde det för hemlig korrespondens med sina generaler.
Krypteringssteget som utförs av Caesar-chifferet ingår ofta som en del av mer komplexa system som Vigenère-chifferet och har fortfarande en modern applikation i ROT13- systemet . Som alla monoalfabetiska chiffer är Caesar-chifferet lätt att bryta och har nästan ingen praktisk tillämpning.
Om vi associerar varje tecken i alfabetet med dess serienummer (numrering från 0), så kan kryptering och dekryptering uttryckas med formler för modulär aritmetik [1] [2] :
var är klartexttecknet, är chiffertexttecknet, är kraften i alfabetet och är nyckeln.
Matematiskt är ett Caesar-chiffer ett specialfall av ett affint chiffer .
Kryptering med nyckel . Bokstaven "E" "skiftar" tre bokstäver framåt och blir bokstaven "Z". Ett hårt tecken flyttat tre bokstäver framåt blir ett "E", en bokstav "I" flyttat tre bokstäver framåt blir ett "B" och så vidare:
Inledande alfabet: A B C D E F G H I J K L M N O P R S T U V X Z Krypterad: D E F G H I J K L M N O P R S T U V X TOriginal text:
Ät lite mer av de där mjuka franska bullarna och drick lite te.Chiffertexten erhålls genom att ersätta varje bokstav i originaltexten med motsvarande bokstav i chifferalfabetet:
Fezyya iz zyi akhlsh pvenlsh chugrschtskfnlsh dtsosn, zhg eyutzm gb.
Koden är skriven och körs för 2 språk: ryska och engelska.
# Texten användaren vill skriva in text = input ( "Ange texten du vill kryptera: " ) # Användaren anger nyckeln k = int ( input ( "Specify the key: " )) # Användaren anger språket för texten som ska krypteras språk = input ( "Vilket språk är texten du skrev in på (ryska, engelska): " ) # Krypteringsfunktion med tre parametrar: text, nyckel, språk def ceaser_cipher ( användare , nyckel , lang ): # Variabelt resultat av kryptering; variabel som definierar versaler och gemener res , n = [], "" # Kontrollerar användarens valda språk # Kontrollera om det ryska språket är valt (versaler på bokstäver som angetts av användaren är inte viktiga) om lång . lägre () i [ "ryska" , "ryska" ]: # "abvgdeezhziyklmnoprstufhtschshshzhyyeyuya"=dictionary_upper,ordbokTvå variabler tilldelas gemener och versaler ryska alfabetet respektive elif lang . lägre () i [ "engelska" , "engelska" ]: # Två variabler tilldelas gemener och versaler engelska respektive ordbok , dictionary_upper = "abcdefghijklmnopqrstuvwxyz" , "ABCDEFGHIJKLMNOPQRSTUVWXYZ" annars : returnera "Detta språk" är inte i alternativet "Detta språk" # Testslinga, där varje iteration kommer att bearbeta ett tecken från texten sekventiellt för i inom intervallet ( len ( användare )): # Kontrollera tecken för versaler eller gemener # Är tecknet med gemener om användare [ i ] i ordboken : n = ordbok # Är tecknet i versaler elif användare [ i ] i dictionary_upper : n = dictionary_upper # Tecknet är varken gemener eller versaler (tecknet är inte ett brev) annat : res . lägg till ( användare [ i ]) # Om tecknet finns i listan n (det är en bokstav), kommer det att krypteras om användaren [ i ] i n : # Alfabetslinga för j i intervallet ( len ( n )): # Om serienumret för bokstaven + nyckeln är i intervallet från 0 till slutet av alfabetet # och om bokstaven från texten matchar bokstaven från alfabetet, då: om 0 <= j + tangent < len ( n ) och användare [ i ] == n [ j ]: # Bokstaven läggs till resultatet med en shift-nyckel (krypterad bokstav) res . lägg till ( n [ j + tangent ]) # Om ordningsnumret för bokstaven + tangent ligger utanför alfabetets intervall, överskrider det # och om bokstaven från texten matchar bokstaven från alfabetet, då: elif j + nyckel >= len ( n ) och användare [ i ] == n [ j ]: # En bokstav läggs till resultatet med en shift-tangent, # samtidigt som serienumret för bokstaven konverteras till alfabetets intervall (krypterad bokstav ) res . append ( n [( 1 - j - key ) % ( len ( n ) - 1 )]) # Om ordningsnumret på bokstaven + tangenten ligger utanför alfabetets räckvidd, faller under det # och om bokstaven från texten matchar bokstaven från alfabetet, sedan: elif j + tangent < 0 och användare [ i ] == n [ j ]: # Lägg till bokstaven förskjuten till resultattangenten, # samtidigt som du konverterar bokstavens serienummer till alfabetets intervall (krypterad bokstav) res . lägg till ( n [( j + nyckel ) % len ( n )]) # Funktionen returnerar den krypterade texten retur '' . gå med ( res ) # Utskrift av chiffertext ( ceaser_cipher ( text , k , språk ))Caesar-chiffret är uppkallat efter Julius Caesar, som enligt Suetonius ' Life of the Twelve Caesars använde det med skift 3 för att skydda militära meddelanden. Även om Caesar var den första registrerade personen som använde detta schema, är det känt att andra substitutionschiffer har använts tidigare.
Om han hade något konfidentiellt att överföra, skrev han ner det med chiffer, det vill säga han ändrade ordningen på bokstäverna i alfabetet så att det var omöjligt att urskilja ett enda ord. Om någon ville tyda det och förstå dess innebörd, då var han tvungen att ersätta den fjärde bokstaven i alfabetet, nämligen D, för A, och så vidare, med andra bokstäver.
Gaius Suetonius Tranquill The Life of the Tolv Caesars , Bok ett, kap. 56 [3]
Hans brorson, Augustus , använde också detta chiffer, men flyttade åt höger efter ett, och det upprepade inte till början av alfabetet:
Närhelst han skrev med chiffer skrev han B för A, C för B och resten av bokstäverna på samma princip, och använde AA för X.
Gaius Suetonius Tranquill The Life of the Twelve Caesars , Bok två, kap. 88 [3]
Det finns bevis för att Julius Caesar också använde mer komplexa system [4] .
Det är inte känt hur effektivt Caesars chiffer var på den tiden, men det var förmodligen någorlunda säkert, inte minst eftersom de flesta av Caesars fiender var analfabeter och många antog att meddelandena var skrivna på ett okänt främmande språk [5] . Det finns inga bevis från den tiden angående metoder för att bryta enkla substitutionschiffer. Det tidigaste bevarade rekordet av frekvensanalys är Al-Kindis arbete från 800-talet om upptäckten av frekvensanalys [6] .
Caesar-chifferet, förskjutet med ett, används på baksidan av mezuzan för att kryptera Guds namn . Detta kan vara ett kvarhållande från en tidig tid då det judiska folket inte fick ha mezuzah [7] .
På 1800-talet användes ibland den personliga delen av annonser i tidningar för att utbyta meddelanden krypterade med enkla chiffer. Kahn (1967) beskriver fall där amatörer ägnade sig åt hemlig kommunikation krypterad med hjälp av Caesar-chifferet i The Times [8 ] . Ännu senare, 1915, fann Caesar-chifferet användning: den ryska armén använde det som ett substitut för mer komplexa chiffer som visade sig vara för svåra för trupperna; de tyska och österrikiska kryptoanalytikerna hade små svårigheter med att tyda dessa meddelanden [9] .
Caesar-chifferet med 13 skift används också i ROT13- algoritmen , en enkel textobfuskeringsmetod som ofta används på Usenet , och används mer som ett sätt att dölja spoilers än som en krypteringsmetod [10] . Vigenère-chifferet använder ett Caesar-chiffer med olika skiftningar vid varje position i texten; skiftvärdet definieras med ett upprepande nyckelord. Om nyckelordet är lika långt som meddelandet, genereras slumpmässigt, hålls hemligt och används endast en gång - ett sådant schema kallas ett engångsblockschema - och detta är det enda krypteringssystemet för vilket absolut kryptografisk styrka har bevisats [11 ] .
Nyckelord som är kortare än budskapet (som "Complete Victory" som användes av konfederationen under det amerikanska inbördeskriget ) introducerar ett cykliskt mönster som kunde upptäckas med en förbättrad version av frekvensanalys [12] .
I april 2006 fångades den flyktige maffiabossen Bernardo Provenzano på Sicilien delvis på grund av kryptoanalys av hans meddelanden, skrivna med en variant av Caesar-chifferet. I Provenzano-chifferet ersattes bokstäverna först med siffror - serienumren på bokstäverna i alfabetet, och Caesar-chifferet användes redan på den resulterande siffrorna - så att när den skiftades med 3 skrevs "A" som "4", "B" - som "5" och så vidare [13] .
Ofta, för bekvämligheten med att använda Caesar-chifferet, används två skivor med olika diametrar monterade på en gemensam axel med alfabet ritade längs skivornas kanter. Inledningsvis roteras skivorna så att varje bokstav i alfabetet på den yttre skivan står mitt emot samma bokstav i alfabetet på den lilla skivan. Om vi nu roterar den inre skivan med flera tecken, så får vi en överensstämmelse mellan symbolerna för den yttre skivan och den inre - Caesar-chifferet. Den resulterande disken kan användas för både kryptering och dekryptering [14] .
Till exempel, om det inre hjulet roteras så att symbolen A för den yttre skivan motsvarar symbolen D för den inre skivan, då får vi ett chiffer med en förskjutning på 3 åt vänster.
Skift dekryptering |
oformatterad text |
---|---|
0 | exexegoexsrgi |
ett | dwwdfndwrqfh |
2 | cvvcemcvqpeg |
3 | buubdlbupodf |
fyra | attack |
5 | zsszbjzsnmbd |
6 | yrryaiyrmlac |
… | |
23 | haahjrhavujl |
24 | gzzgiqgzutik |
25 | fyyfhpfytshj |
Caesar-chifferet kan lätt brytas även om knäckaren bara känner till chiffertexten. Två situationer kan övervägas:
I det första fallet kan chifferet brytas med samma metoder som för det enkla substitutionschifferet, såsom frekvensanalys , etc. Med dessa metoder kommer knäckaren sannolikt snabbt att märka regelbundenhet i lösningen och inse att chiffret är som används är Caesars chiffer.
I det andra fallet är det ännu lättare att bryta chiffer. Det finns inte många alternativ för skiftvärden (26 för engelska), alla kan kontrolleras med brute force [15] . Ett sätt att göra detta är att skriva ut ett stycke chiffertext i en kolumn med alla möjliga skift, en teknik som ibland kallas "att fullborda en enkel komponent" [16] . Betrakta ett exempel för chiffertexten "EXXEGOEXSRGI"; klartexten känns omedelbart igen av ögat på fjärde raden.
Ett annat sätt att tillämpa denna metod är att skriva alfabetet under varje bokstav i chiffertexten, med början på den bokstaven. Metoden kan påskyndas genom att använda förberedda alfabetremsor. För att göra detta måste du vika remsorna så att chiffertexten bildas på en rad, sedan i någon annan rad kommer vi att se den vanliga texten.
En annan metod för brute-force cracking är att kontrollera bokstavsfrekvenser . Genom att rita in frekvensen av bokstäver i chiffertexten, och känna till den förväntade spridningen av bokstäver för vanlig text på språket i fråga, kan man enkelt bestämma skiftningen genom att titta på skiftningen av några funktioner i diagrammet. Denna metod är känd som frekvensanalys . Till exempel, i en engelsk text är frekvenserna för bokstäverna E , T , (vanligtvis den vanligaste) och Q , Z (vanligtvis sällsyntare) särskilt olika [17] . Denna process kan automatiseras genom att datorprogrammet utvärderar hur väl den faktiska frekvensfördelningen matchar den förväntade fördelningen. Till exempel kan ett chi-kvadrattest [18] användas .
För vanlig text på naturligt språk kommer det troligen bara att finnas ett avkodningsalternativ. Men om du använder mycket korta meddelanden, finns det fall då flera dekrypteringsalternativ med olika skift är möjliga. Till exempel kan chiffertexten "MPQY" avkodas som antingen "aden" eller "vet" (förutsatt att klartexten är skriven på engelska). På liknande sätt kan "ALIIP" dechiffreras som "dockor" eller som "hjul"; "AFCCP" som "jolly" eller som "heja" (se även unikt avstånd ).
Kryptering flera gånger förbättrar inte säkerheten på något sätt, eftersom användningen av skiftchiffer a och b är likvärdig med användning av skiftchiffer a + b. I matematiska termer bildar kryptering med olika nycklar en grupp [19] .
Ordböcker och uppslagsverk |
---|