CHYBA!!!

Nic nemiluju víc než stylové upozornění na svou chybu. Nyní s výzvou pro luštitele a kryptology-amatéry...

Při své nebetyčné ješitnosti kupodivu dokážu přijmout věcné upozornění na chybu, kterou jsem někde udělal, dokážu za ně poděkovat a poučit se z toho. Nedělá mi problém napsat: "Máš pravdu, sekl jsem se".

Co naopak nesnáším jsou upozornění typu: "Máš tam chybu. No ale úplně hroznou! Jémine, taková začátečnická chyba, no jak jsi mohl něco takového...!" To není upozornění, to je shazování. Něco jsem přehlídnul, ty to vidíš, tak řekni co vidíš, já se plácnu do hlavy, opravím a poděkuju. Jestli tu ale chceš jen dělat chytrýho tak bohužel...

To je normální. S něčím se moříte, zíráte do toho půl dne a pak přijde kolega, letmo koukne na monitor a řekne: Tady máš chybu. Druhý den obráceně – chroupete svačinu, jdete okolo kolegy a zahlídnete na jeho obrazovce chybu, no úplně školáckou... Pokud jste kolega, tak mu to řeknete, protože víte, že on ji v tu chvíli nevidí. Je raněn "insiderskou slepotou". Ze stejného důvodu se oddělila práce sazeče a korektora, když sazeč stráví nad něčím půl dne, tak večer nemůže udělat korekturu, protože všechny chyby, co nasekal, jsou mu důvěrně známé a NEVIDÍ je, ačkoli si v jiném textu stejné chyby okamžitě všimne. Holt, tak už mozek funguje.

Takže prosím, chovejte se ke mně slušně a mé chyby mi hlašte. Nezhroutím se z nich, protože na rozdíl od supermana o sobě vím, že chyby dělám (a kdo říká že ne, dělá je dodneška). Ale hlašte mi je tak, jak byste chtěli, abych je já hlásil vám. (Nápověda: "Hele, co tenhle příkaz? Co když bude X rovno nule, to tady musí vykolejit... Nebo co když někdo pošle v tom řetězci obrácený lomítko?" je přijatelný způsob)

No a po tomto exposé se dostávám k oné krypto – tento-hádance. Inspirovala mne k ní rovněž CHYBA! Tedy lépe řečeno komentář k mému prográmku, nadepsaný CHYBY!, v němž se autor zaprvé zeptal, proč jsem místo funkce X nepoužil funkci Y, zadruhé napsal, že mé šifrování je jistě jen sranda, že to každý může hravě během pár pokusů dešifrovat, a konečně mě upozornil na to, že jedna část skriptu nebude fungovat tak, jak popisuju v textu, což byla konečně opravdu chyba – ale v popisu. (Kdyby to nazval PŘIPOMÍNKY, nemám námitek...) Jen určitá úcta k jeho práci mi brání ho jmenovat a nazvat ho řízným slovem, které označuje jedince, co své dotazy na autora nadepisují jako HLÁŠENÍ CHYB.

 

Ale teď k té kryptohádance. Ve skriptu si vytvářím identifikátory. Ty mají tvar XXXXXXXXXX-YYYYYYYY-ZZZZZZ. XXXXXX je UNIXový timestamp, tedy počet sekund od začátku UNIXopočtu. YYYYYY je čas ve zlomcích sekundy (s různou přesností, doplněný na osm číslic koncovými nulami). A konečně ZZZZZZ je náhodné šestimístné číslo. Aby z čísla, třeba "1177495691-64116900-941333", netrčel na první pohled ten timestamp, tak ho před posláním trošku maskuju.

Metoda, kterou jsem zvolil k maskování je následující: Identifikátor může obsahovat 11 různých znaků (0 až 9 a "spojovník"). Každý z nich je převeden na nějaké písmeno nebo číslici. Aby to nebylo tak jednoduché, tak každému znaku může odpovídat víc různých písmen, například jednička může být nahrazena některým ze znaků (třeba) q,C,l,a,8,W. A protože se prvních sedm, osm číslic timestampu mění opravdu velmi pomalu, tak jsou, kvůli většímu znenápadnění, znaky ve výsledném řetězci proházeny.

Dá se říct, že hledaný řetězec má 26 znaků, v němž znáte prvních, řekněme, šest znaků, víte, že dva z těchto znaků jsou spojovníky a víte na jaké pozici v původním řetězci jsou. Znáte i způsob, jakým jsou čísla maskována, víte že začátek čísla je v poměrně dlouhém čase stálý (třeba zrovna to úvodní "1177" vydrží opravdu dost dlouho), ale nevíte, v jakém pořadí jsou číslice proházeny a nevíte jaké znaky odpovídají které číslici. Nevíte ani kolik různých znaků odpovídá jednotlivým číslicím. Neznáte ani přesný čas na serveru.

V této situaci a s těmito vědomostmi přišel onen komentátor, kterého stále nechci jmenovat, a napsal: "Doufám, že náhrada číslic písmeny není míněna jako seriózní zvýšení bezpečnosti, ale jenom jako taková legrácka. Vzhledem k tomu, že část ID je odvozena z času, který se mění jen velmi pomalu, tak jde během několika pokusů přijít na to, kterým číslům odpovídají která písmena."

Ano, je to legrácka, v tomto místě není potřeba zvyšovat bezpečnost, chtěl jsem jen, aby nebyl na první pohled vidět timestamp, i když by se vlastně nic moc nestalo. Zajímá mne spíš ten furiantský výkřik: ...během několika pokusů... Ale doufám, že to byla jenom taková legrácka...

Troufne si někdo? Generátor na "několik pokusů" máte k dispozici tady. Vygeneruje pár identifikátorů hned po sobě, takže je vysoce pravděpodobné, že prvních 9 znaků (timestamp) bude stejný. Troufnete si zjistit, klidně i během více pokusů, jakému číslu odpovídá jaké písmeno a v jakém pořadí jsou proházeny jednotlivé znaky?

 

Jo a malá nápověda: Spojovník může být nahrazen znaky u, A, t, O, U nebo q...

Hodně štěstí!

PS: Zdroják onoho generátoru

AKTUALIZACE: Smekám před oním nejmenovaným komentátorem Jakubem Vránou, na přiřazení přišel (nevím jestli na pár pokusů, ale přišel...), navíc tvrdí, že je to "nejlehčí kategorie". Takže máte šanci i vy další!

Dne 25.04.2007

Twittni

Přidej do: asdf.sk StumbleUpon Toolbar Stumble It!

Komentáře

[1] (dgx - Mail - WWW) 25.04.2007, 12:56:29 [X] [D]
Možná to bude out-of-topic, ale docela užitečná funkce na dělání s identifikátory je base_convert(). Vstupem budiž třeba číslo v desítkové soustavě (nebo jedenáckové, s tím že spojovník nahradíme za 'a') a výstupem "číslo" v třicetpětkové soustavě. Už druhý znak timestampu se pak mění celkem často. A ten první můžeme třeba zahodit ;)

Ale to jen tak.

[2] (Arthur Dent [openID] - WWW) 25.04.2007, 13:03:09 [X] [D]
[1] To je pěkná ajda! :) Jak to převádí? Dělá si vnitřní reprezentaci jako very long integer?

[3] (Arthur Dent [openID] - WWW) 25.04.2007, 13:54:36 [X] [D]
[1] Idea dobrá, ale: http://contrib.dev20.info/uniqid/dgtest.php

Leda to brát po částech...

[4] (dgx - Mail - WWW) 25.04.2007, 14:28:43 [X] [D]
Mrkni na http://php.net/base_convert, tam najdeš o přetíkání a limitech něco víc.

[5] (Kiki ) 25.04.2007, 21:54:10 [X] [D]
"Hlašte"? Kdepak, máš psát "Hlaste". "Hlašte" není česky správně.