vaše heslo = sha1("vaše heslo"', salt) = 3e83b6d863049a459b3bbbd3f833fb336682ec2c
V databáze nie je vaše heslo, ale len hash "3e83b6d863049a459b3bbbd3f833fb336682ec2c", ktorý sa pri prihlasovaní porovnáva.
Ak niekto získa údaje z databázy, tak vaše heslo nebude vedieť. Mohol by ale použiť nejaký slovník na generovanie a porovnanie, ale to by musel poznať aj tzv. salt.
A nakoľko môže získať aj hash a poznať aj salt, preto treba mať dostatočne kvalitné heslo.
A nezabúdať sa prihlasovať cez https :)
Když už, tak je to o tom, že jako *konkrétní algoritmus* hashe se většinou použije nějaký z obecně známých a dostupných, nejběžněji samozřejmě MD5 či SHAx (např. MySQL ve funkci PASSWORD používá dvojité SHA1) apod. Myslím, že tímhle zatěžovat původního tazatele by absolutně nemělo smysl.
Zvlášť když na volbě toho kterého algoritmu pro ukládání hesel na serveu z hlediska klienta, který se následně přihlašuje, se nic moc nemění.
Přesněji je to tak, že ona "transformace" je obvykle známa, dokonce bývá standardizována (např. RFC 1321: The MD5 Message-Digest Algorithm, RFC 4634 - US Secure Hash Algorithms atd).
Vtip je v síle příslušné matematické funkce (tj, jestli je dostatečně jednosměrná, odolná vůči kolizím atd.).
Vánoční vysvětlení stylem pro základní školu, na příkladu barviček :-):
* uživatel si zvolí (namíchá, ...) tajnou barvu (=heslo),
* určené množství v neprůhledné lahvičce předá administrátorovi,
* ten do ní přimíchá *svoji* tajnou barvu (=jednosměrná funkce),
* předpoklad: původní barvy nelze separovat (aspoň ne snadno),
* vzniklou směs (=hash) není nutno utajovat,
* směs uložíme,
* alternativně si pořídíme sešit, který nadepíšeme /etc/passwd,
* v něm povedeme seznam uživatelů, u každého pak mázneme štětcem namočeným do "jeho" směsi.
Ověření správnosti hesla se dělá stejným postupem:
* uživatel dodá svoji barvy,
* administrátor přimíchá zase svoji,
* porovná se, jestli vzniklá směs má stejnou barvu jako ta uložená,
* souhlasí = na vstupu byly správné barvy, uživatel je autentizován.
V zásadě máte pravdu - ten, kdo konkrétní účet spravuje, si z hesla vypočítá tzv. hash (jednosměrnou transformaci, kdy ze stejného hesla je vždy stejný "kontrolní součet", ale z oné hodnoty se nelze dostat k původnímu heslu).
Vtip je v tom, že onen správce účtu nikomu neříká, jakou transformací ta hesla prohání. Když se pak chcete přihlásit, zadáte své heslo v normální textové podobě, on ho prožene transformací, kterou používá a výsledný "kontrolní součet" porovná s tím, co má u vás uloženo v databázi. Pokud nesouhlasí, heslo správné nebylo. Pokud souhlasí, s největší pravděpodobností jste zadal správné heslo. Je to proto, že vždy existují hodnoty, které po prohnání transformací budou mít stejný "kontrolní součet" - to z principu fungování. Nemůžete libovolně dlouhé heslo beztrátově transformovat na např.128 či 256 bitů. Ostatně na tom je založena řada útoků, že se hledají tzv. kolize, resp. způsob, jak je cíleně najít.
No a protože vy nikdy nevíte, jakou transformaci správce účtu používá, nemůžete mu poslat rovnou ten "kontrolní součet". Navíc i kdybyste to věděl, tak si moc nepomůžete, protože kdyby Vám ten kontrolní součet někdo zjistil, přihlásí se úplně stejně jako s odkoukaným heslem :-)