ROT13 ( anglicky otočit ; "posun 13 pozic", někdy psáno s pomlčkou - ROT-13 ) je jednoduchá substituční šifra pro anglickou abecedu (standardní latinku), používaná na internetových fórech jako prostředek ke skrytí spoilerů . hlavní myšlenky, hádanka řešení a urážlivý materiál z běžného pohledu. ROT13 byl popsán jako „ online ekvivalent způsobu, jakým časopisy píší kvízové odpovědi vzhůru nohama“ [1] . ROT13 je variací Caesarovy šifry vyvinuté vStarověký Řím .
ROT13 je reverzibilní algoritmus , to znamená, že ROT13 můžete zrušit použitím stejného algoritmu; stejné akce lze použít pro kódování a dekódování. Algoritmus neposkytuje žádné skutečné kryptografické zabezpečení a nikdy by se k tomu neměl používat. Často se uvádí jako kanonický příklad slabé metody šifrování. Algoritmus ROT13 zplodil řadu online her s písmeny a slovy; Algoritmus se často používá v diskusních skupinách (Usenet).
Použití algoritmu ROT13 na kus textu vyžaduje jednoduše nahradit každý abecední znak jeho odpovídajícím posunem o 13 pozic v abecedě [2] . Z A se stane N , B se změní na O a tak dále až k M , které se změní na Z , a poté se postupně použijí písmena ze začátku abecedy: N se změní na A , O se změní na B a tak dále až do Z , které se změní na M. Pouze ta písmena, která jsou použita v anglické abecedě , jsou ovlivněna ; čísla, symboly, mezery a všechny ostatní znaky zůstávají nezměněny. Protože v anglické abecedě je pouze 26 písmen a 26 = 2 × 13, pak je funkce ROT13 inverzní sama k sobě [2] :
pro libovolný text x .Jinými slovy, dvě po sobě jdoucí použití ROT13 obnoví původní text (v matematice se tomu někdy říká involuce ; v kryptografii vzájemné šifry ).
Transformace lze provádět pomocí vyhledávací tabulky , například:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm |
Například v následujícím vtipu byla hlavní myšlenka uzavřena šifrou ROT13:
Jak v NSA rozeznáte extroverta od introverta ? Ubj pna lbh gryy na rkgebireg sebz na vagebireg ng AFN?Převod textu pomocí šifry ROT13, odpověď na vtip:
Ve výtazích se extrovert dívá na boty DRUHÉHO chlápka. Va gur ryringbef, gur rkgebireg ybbxf ng gur BGURE thl'f fubrf.Opětovné použití algoritmu ROT13 obnoví původní.
ROT13 byl používán na fóru net.jokes news na začátku 80. let [3] . Používal se k zakrytí potenciálně urážlivých vtipů nebo v reakci na hádanku či spoiler. Třináctimístný posun byl zvolen před jinými hodnotami, jako jsou tři, jako v původní Caesarově šifře, protože třináctka je číslo, které poskytuje jak kódování, tak dekódování, čímž poskytuje jediné pohodlí pro oba příkazy [2] [4] . ROT13 je obecně podporován jako vestavěná funkce v softwarových funkcích čtečky novinek [4] . E-mailové adresy jsou také někdy zakódovány pomocí algoritmu ROT13, aby byly skryty před méně pokročilými spamovacími roboty .
ROT13 je speciální případ šifrovacího algoritmu známého jako Caesarova šifra , připisovaný Juliu Caesarovi v 1. století před naším letopočtem [5] . Konkrétnější použití šifrování má na mysli indický filozof Vatsyayana Mallanaga , autor sexuální příručky Kámasútra .
ROT13 není určen pro použití s citlivými informacemi; použití konstantního posunu znamená, že šifrování je fakticky bezklíčové a k dešifrování není potřeba více znalostí než skutečnost, že lze použít ROT13. I bez těchto znalostí lze algoritmus snadno dešifrovat pomocí frekvenční analýzy [2] . Protože je zcela nekonzistentní se skutečnou tajnou ochranou, ROT13 se stal slangem pro jakékoli zjevně slabé šifrovací schéma; kritici by mohli namítnout, že "56bitový DES je o něco lepší než ROT13 v minulosti." Kromě toho se často používají podobnosti s výrazy ze skutečného života, například „double DES“, se smyslem pro humor použijte „double ROT13“, „ROT26“ nebo „2ROT13“, včetně parodické akademické práce „On the 2ROT13 Encryption Algorithm“ [6 ] .
Použitím algoritmu ROT13 na již šifrovaný text ROT13 získáme původní text; ROT26 je ekvivalentem žádného šifrování jako takového. Navíc trojí použití ROT13 nebo 3ROT13 (použité v hravé analogii s 3DES) je ekvivalentní běžnému ROT13.
V prosinci 1999 bylo zjištěno, že Netscape Communicator používá ROT-13 jako součást nezabezpečeného schématu pro ukládání e-mailových hesel [7] . V roce 2001 ruský programátor Dmitrij Sklyarov ukázal, že dodavatel elektronických knih, New Paradigm Research Group (NPRG), používal ROT13 k šifrování jejich dokumentů; NPRG údajně zneužil ROT13 v hračce, například poskytnutý Adobe s eBook Software Development Kit pro vážné šifrování [8] Windows XP používá ROT13 pro některé ze svých klíčů registru [9] .
abcdefghijklmnopqrstuvwxyz NOPQRSTUVWXYZABCDEFGHIJKLM | |
aha ↔ jeptiška | mravenec ↔ nag |
balk ↔ onyx | takt ↔ jedna |
barf ↔ jedničky | být ↔ nebo |
bin ↔ vajíčka | odliv ↔ střecha |
závist ↔ kolej | er ↔ re |
errs ↔ útes | klapka ↔ synchronizace |
kožešina ↔ ona | gel ↔ zkuste |
komár ↔ tang | irk ↔ vex |
úředník ↔ pyrex | ↔ cheryl _ |
PNG ↔ kat | SHA ↔ zábava |
furby ↔ šeol | terra ↔ zelená |
co ↔ Jung | URL ↔ ahoj |
purpura ↔ čečenská | zářil ↔ FUBAR |
ROT13 poskytuje příležitost pro „hry se slovy“. Některá slova transformovaná algoritmem ROT13 vytvářejí další známé slovo. Nejdelší příklady z angličtiny se skládají ze sedmi písmen: „abjurer“ (zříkající se své víry) ↔ „nikde“ (nikde) a „čečen“ ( Čečen ) ↔ „purpura“ ( purpura ). Další příklady slov jsou uvedeny v tabulce [10] .
V roce 1989 asociace International Obfuscated C Code Contest (IOCCC) přidala notaci Briana Westleyho. Počítačový program Westley dokáže správně zkompilovat prosté i ROT13 kódované zdroje. Program funguje buď tak, že provede kódování ROT13 nebo reverzní kódování zakódovaného vstupního textu [11] .
Diskusní skupina alt.folklore.urban přišla se slovem "furrfu", což je kód ROT13 pro běžně používané slovo "sheesh" (fuj!). “Furrfu” byl těžce používán v střední-1992 v odezvě na často odeslaná opakování městských mýtů na alt.folklore.urban, ke kterému mnoho stěžovalo si, že takové odezvy na nováčka pošty byly nadměrné [12] .
Ve webovém komiksu Darths and Droids [13] jedna postava (Jim, kterou hraje Qui-Gon Jinn ) uvádí, že v ROT13 je slovo „Jedi“ (Jedi) zakódováno jako „mnich“ (mnich). Další hrdina (Pete, hrající robota R2-D2 ) ho okamžitě opraví a poznamená, že „mnich“ v ROT13 odpovídá „Zbax“.
ROT47 je odvozen od algoritmu ROT13, kromě základní sady písmen používá i čísla a pomocné znaky. Místo použití abecední sekvence A–Z používá ROT47 větší znakovou sadu známou jako kódování ASCII . Zejména 7bitové znaky, které se mají vytisknout, kromě mezery, z desetinného 33. znaku '!' až do 126. znaku '~' - celkem 94 znaků v pořadí číselných hodnot jejich ASCII kódů je schopno posunout o 47 pozic bez zvláštních úprav. Například znak A je mapován na p , znak a je mapován na 2 . Použití větší abecedy vytváří důkladnější zmatek než ROT13, například není zřejmé, že Z`\c`d\gbh\eggd je zakódované telefonní číslo +1-415-839-6885. Na druhou stranu, protože ROT47 zadává čísla a znaky ve směsi bez rozdílu, je zřejmější, že text byl zašifrován.
Příklad:
Rychlá hnědá liška skáče přes líného psa .zašifrované v
%96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8]Knihovna GNU C , sada standardních rutin pro použití v počítačových programech, obsahuje funkci memfrob() [14] , která má podobné účely jako ROT13, i když je určena k použití s libovolnými binárními daty. Tato funkce funguje tak, že pracuje na každém byte ve spojení s binárním vzorem 00101010 ( číslo 42 ) pomocí operace výhradního OR (XOR). Funguje to jako jednoduchá šifra XOR . Stejně jako ROT13 je memfrob() reciproční a poskytuje podobnou, téměř neexistující úroveň zabezpečení.
V programovacím jazyce Python vypadá algoritmus takto:
def rot13 ( text ): rot13ed = '' pro písmeno v textu : byte = ord ( písmeno ) velké písmeno = ( byte & 32 ) byte &= ~ velké písmeno if ord ( 'A' ) <= byte <= ord ( 'Z' ): byte -= ord ( 'A' ) byte += 13 byte %= 26 byte += ord ( 'A' ) byte |= kapitál rot13ed += chr ( byte ) return rot13edOptimalizovaná verze:
def rot13 ( text ): sub = 'NOPQRSTUVWXYZABCDEFGHIJKLM[\]^_`nopqrstuvwxyzabcdefghijklm' res = [] pro písmeno v textu : res . append ( sub [ ord ( písmeno ) - 65 ]) return '' . připojit se ( res )Příklad v programovacím jazyce Rust :
#[rustfmt::přeskočit] const NÁHRADY : [ u8 ; 58 ] = [ b'N' , b'O' , b'P' , b'Q' , b'R' , b'S' , b'T' , b'U' , b'V' , b'W' , b' X' , b'Y' , b'Z' , b'A' , b'B' , b'C' , b'D' , b'E' , b'F' , b'G' , b'H' , b'I' , b'J' , b'K' , b'L' , b'M' , 0 , 0 , 0 , 0 , 0 , 0 , b'n' , b'o' , b'p' , b'q' , b'r' , b's' , b't' , b'u' , b'v' , b'w' , b' x' , b'y' , b'z' , b'a' , b'b' , b'c' , b'd ' , b'e ' , b'f' , b'g' , b'h' , b'i' , b'j' , b'k' , b'l' , b'm' , ]; /// # Příklad /// /// ``` /// Claim_eq!("Uryyb, jbeyq!", rot13("Ahoj světe!")); /// ``` fn rot13 ( src : & str ) -> String { src _ bajtů () . mapa ( | byte | { nech hlavní_bajt = byte & ! 32 ; char :: from ( if velký_bajt >= b'A' && velký_bajt <= b'Z' { // bezpečnost: toto by mělo být bezpečné pro latinská písmena unsafe { * SUBSTITUTIONS . get_unchecked (( byte - b'A' ) as useize ) } } jinak { byte }) }) . sbírat () } fn main () { let src = "Ahoj světe!" ; println! ( "Originál: \" {} \" , Kódováno: \" {} \" " , src , rot13 ( src )); }