Kurzusok
/
Pharo
Pharo
/
Feladatok
/
Egyszerű rejtjel
Egyszerű rejtjel

Egyszerű rejtjel

Közepes

Utasítások

Készíts egy egyszerű, a Caesaréhoz hasonló eltolásos rejtjelet és egy biztonságosabb helyettesítéses rejtjelet.

1. lépés

„Ha volt valami titkolnivalója, rejtjellel írta meg, mégpedig úgy, hogy az ábécé betűinek sorrendjét megváltoztatta, s így egyetlen szót sem lehetett kiolvasni. Aki meg akarja fejteni ezeket, és meg akarja érteni a jelentésüket, annak az ábécé negyedik betűjét, vagyis a D-t kell az A helyére tennie, és így tovább a többi betűvel.”

  • Suetonius, Life of Julius Caesar

A rejtjelek nagyon egyszerű algoritmusok: segítségükkel a szöveget kevésbé olvashatóvá tehetjük, miközben a megfejtése továbbra is könnyű marad. Sokféle kriptoanalízissel szemben sebezhetők, de Caesar szerencsés volt: az ellenségei nem voltak kriptoanalitikusok.

A Caesar-rejtjelet Julius Caesar néhány távolba küldött üzenetéhez használták. Caesar persze tudta, hogy a rejtjel nem valami jó, de ebben volt egy szövetségese: szinte senki sem tudott jól olvasni. Így az is elég volt, hogy néhány betűvel eltért a szöveg, és az emberek már fel sem ismerték azt a kevés szót, amit egyáltalán ismertek.

A feladatod, hogy készíts egy egyszerű eltolásos rejtjelet a Caesar-rejtjelhez hasonlóan. Ez a kép remek példa a Caesar-rejtjelre:

Caesar-rejtjel

Például:

Ha az „iamapandabear” szöveget adjuk be a kódoló függvénynek, az „ldpdsdqgdehdu” rejtjelet adja vissza. Elég homályos ahhoz, hogy az üzenetünk titokban maradjon az úton.

Ha az „ldpdsdqgdehdu” szöveget a dekódoló függvénybe tesszük, az visszaadja az eredeti „iamapandabear” szöveget, így a barátod el tudja olvasni az eredeti üzenetedet.

2. lépés

Az eltolásos rejtjelek gyorsan hasznavehetetlenné válnak, ha az ellenfél parancsnoka rájön a működésükre. Ezért próbáljunk meg helyette helyettesítéses rejtjelet használni. Módosítsd a kódot úgy, hogy megadhassunk egy kulcsot, és az határozza meg az eltolás mértékét.

Íme egy példa:

Ha a kulcs „aaaaaaaaaaaaaaaaaa”, akkor az „iamapandabear” szöveg kódolása az eredeti „iamapandabear” szöveget adja vissza.

Ha a kulcs „ddddddddddddddddd”, akkor az „iamapandabear” szövegünk kódolása a homályos „ldpdsdqgdehdu” szöveget adná vissza.

A fenti példában a kulcs értékénél a = 0-t állítottunk be. Így amikor a nyílt szöveget hozzáadjuk a kulcshoz, ugyanaz az üzenet jön ki. Tehát az „aaaa” nem ideális kulcs. Ha viszont a kulcsot „dddd”-re állítjuk, ugyanazt kapjuk, mint a Caesar-rejtjel esetében.

3. lépés

Minden rejtjel leggyengébb láncszeme az ember. Tegyük a helyettesítéses rejtjeledet egy kicsit hibátűrőbbé azzal, hogy gondoskodunk egy véletlenszerűség-forrásról, és biztosítjuk, hogy a kulcs csak kisbetűket tartalmaz.

Ha valaki egyáltalán nem ad meg kulcsot, generálj egy valóban véletlenszerű kulcsot, amely legalább 100 kisbetűből áll.

Bővítési lehetőségek

Az eltolásos rejtjelek annyit tesznek, hogy a szöveget kicsit furcsává teszik, de érzékenyek a gyakoriságelemzésre. A helyettesítéses rejtjelek ezen segítenek, de még mindig nagyon sebezhetők, ha a kulcs rövid, vagy ha a szóközök megmaradnak. Később látni fogsz egy megoldást erre a problémára a „crypto-square” feladatban.

Ha tovább szeretnél mélyülni ezen a területen, a kérdések lassan arról szólnak, hogyan cserélhetünk kulcsot biztonságos módon. Nézd meg a Diffie-Hellman a Wikipédián oldalt, ahol ennek a sémának az egyik első megvalósításáról olvashatsz.

Megjegyzés

Ha az indexek túllépik a határt, próbáld aritmetikai műveletekkel, például a modulo segítségével körbeérni őket. A Character és String osztályok is a barátaid.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Pharo Exercism

Készen állsz elkezdeni a(z) Egyszerű rejtjel feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Pharo nyelvet 50 feladat segítségével, valódi emberi mentorálással, mindez ingyen.