Jak jsem dešifroval kvůli Google+

Stalo se, že Google představil svůj projekt Google+, okolo kterého vznikla hysterie s pozvánkami, podobně jako onehdy s Google Wave. Samozřejmě jsem se tam hned chtěl, ale pozvánky už byly vyčerpány. Pak ale narazím na Facebooku (to je ale ironie) na stránce Živě.cz, že prý rozdávají pozvánky jakýmsi hackem – jde o napsání emailu lidí, se kterými chcete sdílet nějakou novinku nebo status (dejme tomu). Ovšem pozvánka nebyla zadarmo, kluci z Živě.cz si totiž vymysleli šifru a jejím vyluštěním pozvánku dostanete.

QBY IYCFJNMR MJMY NRLIJ, BYNMGSH YB SGN VYCPGSQJ BY VFJN. DHCMH SG NMIGSQJ MRSOJIF.ZYT / HMZXVNUFJ G BYCPRMH NH BGFNR RSLYITGZH. NMGZR, QBOC VYMYT CGBGMH BY LYITJFGIH NPJU HTGRF G VYZQGMH SG CVIGPJ.

Protože jsem v prvním semestru na programování dělal semestrální práci pro (de)šifrování textu pomocí Playfair šifry, tak mi to samozřejmě nedalo. Problém byl heslo (klíč), které jsem musel tipnout. Napadly mě hned ty jasné – zivecz, google, googleplus, apod. Ale bez úspěchu.
Pak jsem našel dobrou stránku, kde všechny známé šifry byly hezky JavaScriptové, tak jsem jich pár zkusil. Ale také nic.

Už jsem se na to chtěl vykašlat, pročítal jsem komentáře na FB a tu živáci uvedli malou nápovědu – kámasútra. Zajímavé. To bych nebyl už tak zdegenerovaný, abych automaticky nenapsal do vyhledávače ‘šifra kámasútra’. A hle hned první odkaz na wikipedii, kde se píše, že kámasútra používala substituční šifru, tedy jednoduché proházení písmen – A bude třeba H, B třeba U, atd.

Odtud už to šlo celkem rychle. Po rychlém přelítnutí šifry mně zaujaly písmena MRSOJIF.ZYT, což vypadá jako adresa nějakého webu. Google.com tam ale nepasuje, nicméně .ZYT musí být jednoznačně nejpoužívanější TLD na světě .com. To máme první 3 písmena – Z=C, Y=O, T=M.

Jsem od přírody líný jako prase a tak abych si to co nejvíc usnadnil, napsal jsem v Javě malý prográmek, který mi šifru přeloží podle zadaných substitucí. Zpočátku vypadal takto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Cipher {
 
	public static void main(String[] args) {
		String s = "QBY IYCFJNMR MJMY NRLIJ, BYNMGSH YB SGN VYCPGSQJ BY VFJN. DHCMH SG NMIGSQJ MRSOJIF.ZYT / HMZXVNUFJ G BYCPRMH NH BGFNR RSLYITGZH. NMGZR, QBOC VYMYT CGBGMH BY LYITJFGIH NPJU HTGRF G VYZQGMH SG CVIGPJ.";
		for(char c : s.toCharArray()) {
			System.out.print(getChar(c));
		}
	}
 
	static char getChar(char c) {
		switch(c) {
			case 'Z':	return 'c';
			case 'Y':	return 'o';
			case 'T':	return 'm';
			default:	return c;
		}
	}
}

Po spuštění se do konzole vypsalo:
QBo IoCFJNMR MJMo NRLIJ, BoNMGSH oB SGN VoCPGSQJ Bo VFJN. DHCMH SG NMIGSQJ MRSOJIF.com / HMcXVNUFJ G BoCPRMH NH BGFNR RSLoImGcH. NMGcR, QBOC VoMom CGBGMH Bo LoImJFGIH NPJU HmGRF G VocQGMH SG CVIGPJ.

Hm, co s tím teď? U prvního slova mi hned v hlavě vyskočí slovo kdo, tedy Q=K a B=D. Kdo je přeci velmi dobré slovo pro začátek věty. Když toto teď píšu, tak mě napadá ještě pro, které by také šlo, ale naštěstí to není správně. Přidal jsem tedy tyto substituce do programu a další výsledek byl:

kdo IoCFJNMR MJMo NRLIJ, doNMGSH od SGN VoCPGSkJ do VFJN. DHCMH SG NMIGSkJ MRSOJIF.com / HMcXVNUFJ G doCPRMH NH dGFNR RSLoImGcH. NMGcR, kdOC VoMom CGdGMH do LoImJFGIH NPJU HmGRF G VockGMH SG CVIGPJ.

Vyskočily předložky od a do. To není špatné. Za předložkou od následuje 3-písmenné slovo, co by se tam tak hodilo? Hm, co takhle nás? Pozvánku přece od nich dostanu. Ale jo, zkusím to – S=N, G=A, N=S. Aktualizace kódu a výsledek:

kdo IoCFJsMR MJMo sRLIJ, dosManH od nas VoCPankJ do VFJs. DHCMH na sMIankJ MRnOJIF.com / HMcXVsUFJ a doCPRMH sH daFsR RnLoImacH. sMacR, kdOC VoMom CadaMH do LoImJFaIH sPJU HmaRF a VockaMH na CVIaPJ.

Tady už se rýsuje více slov – dosManH=dostane, VoCPanJ=pozvanku, kdOC=kdyz. Opět úprava programu a poté zase pár uhodnutých písmen a šifra jest dešifrována:

kdo rozlusti tuto sifru, dostane od nas pozvanku do plus. bezte na stranku tinyurl.com / etcXpsjlu a dozvite se dalsi informace. staci, kdyz potom zadate do formulare svuj email a pockate na zpravu.

Jenže nám zbývá jedno záludné písmenko – X. Těžko ho uhodnu, když není v nějakém slově, takže brute-force metoda je jasná volba. Zbylo jen pár písmen abecedy, které ve zprávě nejsou. Postupným zadáváním do prohlížeče mi vyskakovaly samé 404, až na úplně předposlední možné písmeno – W, kluci z živě.cz jsou teda pěkný zloduši :)

Nejlepší bylo, že jsem pozvánku sice obdržel, ale i tak jsem se do Google+ nedostal, ale časem by se to snad mělo zase otevřít.

Poznámka na konec: divím se, že jsem se vůbec do něčeho takového pustil, ale nadměrný dostatek volného času udělá své.

Příspěvek byl publikován v rubrice Programování, Všechno možný. Můžete si uložit jeho odkaz mezi své oblíbené záložky.