Jak zajistit, že zadání Soutěžního kola neupravíme podle toho, kdo zaplatí nejvíc?
Koncept Soutěžního kola přináší zajímavý problém. Požadavky na aplikaci máme definované podobně jako v Nominačním kole. Ty nyní v této formě zpřístupnit vzhledem ke konceptu soutěže nemůžeme. Účastníci na ně budou muset přijít komunikací s fiktivním zákazníkem. Zároveň ale chceme ukázat, že takto jsme je definovali už teď, před začátkem soutěže (a nezměnili je podle toho, co jsme řekli týmu, který máme rádi :) ). Jak to udělat?
Pomůžou nám hashovací funkce. Jedná se o funkce, které mají několik vlastností. Tou nejdůležitější je odolnost vůči nalezení kolize. Tato vlastnost implikuje také odolnost vůči nalezení druhého vzoru, která je pro nás nyní důležitá. Ta znamená, že se znalostí výstupu funkce není možné najít, na co byla aplikována, a není možné vygenerovat ani jiný vstup, který by dával stejný výsledek.
V naší situaci tedy známe hash. Z něj nedokážeme o zadání nic zjistit. Jakmile ale bude kompletní zadání zveřejněno, můžeme na daný soubor aplikovat hashovací funkci (v našem případě SHA-256) a ověřit, že výstup je shodný jako hash distribuovaný před začátkem kola.
To zaručí, že zveřejněné požadavky jsou takto definované již nyní a my je již nemůžeme upravit. SHA-256 požadavků v Soutěžním kole je ba696337e188b921e336394249111e25210af52f2def92c566a7992efe258a6f. Tak si to za tři týdny ověřte. Jak na to se podívejte třeba sem.
Hashovací funkce je jedním ze základních prvků kryptografie a každý programátor by je měl znát. Mimo jiné na nich stojí celý koncept blockchainu při využití mechanismu „Proof-of-work“, využívaný například (a především) v Bitcoinu.