Domov > Článek > Technologie bitcoinů a kryptocoinů

Technologie bitcoinů a kryptocoinů

title txtÚvod do knihy O bitcoinu a kryptoměnách je hodně vzrušení Slyšeli jsme o schůzkách startupových investic a dokonce i kupování pizzy s bitcoinovými Optimisté tvrdí, že bitcoin fundamentálně poškodí a bude trpět inovativní politikou po celém světě Pesimisté tvrdí Bitoplatby, ekonomika a v pozadí těchto rozdílných názorů je značný zmatek ohledně toho, co je bitcoin a jak napsal tuto knihu, aby pomohla překonat humbuk a dostat se k jádru toho, co dělá bitcoin jedinečným Abychom skutečně pochopili, co je na bitcoinu zvláštního, musíme pochopit, jak funguje na technické úrovni Bitcoin je skutečně nová technologie a tak daleko se můžeme dostat pouze tím, že to vysvětlíme analogiemi k minulým technologiím Budeme předpokládat, že máte základní znalosti o počítačové vědě, jak počítače fungují.

struktury a algoritmy a určité zkušenosti s programováním Pokud jste vysokoškolský nebo postgraduální student informatiky, vývojář softwaru, podnikatel nebo nadšenec, tato učebnice je pro vás. V této sérii jedenácti kapitol se budeme věnovat důležitým otázky ohledně bitcoinů Jak fungují bitcoiny? Čím se liší? Jak bezpečné jsou vaše bitcoiny? Jak anonymní jsou uživatelé? Jaké aplikace můžeme vytvořit pomocí bitcoinu jako platformy? Lze kryptoměny regulovat? Pokud bychom dnes navrhovali novou kryptoměnu, co bychom změnili? Jaká bude budoucnost? Každá kapitola obsahuje řadu domácích otázek, které vám pomohou porozumět těmto otázkám na úrovni. Vřele vám doporučujeme, abyste si je propracovali Kromě toho existuje řada pěti programovacích úkolů, ve kterých implementujete různé součásti bitcoinu ve zjednodušených modelech. „Jste sluchový student, většina materiálu této knihy je také k dispozici, protože byste měli také doplnit své informace o učení, které můžete najít na online bitcoinové wiki, fórech a výzkumných dokumentech a interakcí se svými vrstevníkyBitcoinovou komunitou

je toto: pokud má H n-bitový výstup, pak může nabývat libovolnou z 2" hodnot. Řešení hádanky vyžaduje nalezení vstupu tak, aby výstup spadal do množiny y, což je obvykle mnohem menší thaofouts Velikost y zjistěte, jak těžká je hádanka Pokud y je setbit streas, pokud Y má pouze 1 prvek, je hádanka maximálně těžká Skutečnost, že id hádanky má vysokou min-entropii, zajišťuje, že neexistují žádné zkratky Naopak, pokud by konkrétní někdo mohl podvádět, řekněme vypuštěním řešení k hádancePokud je vyhledávací hádanka přátelská k hádankám, znamená to, že pro tuto hádanku neexistuje žádná strategie řešení, což je isve, můžeme to udělat tímto způsobem, pokud dokážeme generovat hádanky v této myšlence později, až budeme mluvit o bSHA -256 Probrali jsme tři vlastnosti hašovacích funkcí a jedna aplikace Nyní probereme konkrétní hašovací funkci, kterou budeme v této knize často používat, existuje mnoho shashovacích funkcí

ale toto jsou ty primárně používané sHA-256Připomeňme, že vyžadujeme, aby naše hasony měly pracovní výstupy libovolné délky Naštěstí, protože dokážeme vytvořit hashovací funkci, která funguje na vstupech s pevnou délkou, existuje obecná metoda pro převod itrk na libovolnou délku vstupy Nazývá se Merkle-Damgardova transformaceSHA-256 je jednou z řady commed hašovacích funkcí, které využívají tuto metodu, běžná terminologie základní hašovací funkce pevné délky odolná proti kolizi se nazývá kompresní funkce Bylo prokázáno, že pokud je základní kompresní funkce je kolizettrd tnple Řekněme, že vstupy tiakes z lenand vytvoří výstup menší délky n vstup do hašovací funkce, který může mít libovolnou velikost, rozdělený na blocksonstruction funguje následovně: výstup preere není žádný předchozí blokový výstup, místo toho použijeme inicializační vektor (v) Toto číslo je znovu použito pro každé volání hašovací funkce a v praxi se používá standardní dokumentace, která přijímá 768bitový vstup a vytváří 256bitové výstupy,

512 bitsessageMessage(blok 1)(blok 2)(blok n256 bits256 bitů Obrázek 13: Hashovací funkce SHA-256 (zjednodušeně/SHA-256 používá transformaci Merkle-Damgard na kolliskomprimaci turnfixní délky na hashovací funkce, mluvili jsme o hashovacích funkcích kryptografické hasjony se speciálními vlastnostmi, aplikace těchto vlastností a specifická hashovací funkce, kterou používáme v bitcoinu V dalším diskutujte o způsobech použití hashovacích funkcí k vytváření složitějších datových struktur, které se používají12 Hash ukazatele a datové struktury pro ukazatele dhash a hasha data představují ukazatel kde jsou některé informace uloženy společně s kryptografickým haFormation

Zatímco běžný ukazatel vám poskytuje způsob, jak získat informace, hash ukazatel vám také poskytuje způsob, jak ověřit, že se informace nezměnilyH()igure 1 4 Hash ukazatel hash ukazatel je ukazatel na místo, kde jsou data uložena aat data ae pevný bod v til

shbuildds of data structureitively, můžeme vzít známou datovou strukturu, která používá ukazatele, jako je linkor, binární vyhledávací strom, a implementovat je s ukazateli, namísto pBlock chaiObrázek 15 jsme vytvořili seznam pomocí hash ps Byli jsme strukturovat blokový řetězec Zatímco stejný propojený seznam, kde mít řadu bloků, eaclblock má datový přechod k předchozímu bloku v seznamu v řetězci bloků, kde byl blok předchozího bloku, ale také obsahuje výtah této hodnoty, který nám umožňuje ověřit, že hodnota ukládá poslední blok dat v hlavičceH(1 )předchozí: H()předchozí:H()I předchozí: H(datadataObrázek 15 Blokový řetězec

blokový řetězec je propojený seznam, který je vytvořen s hashovými ukazateli namísto ukazatelů, případ použití pro blokový řetězec je protokol prokazující neoprávněnou manipulaci, což znamená, že chceme vytvořit protokol dat dat a protokol, jdeme abychom to odhalili, abychom pochopili, proč se blok chová k této vlastnosti, která je viditelná pro manipulaci, zeptejme se, co se stane, když protivník bude chtít manipulovat s daty, která jsou uprostřed. Konkrétně řetězec dshblock protivníka nebude schopen tuto manipulaci detekovat. K dosažení tohoto cíle protivník změní data některého bloku k Protože data přerostla, hash v bloku k+1ash nebude odpovídat změněnému obsahu, protože hašovací funkce je odolná proti kolizi, a tak rozšíříme nekonzistentnost k a tuto změnu zvýšíme změnou vašeho seznamu Konkrétně, pokud uložíme ukazatel hash v čele seznamu v místě, kde bude protivník detekován

Výsledkem toho je, že pokud chce protivník manipulovat s daty kdekoli v tomto směru, aby byl příběh konzistentní, bude muset zasahovat do witlters celou cestu zpět na začátek a nakonec jde příliš na překážku, kterou nelze zvládnout. hlava seznamu Ukazuje se tedy, že právě tím, že jsme si právě rerwe' v podstatě zapamatovali haš z celého seznamu, který je viditelný pro neoprávněnou manipulaci. Můžeme tedy vytvořit blokový řetězec, kterému budeme říkat blokování geneze, konstrukce blokového řetězce je podobná sekci merkle-Damgardových konstruktů Ve skutečnosti jsou si dost podobné a pro oba platí stejný bezpečnostní argument před H(preAH()atadataObrázek 16 Protokol s evidencí manipulace

Pokud protivník upraví data kdekoli v řetězci bloků, bude to mít za následek, že blok bude zahrnut. Pokud uložíme hlavu protivníka, upraví všechny ukazatele tak, aby byly konzistentní s upravenými daty, hlava ukázala, že zjistí tampeMerkle stromy Další užitečná datová struktura tod použití hash ukazatelů je binární strom Anární strom s hash ukazateli je známý jako merkle strom, po jeho vynálezci Ralphu Merkleovi Předpokládejme, že máme několik bloků obsahujících data tyto datové bloky do dvojic a pak pro každý pár vytvoříme datovou strukturu, která má dva hasrs, jeden toof thks Tyto datové struktury je seskupují do skupin po dvou a forair vytvoří novou datovou strukturu, která obsahuje hash každého Pokračujeme v tom, dokud nedosáhneme jediného bloku, kořene stromu

H(1)H(1)H(1)H(1)H(1)H(H()H(、)H()H(1)H()H(1))H(、 )(data(data)(data)(dataObrázek 1 7 Merkle strom Ve stromu Merkle jsou datové bloky seskupeny, každý z těchto bloků je uložen v nadřazeném uzlu, nadřazené uzly jsou zase seskupeny do párů a jejich hash je uložen o úroveň výše ve stromu

Toto pokračuje celou cestu ve stromu, dokud nedosáhneme kořenového uzlu Stejně jako předtím si pamatujeme pouze hash ukazatel v záhlaví stromu Nyní máme schopnost averse dolů přes hash ukazatele k libovolnému bodu v datech, která nebyla zmanipulovaný wcause, použijte block chaers s nějakým datovým blokem ve spodní části hashteru, který se shoduje, a i když bude pokračovat v manipulaci s tímto blokem, změna se nakonec rozšíří do horní části stromu, kde nebude moci manipulovat hash pointer, který byl uložen Takže znovu, každý pokus o manipulaci s jakýmkoli kusem dat bude detekován pouhým zapamatovánímopDůkaz o členství Další příjemnou vlastností merkle stromů je to, že na rozdíl od blokového řetězce, který jsme postavili, ověříme, že si jistá pamatovat justoot pak narazí na cestu od bloku dat po theof the tree, protože bloky na této cestě jsou dostatečné k tomu, aby nám umožnily ověřit hashe celou cestu až po therksve stromu je n uzlů pouze o logu n) je třeba zobrazit položky a protože každý krok jen vyžaduje výpočet hashe podřízeného bloku, trvá to asi log(n času, než to ověříme, a střízlivý z bloků relativně krátký čas, Verifikace tedy běží v čase a prostoru, které jsou loga

uzly ve stromuH(1)H()H()H(1)Obrázek 1 8 Důkaz členství, že data blokují bloky v cestě z tohoto datového bloku ke kořenu Seřazený merkle strom je jen merkle strom kde vezmeme bloky dole a seřadíme nějakou funkci řazení, to může být abecední, lexikografické pořadí, číselné pořadí, střecha nečlenství s seřazeným Merklem stromem, je možné ověřit nečlenstvíogaritmický čas a prostor, který je , můžeme dokázat, že konkrétní blok není ve stromu merkle otázka by byla a ukázat cestu k položce, která je hned za tím, kde by byla

Pokud se tyto dva nacházejí mezi dvěma zobrazenými položkami, ale mezi nimi. Diskutovali jsme o použití hash ukazatelů v propojených seznamech a binárních stromech, ale obecněji se ukazuje, že můžeme použít hash ukazatele v jakékoli datové struktuře založené na ukazatelích, pokud struktura dat nebude fungovat Pokud se tato datová struktura pak shoduje, pokud přemýšlíte o acyklické datové struktuře, můžeme začít, aniž bychom měli žádný bod výpočtu, hashd začátek, ale ve struktuře s cykly není konec, se kterým můžeme začít a vypočítat zpět frobuild a direction of hash pointers an

budete moci velmi efektivně ověřit příslušnost k tomuto grafu a bude snadné jej vypočítat. Používání hashpointrů tímto způsobem je obecný trik, který později v této kapitole uvidíte v čase a kontextu distribuovaných datových struktur a v celém algoritmu a v části 13 Digitální podpis se podíváme na digitalisJe to secog withhash funkční bloky pro ty vlastnosti digitálních podpisů, které dobře odpovídají analogii vlastnoručního podpisu, nejprve zajistí, že jde o platný podpis, který má být svázán s konkrétním dokumentem, takže podpis nelze použít k označení, že vlastnost je analogická abychom se ujistili, že někdo nemůže vzít váš podpis a odříznout jej zespodu druhého, můžeme to sestavit v digitální podobě pomocí kryptografie První předchozí intuitivní diskuse o něco konkrétnější

To nám umožní lépe uvažovat o schématech digitálních podpisů s jejich bezpečnostními vlastnostmi Schéma digitálního podpisu a digital sith(sk, pk): generationKeys(keysize) Metoda vygenerovatKeys nabere velikost klíče a generujeKlíč sk je kesig:=sign(sk, message)Metoda sign bere zprávu, msg a erify yourrybody Anyosecret klíč, sk, asut a vydává podpis pro msg pod skify(pk, message, sig) Metoda ověření bere zprávu, podpis a ae isvalidbe truekey pk a fovalid podpisy musí být ověřeny))Podpisy jsou existenčně nezfalšovatelnéVšimli jsme si, že generovatKeys a sign mohou být randomizované algoritmy GenerováníKeys bylo skutečně lepší, protože by mělo generovat různé klíče pro různé lidi. Prozkoumejte dvě vlastnosti, které požadujeme od schématu digitálního podpisu ve více d

etaie první vlastnost je přímočará – že platné podpisy musí ověřit Pokud podepíšu zprávu pomocí sk, mysecret key a někdo se později pokusí ověřit podpis přes stejnou zprávu pomocí mé hospody

Kapitola 1: Úvod do kryptografie Kryptoměny pro kontrolu nabídky andrtiesfiat cus kontrolovat peněžní zásobu a je možné padělat V konečném důsledku pravidla pro vymáhání práva, která brání lidem frpeople Pokud Alice přesvědčí Boba, že mu zaplatila digitálním cple, neměla by být schopna centrálních bank, kryptoměny hojně využívají kryptografii Kryptografie připojuje matematický protokol

Než dokážeme správně porozumět kryptoměnámCat jsou notoricky jemné a komplikované na pochopení Naštěstí se bitcoin spoléhá pouze na efektivní studium kryptografických hashů a digitálních podpisů, dvou primitiv, které se ukázaly jako velmi, zavádějí složitější cchofy, které se používají v navrhované rozšířené úpravě Jakmile jsme se naučili nezbytné kryptografii, probereme některé ze sestavených kryptoměn Tuto kapitolu doplníme několika příklady 11 kryptografických hashovacích funkcí prvním kryptografickým primitivem, kterému budeme muset porozumět, je kryptografická hašovací funkce Ahash funkcionalita, tematická funkce s následným beofzefoJe to efektivně vyčíslitelné intuitivně to znamená že za provázek daru, ty

Výpočet doby výpočtu hash n-bitového řetězce by měl mít dobu běhu, která je o(n)na kryptografickém hash fube kryptograficky bezpečná, pokud má následující tři dodatkyPodíváme se podrobněji na každý těchto vlastností, abyste pochopili, proč se jedná o užitečnou funkci, která se takto chová, čtenář, který studoval kryptografii, by si měl být vědom toho, že theatment of hash functa tato kniha je trochu jiná standardní učebnice kryptografie Thenctions, ale taková, která bude užitečná konkrétně pro kryptoměny Vlastnost 1: Collision -odolnost První vlastnost, kterou potřebujeme, je odolná proti kolizi

nastane, když dva rozlišují stejný výstup AHsistant if nikdoFormálně Odolnost proti srážce: Musí být odolný proti srážce, pokud je možné najít twehodnoty, xa yatx≠y,yetH(x)=H(yObrázek 11 Kolize hash x a y jsou odlišné hodnoty , když zadáte do hašovací funkce H, pak si všimnete, že jsme řekli, že nikdo nemůže najít kolizi, ale kolize neexistují Ve skutečnosti víme, že kolize existují, a to díky sistringstingům konkrétní pevné délky, protože vstupní prostor je větší než výstupní prostor (ve skutečnosti tlame výstupní řetězec Ve skutečnosti podle principu rozškatulkování bude nutně velmi velký počet

možné výstupymožné vstupyObrázek 12 Protože máme zaručený počet výstupů, musí být alespoň jeden výstup, na který hashovací funkce mapuje více než jeden vstupNow, abychom situaci ještě zhoršili, řekli jsme, že musí být nemožné najít kolizi Přesto je třeba najít kolizi Zvažte metodu finollision pro hashovací funkci s 256bitovou výstupní velikostí: vyberte 2 odlišné hodnoty, vypočítejte hashchd zkontrolujte, zda dva výstupy vedou než možné výstupy, některé z nich musí kolidovat, když použijete metodu hashovací funkce výše je zaručeno, že najdeme kolizi, ale pokud vybereme náhodné vstupy a spočítáme je s vysokou pravděpodobností dlouho před 2+1 vstupy Ve skutečnosti, pokud náhodně vybereme pouze 2+1 vstupy, ukáže se, že existuje 99

8% šance, že se alespoň dva z nich srazí Skutečnost, že kolizi můžeme najít pouze prozkoumáním zhruba druhé odmocniny schopnosti známé jako narozeninový paradox V domácích otázkách na konci této kapitoly to prozkoumáme v více algoritmus detacollision-detection funguje pro každou hashovací funkci, ale problém s tím je samozřejmě v nejhorším případě 2250+1 krát a asi 22 tiputer vypočítá 10 000 hdde před tlodds, což znamená, že pozemský meteorolog takto viděl obecný goritmus najít hašovací funkci collisy Lze použít, protože tuto tezi nelze použít, stále může existovat nějaký jiný algoritmus, který dokáže efektivně najít kolizi pro afic hash funct.

H(x)=x modfunkce splňuje hashovací funkci, protože jde o vstupy výstupu s pevnou velikostí (256 bitů) a je efektivně vyčíslitelná. Tato funkce má však také efektivní metodu pro nalezení kolize. Všimněte si, že tato funkce pouze vrací poslední 256 bitů vstupu Jednou by byly hodnoty Obecná metoda detekce kolizí není v praxi použitelná, existují alespoň nějaké hashovací funkce pro metodu existuje taková measistant Nejsou zde však žádné hasctions, které by dokázaly obstát. kolize a veterináře neuspěly V některých případech, jako je stará hashovací funkce md5, která se po té, co je funkce yehe, považuje za zastaralou a vyřazenou z praktického používání A tak jsme se rozhodli věřit, že se jedná o digesty odolné proti kolizím Nyní, když víme, co je užitečné for HePokud víme, že dva vstupy x hashovací funkce odolná vůči andollision h mají různé hash, pak je bezpečné předpokládat, že x a y jsou různé – pokud někdo znal x a y, které jsou různé, ale mají stejný hash, který by porušil náš předpoklad, že Argument h is conflict resistantis nám umožňuje používat výstupy hash jako shrnutí zpráv Zvažte Secure Box, ověřený online systém ukládání souborů, který uživatelům umožňuje nahrávat soubory a zajistit jejich integritu tohoto souboru, a chce mít možnost ověřit, že soubor, který stahuje, je stejný jako ten, který nahraje

jedním ze způsobů, jak to udělat, by bylo uložit soubor, který stahuje, zatímco tato integrita funguje, může přímo použít místní kopii Hash bez kolizí pt a efektivní řešeníAlice potřebuje přepočítat hash staženého souboru a porovnat ho s jedním uložila Pokud jsou hashe stejné jako ten, který nahrála, ale pokud se liší, Alice může dojít k závěru, že se souborem bylo manipulováno, zapamatování si hashe umožňuje odhalit náhodné poškození souboru během přenosu nebo na serverech Secure Box, ale také záměrnou úpravu souboru. soubor serverem Takové záruky tváří v tvář potenciálně škodlivému chování jiných entitHash slouží jako souhrn pevné délky nebo jednoznačné shrnutí zprávy, což nám poskytuje velmi účinný způsob, jak si zapamatovat věci, které jsme již viděli, a znovu je rozpoznat, zatímco soubor může byly dlouhé gigabajty, hash má pevnou délku, 256 bitů pro hle To značně snižuje a v celé knize uvidíme aplikace, pro které je užitečné použít hash jako přehled zpráv

Vlastnost 2: Skrytí Druhá vlastnost, kterou od našich hašovacích funkcí požadujeme, je vlastnost hidinghiding, která tvrdí, že pokud dostaneme výstup hašovací funkce y H(x), není žádný problém vymyslet vstupní formulář Zvažte následující jednoduchý příklad: uděláme experiment, ve kterém přehodíme coire výsledek hodu mincí bylo, že hlavy šly oznámit hash řetězce „hlavy zjistěte, co byl řetězec, který byl hashován (brzy uvidíme, proč bychom mohli chtít hrát hry liketring"tails" a mohli vidět, který z nich dostali Andust o pár kroků, zjistili, co to byl řetězec, protože existovaly pouze dvě možné hodnoty ofx a pro protivníka bylo snadné je vyzkoušet obě v pořadí. aby bylo možné dosáhnout krytí, musí platit, že neexistuje žádná hodnota x, která je zvláště pravděpodobně v určitém smyslu velmi rozprostřená. Pokud je z takové množiny vybráno x, tato metoda Velká otázka zní: můžeme dosáhnout vlastnosti hiding, když hodnoty, které chceme, nepocházejí z rozšířené množiny jako v orrhaput thatad out by spread out Nyní můžeme být o něco přesnějšíwe meag (dvojité vertiadenotenotes concatenation) Skrytí hash fundhiding if: when a secret value r je vybráno z pravděpodobnostního rozdělení, které má vysokou min-entropii, pak je dáno h(r/x) je nemožné najít xformační teorii, min-entropie je měřítkem toho, jak předvídatelná outcd higlmin-entropie zachycuje intuitivní myšlenku, že rozdělení distribuce, která pravděpodobně nastane Takže, pro konkrétní příklad, pokud je r vybráno rovnoměrně ze všech řetězců, sat je 256 bitů řetězec byl zvolen s pravděpodobností 1/2256, wlApplication: Commitments

Nyní se podíváme na aplikaci skryté vlastnosti Konkrétně, co dělat závazek závazek je digitálním přijetím, když to uděláte, zavázali jste se k tomu, co je uvnitř obálky, ale „neotevřeli jste, i když“ zavázal jsem se k hodnotě, která zůstane před všemi ostatními utajena Později můžete otevřít obálku a odhalit hodnotu, kterou jste se zavázali dříve

sts of(com): =commit(msg, klíč) Funkce odevzdání převezme zprávu a tajný klíč při vstupu vrátí potvrzeníPlatné ověření(com, klíč, msg) Funkce ověření převezme klíč potvrzení a zprávy jej zadají vrátí true, pokud ceWBinding: Pro libovolnou hodnotu klíče je nemožné najít dvě zprávy, msg a msg'such thamsg msgand authentic(commit(msg, key), key, msg)==trueeme, jedna se zavazuje k hodnotě a publikuje odevzdání je analogické s položením zapečetěné obálky na stůl později, pokud chtějí zveřejnit klíč a hodnotu, msgmůže ověřit, že msg byla skutečně hodnota odevzdaná dříve, tato fáze je analogická s diktátem otevření obálky že thvelope Za prvé, daný com, závazek, někdo se dívá na obálku cae zpráva je Druhá vlastnost je, že je závazná, že když se zavážete k tomu, co je na velopu, nemůžete později změnit názor

To znamená, že je nemožné najít dvě různé zprávy, takže můžete napsat zprávu a pak později tvrdit, že jste se zavázali k jinéTak jak víme, že tyto dvě vlastnosti platí? Než na to budeme moci odpovědět, musíme prodiskutovat schéma Můžeme tak učinit pomocí kryptograowingového závazku schemcommit(msg): =(H(klíč /msg), keyo kde klíč je náhodný 256bitový vi· ověřit(com, klíč msg) ):= true if H(key∥com; false jinak vygenerujte náhodný 256-bihich, který bude sloužit jako když, pak vrátíme hash zprávy a budou se rovnat závazku, který viděli při vytváření instance commitu a ověření, stejně jako h(klíč l msg) pro com, pak tyto vlastnostiHkey∥msg, infeasib|eBinding: Pro libovolnou hodnotu klíče není možné najít dvě zprávy, msg a msg takové, že msg≠ msg'a H(key∥msg)=H (key∥msg

Vlastnost hiding závazků je přesně ta hiding property, kterou jsme požadovali pro naše haslfunkce. Pokud byl klíč vybrán jako náhodná 256bitová hodnota, pak vlastnost hiding říká, že pokud budeme mít přijatelnou zprávu z hashputu A ukáže se, že vazba vlastnost je implikována vlastnost hašovací funkce odolná proti kolizi, je-li hašovací funkce odolná, pak nebude možné nastavit hodnoty msg a msg' tak, že h(key msg) =h(key msg), protože takové hodnoty by byly, pokud h je hash funkce, která je kolizní a skrývá tento závazek, dává pocit, že bude mít potřebné bezpečnostní vlastnosti Vlastnost 3: Přívětivost k hádankám Třetí bezpečnostní vlastnost, kterou potřebujeme z hashovacích funkcí, je přívětivá

je první, jaká vlastnost je užitečná Přívětivost k hádankám, o hašovací funkci H se říká, že je přátelská k hádankám, pokud je pro každý možný n-bitový výstup vybráno k z distribuce s vysokou min-entropií, pak je časově neproveditelné výrazně méně než 2tuitivně ,to znamená, že ifts pro zacílení hashovací funkce vyjdou na nějakou konkrétní výstupní hodnotu y, že pokud existuje část vstupu, která je vybrána ve vhodně randomizované hodnotě wayt'difffinder, která zasáhne přesně tento cílAplikace: Hledání aplikace, sestavíme vyhledávací hádanku matematický problém, který je za účelem nalezení zkratek. To znamená, že neexistuje žádný způsob, jak najít platné řešení, než prohledání velkého prostoruHledat hádanku Aonsists of the puzzle-/D), selectedch thatH(id‖ x)∈je možné, že najdete formu hike∥H(klíč∥