Portál AbcLinuxu, 10. května 2025 11:06

Dotaz: hashovaci funkce

10.9.2013 23:33 jenda
hashovaci funkce
Přečteno: 580×
Odpovědět | Admin
Ahoj,

nevim jestli je tohle vhodne tema, ale pokud by se nekdo nasle kdo by mi to vysvetlil tak budu rad. Moc mi neni jasne k cemu je v kryptologii hashovani. Ja to teda pochopil tak, ze takhle zasifruji treba nejakou zpravu a vystupem mi je naprosto nesrozumitelna zprava. Ale podle toho co jsem si precetl pote neni mozne (nebo je velmi obtizne) ziskat originalni informace, ktere jsem predtim zahashoval. Jelikoz v (a)symetricke kryptografii opet ziskam puvodni data, trochu se ztracim, k cemu to tedy prakticky slouzi, kdyz uz neziskam data v puvodnim tvaru. Mozna jsem si to jenom spatne vylozil, ale pusobilo to na me jako bezklicova varianta (a)symetricke kryptografie. Diky moc, mejte se!
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.9.2013 00:01 potato
Rozbalit Rozbalit vše Re: hashovaci funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hashování není šifrování,

Jde o to, že namísto zprávy se díváš pouze na její hash. Je-li hash kryptograficky silný, tak porovnání hashů v nějakém smyslu zastupuje porovnání celých zpráv.
Jendа avatar 11.9.2013 00:10 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: hashovaci funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hash se používá, když potřebuješ:
11.9.2013 01:22 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Par pouziti je popsanych treba tady:

https://en.wikipedia.org/wiki/Cryptographic_hash_function#Applications

Potom se pouzivaji treba v generatorech nahodnych cisel (ktery jsou hodne dulezity v kryptografii):

https://www.schneier.com/paper-yarrow.html

To pouziti je tam asi takovy ze do entropy poolu si ukladas "low quality random data" a az jich mas dost tak spocitas jejich hash, cimz ziskas "high quality random data". Ty potom muzes pouzit primo, nebo jako seed.

Jeste bych doporucil:

https://www.coursera.org/course/crypto

https://www.coursera.org/course/crypto2
Jendа avatar 11.9.2013 01:37 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: hashovaci funkce
Pozor! Kryptograficky bezpečná hashovací funkce automaticky neznamená, že výstup bude náhodný! Například funknce
def JHA(input):
  return "AAA"+SHA256(input)
je kryptograficky bezpečná (dokud je jen SHA256 bezpečná), ale zjevně její výstup není moc náhodný.

K extrakci entropie se používá entropy juicer.
11.9.2013 02:24 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
Ano znamena. Pokud ma byt hashovaci funkce bezpecna tak vystup by mel mit uniformni rozlozeni.

Jednotliva kryptograficka primitiva jsou prevoditelna, takze z bezpecne hashovaci funkce muzes udelat blokovou sifru, proudovou sifru, rng.

na dotaz "entropy juicer" jsem nasel jenom nesmysly tak nevim jestli se nejedna o vtip...

a ta funkce JHA je vtip celkem urcite :-)
Jendа avatar 11.9.2013 04:17 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: hashovaci funkce
Ano znamena. Pokud ma byt hashovaci funkce bezpecna tak vystup by mel mit uniformni rozlozeni.
Já chápu kryptograficky bezpečnou hashovací funkci tak, že garantuje, že ve výstupu bude alespoň n bitů entropie (přesněji, že spočítání kolize bude mít náročnost 2^n), ale že výstup může být klidně větší než n.

Například definice na Wikipedii pak o náhodnosti a uniformitě (celého) výstupu nemluví vůbec.

Ostatně, byly současně používané SHA designované with this in mind nebo je to jenom takový by-product?
11.9.2013 10:54 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
To je pravda ze pro nektery ucely by stacila omezena entropie ve vystupu.

Ale myslim ze v praxi to skonci na tom ze u digestu delky N se ocekava bezpecnost 2**N.

Treba u te funkce JHA(), kdyz odstranim ten prefix tak jsem v podstate vytvoril attack ktery snizi jeji bezpecnost o 24 bitu :-)
11.9.2013 08:04 Jose
Rozbalit Rozbalit vše Re: hashovaci funkce
Hasovaci funkce da vzdy pro stejna vstupni data stejny vystup, nepouziva se na kryptovani ale na podpisovani a overovani.
11.9.2013 10:34 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
Hasovaci funkce da vzdy pro stejna vstupni data stejny vystup,
Jakykoli algoritmus da vzdy pro stejna vstupni data stejny vystup.
nepouziva se na kryptovani ale na podpisovani a overovani.
Nepouziva se na sifrovani, ale kryptograficka primitiva jsou prevoditelna, takze z bezpecne hash funkce muzes vytvorit PRF a z PRF sestavit blokovou sifru. Viz Luby-Rackoff theorem:

https://en.wikipedia.org/wiki/Feistel_cipher
11.9.2013 10:51 axel
Rozbalit Rozbalit vše Re: hashovaci funkce
Jakykoli algoritmus da vzdy pro stejna vstupni data stejny vystup.

Odvazne tvrzeni:-)
11.9.2013 12:07 Jose
Rozbalit Rozbalit vše Re: hashovaci funkce
Hasovaci funkce da vzdy pro stejna vstupni data stejny vystup,
Jakykoli algoritmus da vzdy pro stejna vstupni data stejny vystup.
Plati jen pokud je PRN generator zavisly pouze na vstupnich datech algoritmu, coz ale pokladam za oslabeni sifry ( to plati samozrejmne jenom u sifrovacich algorimtu kde do sifrovaciho procesu vstupuje nahodne cislo )
11.9.2013 13:20 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
Vim ze je to trochu slovickareni, ale jakykoli nahodny data muzes povazovat za vstup algoritmu. Takze pokud bude dostavat stale stejny "nahodny" data tak by mel davat stejny vysledky.
11.9.2013 12:09 Sten
Rozbalit Rozbalit vše Re: hashovaci funkce
Jakykoli algoritmus

Jakýkoliv deterministický algoritmus. Takové OpenSSL v Debianu by mohlo vyprávět.
Jendа avatar 11.9.2013 13:26 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: hashovaci funkce
Pokud do „stejných vstupních dat“ zahrneme i seedy získané odjinud, tak to taky platí…
11.9.2013 14:23 axel
Rozbalit Rozbalit vše Re: hashovaci funkce
Pokud za vstup budeme povazovat "vsechno", tak uz tvrzeni postrada smysl, protoze "vsechno" nelze definovat a tedy nelze zarucit (ani overit), ze pri dvou bezich algoritmu bude "vsechno" stejne. Ne kazdy stroj (ani realne existujici, natoz hypoteticky) ma vlastnosti topinkovace, na kterem jakoby zadny nedeterminismus neexistuje.
11.9.2013 15:01 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
Vsechny vstupy algoritmu se daji definovat snadno. Alo to uz se dostavame k filozoficky debate v ktery stejne nic nevyresime...

Ja osobne povazuju jakoukoli nahodnost za vstup algoritmu, ktery potom pracuje deterministicky.
11.9.2013 16:47 axel
Rozbalit Rozbalit vše Re: hashovaci funkce
A ja osobne povazuju kolobezku za motorove vozidlo. Existuje obecne prijimany pohled na to, co je to algoritmus, jeho vstup a determinismus/nedeterminismus pri jeho provadeni. Pro nektere ucely se pak tyto pojmy zcela formalizuji (napr. zkoumani slozitosti algoritmu), jinak by se o nich nedalo premyslet, publikovat, komunikovat atd. Pohled ze "jakakoli nahodnost" je vstupem algoritmu je v tomto ohledu novatorsky, mozna se prosadi, mozna ne... Myslim si, ze spis ne.
11.9.2013 17:04 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
A ja osobne povazuju kolobezku za motorove vozidlo.
to hodne vysvetluje ;-)
Existuje obecne prijimany pohled na to, co je to algoritmus, jeho vstup a determinismus/nedeterminismus pri jeho provadeni.
nedeterminismus je neco jinyho nez nahodnost.
Pohled ze "jakakoli nahodnost" je vstupem algoritmu je v tomto ohledu novatorsky
diky za uznani. Jestli bych si to nemel patentovat... :-)

Ale obavam se ze zas tak novatorsky to neni. Viz treba wikipedia:
A randomized algorithm is an algorithm which employs a degree of randomness as part of its logic. The algorithm typically uses uniformly random bits as an auxiliary input
11.9.2013 20:19 axel
Rozbalit Rozbalit vše Re: hashovaci funkce
nedeterminismus je neco jinyho nez nahodnost

Vyborne. Plati tedy predchozi tvrzeni Jakykoli algoritmus da vzdy pro stejna vstupni data stejny vystup pro nedeterministicke algoritmy?
11.9.2013 23:04 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
Priznavam ze v tom tvrzeni jsem pod "algoritmus" mel na mysli deterministicky algoritmus, protoze to se tim vetsinou mysli.

Nicmene se to da zobecnit i na nedeterministicke. Kdyz napr. vezmu kvantovy pocitac jako typicky priklad nedeterministicke architektury, tak pri stejnych vstupech vzdy dostanu stejnou vyslednou vlnovou funkci. To ze tu funkci potom nejsem schopen primo zmerit a musim delat ruzny harakiri je uz jina vec...
11.9.2013 21:47 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: hashovaci funkce
Jakykoli algoritmus da vzdy pro stejna vstupni data stejny vystup.
Programoval si někdy? :-)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
11.9.2013 23:12 ::: | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: hashovaci funkce
:-) Taky uz jsem se setkal s programama ktery fungujou jenom ve ctvrtek a za uplnku.

Moje soukroma teorije je ze algoritmus je sice deterministicky, ale muj PC si uvedomil sam sebe a zacal v nem skodolibe delat male tezko odhalitelne zmeny... :-)
xkucf03 avatar 11.9.2013 23:15 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: hashovaci funkce

Problém je spíš v tom, že uživatel si není vědom1 všech vstupů – proto mu výstup může někdy přijít náhodný a program nedeterministický.

[1] což nemusí být úplně jeho vina – program může být napsaný dost záludně, tak, že některé vstupy nejsou na první pohled vidět, nedají se intuitivně odhadnout nebo jsou úplně nesmyslné

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
11.9.2013 08:20 Filip Jirsák
Rozbalit Rozbalit vše Re: hashovaci funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak už psali ostatní, hashování není šifrování. V souvislosti s bezpečností ale někdy nepotřebujete celou zprávu, ale stačí něco kratšího jednoznačně vytvořeného z původní zprávy. Důležité je akorát to, aby k existujícímu hashi nebylo možné snadno zkonstruovat (libovolnou) zdrojovou zprávu (zdrojových zpráv je nekonečně mnoho, hashů je omezená množina, takže existuje nekonečně mnoho zpráv, které vedou na jeden a ten samý hash). Hash se používá tak, že se spočítá dvakrát ze dvou různých zpráv nebo ve dvou různých časech. Pokud jsou oba hashe shodné, je vysoká pravděpodobnost (u každé kryptografické hashovací funkce je ta pravděpodobnost známá), že i ty dvě původní zprávy jsou shodné. Hodí se to např. v těchto případech:
11.9.2013 11:45 ikar
Rozbalit Rozbalit vše Re: hashovaci funkce
je tedy crc hash?
11.9.2013 12:11 Filip Jirsák
Rozbalit Rozbalit vše Re: hashovaci funkce
V obecném smyslu je to hash. Ale není to kryptografický hash, protože je velmi jednoduché pro daný CRC vytvořit nějakou zdrojovou zprávu.
11.9.2013 12:11 Sten
Rozbalit Rozbalit vše Re: hashovaci funkce
Je, i když není kryptograficky bezpečný
Jendа avatar 11.9.2013 13:31 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: hashovaci funkce
Pak i když budete používat na dvou webech stejné heslo, hash bude jiný, a nebude možné ani předpočítat univerzální duhovou tabulku.
Nutno podotknout, že to sice zabrání útoku při ukradení databáze, ale heslo je pořád vidět v okamžiku, kdy ho uživatel posílá - když se přihlašuje. A v ten okamžik si ho může správce nebo útočník někam bokem poznamenat. Protokoly na prokázání se, při kterých se heslo protistrana nedozví nikdy, existují, ale jsou podstatně složitější.
11.9.2013 20:07 Filip Jirsák
Rozbalit Rozbalit vše Re: hashovaci funkce
Heslo při posílání může být vidět a nemusí. Protokoly jako NTLM nebo HTTP Digest mi nepřipadají podstatně složitější -- stejně někdo musí z hesla správným způsobem udělat hash, akorát jde o to, zda to udělá klient nebo server.
11.9.2013 11:07 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: hashovaci funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odporúčam Cryptography I.
11.9.2013 12:50 lofcek
Rozbalit Rozbalit vše Re: hashovaci funkce
Ja to skusim len kratko: Hashovacia funkcia je taka funkcia, ktora vypocita zo vstupnych dat lubovolnej dlzky vystup pevnej dlzky (zvycajne 192, 256, 512 bitov) a to tak, aby bolo mimoriadne narocne (prakticky nemozne) najst take dve vstupne spravy, ktore maju rovnaky vystup.

To sa potom pouziva pri podpisovani. Okrem ineho aj pri podpisovani certifikatu. A to je to miesto kde stretavaju asymetricke sifry s hasovacimi funkciami.
xkucf03 avatar 11.9.2013 13:07 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: hashovaci funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin

Někteří lidé bohužel považují hashování za druh šifrování – říkají např. „to heslo je zašifrované pomocí MD5“ – a pak to vede k těmto zmatkům. Někdy se říká „jednosměrná šifra“ což je ale stále zavádějící a podle mého špatně.

Hashování je jednosměrná funkce. Jejím definičním oborem (vstupem) je pole bajtů o libovolné délce. Jejím oborem hodnot (výstupem) je pole bajtů1 s fixní (a malou) délkou.

Je logické, že to nemůže být prostá funkce – pro různé vstupy může být výstupem stejná hodnota (hash). Tyto kolize z principu musí existovat.

Dobré hashovací funkce se vyznačují tím, že je tyto kolize velmi náročné najít. Když znáš hash, mělo by být prakticky nemožné najít původní vstup – mělo by to být tak výpočetně náročné, že to se současnou technikou nikdo nedokáže. A i kdyby (jednou) dokázal, z principu najde jen jeden z mnoha možných vstupů – nemá jistotu, že je to ten původní, ze kterého byl hash vypočten. (proto „jednosměrná funkce“).

Další dobrou vlastností je to, že když se vstup změní byť jen nepatrně (třeba o jediný znak/bajt), hodnota hashe se změní zásadně a je to vidět na první pohled (např. c105364f1a847c07860ad7bd9d23eef0 vs. 03f02c6d299c70dcc8d23d14d0c8466d).

Praktické využití:

[1] někdy chceš mít vstup textový (např. heslo) a výstup taky (např. aby to šlo vytisknout – Base64, Hex), takže musíš hashování obalit funkcemi na převod mezi textem a bajty – ale to nic nemění na tom, že samotná hashovací funkce pracuje jen a pouze s bajty, nějaká textová reprezentace se jí netýká
[2] my nebo útočník, který by ukradl naši databázi

Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.