Računari 88

Žil Vernov problem

Sedamdeset deveta Pitalica bila je inspirisana jednim Žil Vernovim romanom i pokazala se relativno lakim "zalogajem" za naše čitaoce. Uostalom, valjda ne živimo 100 godina posle Žil Verna da bi nam problemi koji su mučili njegove junake izgledali prekomplikovano!

Dejan Ristanović

Roman "La Jangada Huit Cents Lieues sur l'Amazone" (kod nas objavljen pod naslovom "Prav a osuđen") spada u dela iz Žil Vernovog (Jules Verne, 1828-1905) "ranijeg perioda" kada mu je ambicija bila da bude za geografiju ono što je njegov nešto stariji savremenik Aleksandar Dima bio za istoriju. Roman kao takav, po našem mišljenju, ne zaslužuje neku naročito visoku ocenu - pisac do u beskraj opisuje izgled, floru, faunu i istoriju Perua i istraživanje toka reke Amazon i bavi se svim drugim više nego radnjom svog romana, koje i tako nema baš previše (optužba sa kojom ćemo, bojimo se, i mi morati da se suočimo pošto pročitate ovaj tekst). Knjiga je, ipak, privukla našu pažnju zbog jednog zanimljivog matematičkog problema, kao stvorenog za Pitalicu.

Glavni junak romana, Žoam Dakosta, je u mladosti osuđen na smrt zbog krađe dijamanata i ubistva vojnika koji su sprovodili pošiljku (što, naravno, nije učinio), pobegao je, proveo čitav život u susednom Brazilu pod lažnim imenom i najzad, da bi prisustvovao venčanju svoje ćerke, bio prinuđen da se vrati na mesto zločina i suoči sa presudom. Jedina nada mu je bilo pismo u kome je pravi zločinac, mučen grižom savesti, pred smrt priznao svoje (ne)delo ali je to pismo, na žalost, bilo šifrovano a čovek koji je znao šifru i pokušavao da je proda Dakosti nesrećno je poginuo. Kao što i priliči romanima tog tipa iz tog vremena, sudija Žarikes, koji se zainteresovao za slučaj, će u zadnjem trenutku, pred samo pogubljenje, uspešno dešifrovati poruku i sve će se srećno završiti.

Žil Vern je pri pisanju ovoga romana očito bio inspirisan slavnom pripovetkom Edgara Alana Poa (1813-1849) "Zlatni jelenak" (pominje se na nekoliko mesta u knjizi) u kojoj je glavni junak takođe suočen sa šifrovanom porukom čiju tajnu na kraju otkriva. Međutim, Edgar Alan Po je bio školovani matimatičar pa je njegov junak, Viliam Legrand, problemu pristupio poput iskusnog kriptoanalitičara i na kraju ga, sasvim prema "pravilu službe", rešio na način koji bi se, doduše uz malu pomoć kompjutera, primenjivao i dan-danas. Žil Vern očito nije imao znanja za tako nešto pa je sam sebi izmislio šifru koju njegov junak u suštini ne ume da dešifruje - na kraju će, kao što ćemo videti, do rešenja doći na prilično neortodoksan način.

Pitanje da li je Žil Vern sam izmislio šifru koju je opisao ili je koristio neku postojeću će, barem što se ovog teksta tiče, ostati otvoreno - u literaturi koja nam je bila dostupna nismo uspeli da lociramo baš takvu šifru, premda smo primetili da bi se ona mogla svesti na jedan specijalan slučaj poznate Vižnerove (Blaise de Vigenere, najveći francuski kriptolog XVI veka) tablice dopunjene, recimo, uslovom da se u ključu šifre može naći samo neko od prvih 9 slova abecede. Što se same Vižnerove tablice tiče, predložena je 1586. ili 1587. u Vižnerovoj knjizi "Traicte des Chiffres" kao kombinacija četvorougaone tablice koju je zamislio opat Tritem (abbe Trithem) i slovnog ključa koji je predložio J.B. dela Porta (della Porta). Iako je sa aspekta sigurnosti inferiorna nekim tada postojećim šiframa Albertija i Belazoa, Vižnerova tablica je bila jako jednostavna za upotrebu (ako pišete program za šifrovanje nekim od ovih metoda, svi će vam izgledati otprilike jednako složeni ali kada se radi "na ruke"...) i zato je postigla ogromnu popularnost pa se povremeno koristi i u današnje vreme. Treba, ipak, znati da je "razbijanje" Vižnerove šifre detaljno opisano još 1863. godine u jednoj knjizi o kriptografiji. Ta knjiga, izgleda, do Žil Verna nije došla što mu možda i ne treba zameriti kada se zna da su nemački šifranti u I svetskom ratu bili jednako neobavešteni o njoj pa su, na zadovoljstvo Engleza, masovno koristili jednu varijantu Vižnerove tablice.

Opisaćemo, pre svega, sam postupak šifrovanja pomoću primera sa slike 1. Ispod otvorenog teksta ispisuje se višecifreni broj (u našem primeru to je broj 7694153) a onda se svako slovo "pomera" po abecedi za onoliko mesta koliko pokazuje cifra napisana ispod tog slova (ako se u brojanju dođe do Ž, prelazi se, prirodno, na A). Tako je nastao i šifrat sa slike 2 koji je, i bez poznavanja ključa, trebalo pretvoriti u smislen tekst. Suočen sa problemom, sudija Žarikes je pokušao dešifrovanje metodama iz "Zlatnog jelenka" i, pošto nije išlo, na neki volšeban način zaključio da je korišćena baš opisana šifra što se na kraju pokazalo tačnim - kao da na svetu postoje samo dve šifre, pa ako nije korišćena prva, onda mora da je druga! Trebalo je, u najmanju ruku, da odredi frekvencije pojavljivanja raznih slova i, po njihovoj ujednačenosti, prepozna neki od polialfabetskih metoda - više detalja o njemu proizašlo bi iz daljeg postupka dešifrovanja.

Da vidimo, pre svega, kako je Žarikes rešio problem jer je sasvim približan metod (koji se, inače, u literaturi pripisuje Bazeriu) koristila i velika većina naših čitalaca. Ideja je u tome da se "nasluti" neka iole duža reč koja se javlja u originalnom tekstu. Obzirom da se radi o priznanju nekakvog zločina, dalo bi se pretpostaviti da se u tekstu javlja reč "zločin", "ubistvo", "presuda", "dijamanti", "krivac" ili nešto slično tome. Naš jezik unosi dodatni problem padeža, tako da se recimo reč "krivac" može pojaviti u obliku "krivca" ili "krivcem". Zato karakterističnu reč skraćujemo na prvih nekoliko slova (npr. 'dijaman') i pretpostavljamo da ona počinje od prvog, drugog, trećeg i svakog drugog slova otvorenog teksta. "Oduzimamo" slova od šifrata i pronalazimo pretpostavljeni ključ - ako se bilo gde desi da je rastojanje između pretpostavljenog slova i šifrata veće od 9, odustajemo od tog položaja i prelazimo na sledeći (da se radi o "pravoj" Vižnerovoj šifri u kojoj je ključ reč a ne broj, na ovu olakšicu ne bismo mogli da računamo). Već kod devetnaestog slova šifrata potpisivanje reči 'dijaman' iznad 'glldnčr' daje ispravan ključ šifre 4325134 koji treba "razmotati" do početka teksta i utvrditi da je broj 4 zapravo ponavljanje tj. da je pravi ključ 432513 - čak i bez kompjutera šifra se mogla razbiti za sat-dva. Žarikesa je, međutim, problem mučio danima i mesecima - on se, doduše, dosetio opisane metodologije ali mu ona "sitnica" o "premotavanju" šifre na početak teksta nije pala na pamet, tako da mu se činilo da, sve i ako "napipa" šifru, neće znati da li broj nalik na 432513 treba čitati tako ili recimo kao 343251, 134325, 513432... Na kraju mu je, u "minut do dvanaest", jedan od Dakostinih prijatelja sasvim slučajno rekao da je pravi krivac neki Ortega, i sudija pretpostavlja da je dokument potpisan baš tim imenom, pa primenjuje izloženi postupak na zadnjih šest slova dokumenta. Kada malo bolje razmislite, nema baš nikakve razlike između reči 'Ortega' na kraju dokumenta i reči 'dijaman' na njegovoj devetoj poziciji - moglo se lako dogoditi da 'Ortega' takođe da permutovani ključ. Međutim, Žil Vern je tu malo "pomogao" svom junaku tako što je izabrao baš ključ dužine 6 (koliko slova ima reč 'Ortega') i podesio dužinu šifrovanog teksta tako da se prvi broj ključa poklopi sa slovom O. Zato i kažemo da je rešenje izloženo u knjizi prilično neortodoksno i nedostojno autoriteta velikog pisca.

Namera nam je da ovde izložimo metodologiju kojom se problem stvarno rešava bez "nagađanja" smisla teksta i reči koje se možda javljaju ili ne javljaju u njemu - možda bi Viliam Legrand tako rešavao problem da se kojim slučajem zatekao u Peruu. Tu metodologiju biste, na žalost, teško mogli primeniti na ovu knjigu odnosno na njeno domaće izdanje iz 1952. godine u kome postoje dve štamparske greške u samom šifratu. Ako bismo bili blagonakloni pa oprostili štampariji (nekakvom preduzeću "Omladina" koje se nalazilo u, ovaj, Bulevaru vojvode Mišića 17... vreme prolazi, imena se menjaju ali neke stvari uvek ostaju iste) te "sitnice" koje se, uostalom, pažljivim poređenjem šifrata objavljenih na dva mesta mogu uočiti, prevodilac Andreja Milićević zaslužuje punu kritiku. Izgleda da njemu baš i nije bilo preterano jasno o čemu se u romanu radi, pa je šifrat ostavio u originalnom francuskom obliku, a onda prevodio diskusiju o njemu i razne "izlaze" koji se dobijaju. Kada čitalac počne od početka poruke pa primeti da se njeno prvo slovo P, pomeranjem za četiri mesta, transformiše opet u P, može se samo zapitati ko je tu u stvari lud - Žil Vern ili on? Ove probleme smo, zadajući Pitalicu, otklonili tako što smo šifrovali prevod na srpski a ne francusku verziju dokumenta.

Prva faza razbijanja šifre (prema opštem Kerkhosovom metodu za polialfabetske kriptograme) je određivanje dužine korišćenog ključa. Za to se koristi velika mana svih polialfabetskih metoda koja se ispoljila čak dva puta na tako kratkom tekstu kao što je primer sa slike 1. Primetimo bigrame 'ke' i 'ra' koji se po dva puta javljaju u otvorenom tekstu. Zbog ograničene dužine ključa dogodilo se da se ispod njih nađu isti brojevi 41 odnosno 53 tako da je u oba slučaja ovaj par slova preveden u 'of' odnosno 'vh'. Ako se zna da je u svakom govornom jeziku vrlo uobičajeno postojanje bigrama (parovi slova koji se često javljaju zajedno - u srpskom jeziku najčešći su bigrami JE, ST, NA, RA, NI...), treba pažljivo proučiti svako njihovo ponavljanje (ili, još bolje, ponavljanje trigrama pa i poligrama ako ih nekom srećom ima) u šifratu. Neka od tih ponavljanja će svakako biti slučajna, ali će dobar deo poticati od ponavljanja ključa ispod istih slova. Zato treba odrediti rastojanja između tih poligrama a zatim i zajedničke faktore tih rastojanja. U primeru sa slike 1 rastojanje između dve pojave bigrama 'ke' je 21 a rastojanje između pojava 're' 14 slova - može se, dakle, sa velikom verovatnoćom pretpostaviti da je dužina ključa 7 brojeva.

Na slici 3 dati su rezultati primene ovog postupka na Žil Vernov šifrat. Vidimo da je pronađen jedan poligram od 4 slova 'rvby' koji se ponavlja na pozicijama 159 i 261 ("rastojanje" je, dakle, 102 slova), pet trigrama na rastojanjima 216, 173, 66, 102 i 106 kao i veći broj bigrama koje karakterišu različita rastojanja. Tabela sa slike 3, naravno formirana pomoću kompjutera, sumira i faktore izmerenih rastojanja - plus u prvoj koloni, na primer, označava da je rastojanje deljivo sa 2 a minus da nije. Vidi se da plusevi preovlađuju u kolonama koje odgovaraju brojevima 2, 3 i 6, što bi se još više potenciralo da smo iz tabele izbacili neke velike proste brojeve kao što je 173. Ima, dakle, osnova da se pretpostavi da se ključ sastoji od 6 brojeva - ako bi se ta pretpostavka pokazala pogrešnom, trebalo bi probati sa ključevima dužina 2 i 3 (premda je malo verovatno da bi neko koristio tako kratak ključ) ili čak ispitivati neke (prema tabeli) manje verovatne dužine kao što je 9.

Pošto smo pretpostavili da je dužina ključa 6 cifara, prepisujemo šifrovanu poruku tako da se u njenom prvom redu nađe prvo, sedmo, trinaesto, devetnaesto itd slovo, u drugom redu drugo, osmo, četrnaesto i tako dalje (slika 4). Sada dolazi do izražaja poenta Kerkhosovog metoda - primetimo da su se u svakom od redova našla slova koja su šifrovana pomoću istog broja tj. svako je slovo pomereno od originalne pozicije za isti broj mesta. Ukoliko je, na primer, prva cifra (i dalje nepoznatog) ključa 2, svako slovo u prvom redu će biti pomereno za dva mesta tj. A će postati C, B će biti Č i tome slično. To znači da smo uspeli da "demaskiramo" ono što polialfabetski metod pokušava da sakrije: karakteristiku jezika. Ako prebrojimo koliko se slova A, B, C, ... Ž javlja u prvom redu i nađemo da je, na primer, slovo C najčešće, ima dosta osnova za pretpostavku da je C zamena za A (najčešće slovo u našem jeziku) odnosno da je prva cifra ključa baš broj 2. Detalje ovakvog razbijanja šifre na koju smo grupisanjem slova uspeli da svedemo Žil Vernovu šifru možete naći ne samo u "Zlatnom jelenku" nego i u "Računarima 11" - to je, ako se dobro sećamo, bila druga Pitalica. Kao da smo malo napredovali za ovih sedam godina... ko zna kakvu ćemo vam tek groznu šifru izmisliti sledeći put!

Ostalo je, dakle, da se odradi rutinski deo posla. Na slici 5 smo prikazali rezultate merenja frekvencija pojavljivanja pojedinih slova u svakom od redova. Obzirom da je sam kriptogram dosta kratak i da svaki od redova sa slike 4 pretstavlja tek njegovu šestinu, može se očekivati da će izmerene frekvencije dosta odudarati od statističkih podataka za srpski jezik. A ti statistički podaci (koje, recimo, možete naći u knjizi G. Lukatele "Statistička teorija telekomunikacija i teorija informacija") kažu da se na svakih 100,000 slova javlja preko 10,000 slova A, po 8000 slova I i O, nešto manje od 8000 slova E, 5000 slova N i tako dalje, dok su slova Z, B, H i F jako retka. Pokušajmo, primera radi, da odredimo drugi znak šifre. U drugom redu se slovo Č javlja čak osam puta pa bi ono lako moglo da bude zamena za A - u tom je slučaju ključ broj 3 pošto između A i Č postoje sloba B i C. Sada za pretpostavljeni ključ 3 proveravamo šta daju ostala česta slova drugog reda šifrata: L je zamena za I, R zamena za O, P zamena za M a Q za N. Slova I, O, M, N su u našem jeziku relativno česta tako da se uvedena pretpostavka može usvojiti.

Jedina pozicija na kojoj je lako pogrešiti je treća: ako pretpostavimo da je najfrekventnije slovo (G) zamena za A, dobijamo devetku za treću cifru ključa. Daljim razvojem ove pretpostavke dobijamo da su najfrekventnija slova trećeg reda L, U, K i H što bi se moglo usvojiti - čudno je da su se od samoglasnika pojavili samo A i I i da se pojavilo slovo H, ali je u tako kratkom uzorku to sasvim moguće. No, kada pokušamo da dešifrujemo originalnu poruku brojem 439513 (uz pomoć računara svaki takav pokušaj je minut posla), dobićemo tekst u kome je svako šesto slovo očito besmisleno što nas vraća na tabelu sa slike 5 i zahteva uvođenje nove pretpostavke, da najfrekventnije slovo G predstavlja zamenu za O ili I. Jedna od tih pretpostavki zbilja dovodi do ispravnog rešenja, broja 432513 i dešifrovanog teksta sa slike 6.

Neki naši čitaoci su primenili metodologiju unekoliko sličnu opisanoj ili neki njen deo; drugi su se oslonili na "grubu silu" (da smo sami izmišljali problem, verovatno bismo izabrali bar desetocifreni ključ ali... ostali smo kod Žil Vernovog) a većina tražila neku karakterističnu reč. Rešavanje problema je bilo olakšano time što smo u alfabet uključili slova q, w, x i y za koja se moglo pretpostaviti da se ne javljaju (ili da se javljaju samo u okviru nekog vlastitog imena) u čitavom otvorenom tekstu. Prvu nagradu od 46,000 dinara je zaslužio Milan Burazor iz Niša, autor najkompletnije diskusije problema. Preostale dve nagrade smo izvukli iz "hrpe" od 102 kupona sa tačnim odgovorima (po prirodi problema, ovde pogrešnih odgovora nije ni moglo biti) od kojih je solidan broj pristigao preko Sezama. Najviše sreće imali su Nikola Nedović iz Gornjeg Milanovca (34,500 dinara) i Ivan Ranđelović iz Novog Beograda (23,000 dinara). Pohvale za interesantna rešenja zaslužili su Biljana Srdanov, Milomir Aleksić, Igor Ikodinović, Ljubomir Josifovski, Boško Koprivica, Stojan Miloradović, Zoran Nikodijević, Dušan Popić, Marko Smiljanić, Dejan Stanojević, Bratislav Veljković i Dragan Živković.