Vylepšené ukládání hesel do databáze

2007-04-11 21:07 napsal Lukáš Havrlant

Protože jsem se začal trošku motat do programování a snažím se napsat nějakou první miniaplikaci, rozhodl jsem se občas sdělit svou myšlenku veřejnosti a trochu oživit tenhle chcíplý weblog. Nebojte, žádné velké myšlenky tady nebudou, protože nejsem velký programátor. To jen tak na úvod ;-).

Řešil jsem problém, jak nejlépe uložit heslo do databáze. Napadaly mne postupně tyto možnosti:

Text/plain → nejspíše nejhorší možné řešení, že ano. Pokud by se někdo naboural do databáze, byl bych v háji. Navíc by to nebylo čestné vůči případným uživatelům mé aplikace, kdybych se mohl kdykoliv podívat na jejich hesla.

Hash hesla → teoreticky nejlepší možnost. Už bych se asi vyhnul md5, není bezkolizní, což by v případě hesel zrovna ani moc nevadilo, ale hlavně už existuje dost tabulek s md5 hashema, takže pokud si uživatel nezvolil silné heslo, což mnohdy uživatel nedělá, mám šanci původní heslo získat. Jistým řešením je použít sha1. Nicméně je IMHO jen otázkou času, než se podobné tabulky budou vyskytovat v tak hojném počtu i pro sha1.

Opět hash, ale s trochou soli. Sůl je pevný řetězec, který přiřadíme k heslu uživatele a až poté uložíme jeho hash. Tímto by nám měl odpadnout problém se slovníkovým útokem, protože pokud si zvolíme sůl „$_ASgf6řč#“, je nepravděpodobné, že by se v něčí databázi vyskytoval hash pro řetězec „$_ASgf6řč#heslo“. IMHO je tohle nejlepší možnost.

Pokud nechcete vkládat stále stejnou sůl, můžete například vytvořit hash tak, že „zdvojnásobíte“ heslo – místo „marie“ budete hashovat „mariemarie“.

Poslední možnost se solí mi přijde jako nejvhodnější, jednak pokud se už někdo nedejbože dostane do databáze a k heslům, nemůže jen tak provést slovníkový útok a pokud nezná sůl, značně mu tím ztížíme, prakticky až znemožníme, útok pomocí brute force.

Tož tak.

Linkuj.cz!

Komentáře

11. April 2007, 23:56

Myslím, že použití soli je běžnou praxí. Já většinou jako sůl použiju třeba login nebo jméno uživatele či jeho část…

12. April 2007, 00:51

jojo, je to běžná praxe, případně můžeš udělat hash z hashe atp.
jinak plain text hesla jsou také někdy nutná (tedy ne plain text, ale nějaký XOR či jiná vratná funkce), někdy je prostě třeba to heslo znát (komunikace programu s jinými programy atp.

12. April 2007, 08:58

Presne tak ide o bežnú prax. Aj Linux podobým spôsobom ukladá heslá.

# juraj
22. April 2007, 21:56

ja to riesim kratenim hashu. md5 mi dava string o dlzke 32 znakov. ja si do $nove_heslo ulozim iba prvych 8 a poslednych 8 znakov. 16 znakov zo stredu tam proste „chyba“

# Wan-To
30. April 2007, 21:21

Jen poznamenám, že osolení nebo jakákoliv jiná úprava hesla nemá moc velký význam u open-source aplikací. Tam, kde jsou známy zdrojové kódy, budou nejspíše vidět i způsoby modifikace řetězce před hashováním. A mimochodem, říká se, že pokud bezpečnost aplikace stojí na uzavřeném kódu, tak aplikace bezpečná není.

4. May 2007, 09:57

Omluva za OT, ale momentálně nemám možnost mailovat, tak abych na to nezapomněl…

Některé RSS čtečky a IE7, Opera 9.2 (možná i další prohlížeče) vyhazují na RSS tohoto blogu chybové hlášky typu:

Operace byla dokončena úspěšně. Při zpracování prostředku http://atd.ha­vrlant.net/rss/ došlo k chybě. Řádek 7, pozice 15

49.915 17.910
--------------^

# Martin Trčka
6. May 2007, 11:35

Wan-To napsal: „Jen poznamenám, že osolení nebo jakákoliv jiná úprava hesla nemá moc velký význam u open-source aplikací.“

Myslím, že se pletete – použití soli má své výhody, i když je sůl „veřejná“ (stejně tajná jako výsledný hash). Pokud je pro každé heslo zvolena (např. náhodně) unikátní sůl, je celý systém více odolný proti útokům hrubou silou (např. rainbow tables), a je tu i výhoda, že stejná hesla s různou solí mají různý hash.

Pro podrobnosti a kontext viz Wikipedii:

Salt (cryptography)

(To byste nevěřili, kolik práce mi dalo, než jsem přes Texy! procpal ten odkaz do Wikipedie – Texy! zdá se nezvládá odkazy ukončené závorkou.)

# Jeremy88
7. May 2007, 13:14

Já osobně používám sha1(md5());

15. May 2007, 19:58

Tohle je běžná praxe, i když je pravda, že pořád dost programátorů nebo spíše rádoby programátorů je schopno ukládat všechno v plain textu.

Jinak jak zmínil Jeremy88, dobré je taky trošku kombinovat, to už by v tom byl čert, aby to někdo rozlouskl.

25. May 2007, 16:47

Hashovat hasla a vlatně jakákoliv citlivá data je u dobrých programátorů normální věc. Plain-text se na takovéto veci zásadně hehodí, to už můžete dát hesla na web ;-)

Jak ukládat citlivá data

# gofry
31. May 2007, 22:26

„Už bych se asi vyhnul md5, není bezkolizní,…“
Každá hashovacia funkcia je predsa kolizná.

31. May 2007, 22:30

11. gofry: Bezkoliznost neznamená, že funkce není „teoreticky bezkolizní“, ale že není technicky možné v reálném čase na ten kolizní řetězec přijít.

Pak se ještě koliznost dělí na další dva stupně:

1. stupeň říká, že nejsme schopni najít dva řetězce, které mají stejnou hash

2. stupeň říká, že nejsme schopni k pevně danému řetězci najít jiný řetězec, který by měl stejnou hash.

MD5 první podmínku nesplňuje, druhou ještě stále ano.

# gofry
31. May 2007, 22:34

Jj, máš pravdu, akurát som na to pozeral, takže beriem späť, čo som napísal ;-)

20. July 2007, 05:19

Panerai Blackseal PAM 183

On the PAM-183, or Blackseal, the counterfeiters found a model devoid of these features, and therefore easier to copy. The case design on the PAM-183 is clean and simple. Unlike the rest of the historic line, the Radiomirs have a screw-down crown with no crown guard. Also, it utilizes a pillow-shaped case instead of the standard Historic-modeled case of models such as the PAM-111.

There seems to be only one core maker of counterfeit Blackseals, as there seems to be only one variation. This watch is VERY accurate from the front, in comparison to the genuine model. In the watch profile that came along with this video you’ll see comparison photographs of a genuine Blackseal next to a counterfeit example. From the front they are nearly identical, differing really only in the band color. The counterfeit Blackseal also seems to have a slightly longer crown stem, resulting in the crown being a fraction of an inch farther from the case.

The dial on the Blackseal is actually a sandwich design. It has a black dial with the hour markers and numbers cut out to reveal a second, luminescent layer beneath. This counterfeit exhibits the same dial design, but has slightly less bright illumination when viewed in the dark. This is common to replica watches in general; they tend to have a weaker glow to their luminous elements than their genuine counterparts.

Fancy Dress Costumes Sports Watches Timex Watches Certified PreOwned Watches Gerd Weithase Boat & Marina Apparel Omega Longines TAG Heuer Rolex Certified Used Rolex Watch Bras and Lingerie Online Rolex Replica Casio Watches Skagen
Replica BookThe Replica Watch Report reviews over 30 watches with detailed analysis and over 500 color photographs. Watches reviewed include the Rolex Submariner, Rolex Sea-Dweller, Rolex Daytona, Rolex Explorer, Rolex GMT Master II, Day-Date, Panerai PAM-111, Omega Seamaster, and many more! Get your copy today!

Please check out our website:
fashionhause There are top quality of replica handbags for sell
with perfect weight, feel, and like the originals.or email us : info (at) fashi­onhause.com

[url=http://www­.fashionhause­.com]replica handbags[/url]

[url=http://www­.fashionhause­.com/forum/]Ro­lex forum[/url]

[url=http://www­.fashionhause­.com/links/]re­plica watches[/url]

[url=http://www­.yesreplica.com/]ro­lex replica[/url]

[url=http://www­.fashiontrends­.cn/]fake rolex[/url]

[url=http://www­.smokershops.com/]swiss rolex replica[/url]

[url=http://www­.tiffany-sterling-silver.com/]tiffany sterling silver[/url]

tiffany sterling silver

replica handbags

replica handbag

Rolex forum

replica watches

rolex replica

fake rolex

swiss rolex replica
Tiffany Atlas toggle bracelet

7.5 inch long.925 Sterling silver plated Tiffany Bracelet – Bracelets offer a wonderful expression of luxury, and have been a particular specialty of Tiffany's for decades. Our bracelets are selected from Tiffany's most fashionable models and carved to perfection with the utmost care. You'll find bracelets to match with rings or necklaces, or beautiful pieces to stand on their own. Over 150 illustrious years ago, Charles Lewis Tiffany commissioned a statue to be carved above the doors of his new boutique in New York City. The carving would come to represent the power, gracefulness and passion of Tiffany's jewelers. The artwork was of Atlas, an icon that has adorned the Tiffany name ever since. This collection celebrates that particular relationship, in the spirit of strength and elegance.

Tiffany-sterling-silver delights in the opportunity to offer our customers fine sterling silver rings, fake Tiffany necklaces, pendants, replica Tiffany bracelets, bands, brooches, replica Tiffany earrings and more, all at remarkably low prices.

Please check out our website:
http://www.tiffany-sterling-silver.com
Or email us:
Info (at) tiffany-sterling-silver.com

Louis Vitton replica handbag Manhattan PM delivered to anywhere

More commonly known as the „Uma Bag“ the Manhattan PM's chunky gold metal hardware meets the classic Monogram canvas to positively smashingly stylish effect. New in spring 2005, this Marc Jacobs design radiates his characteristic urban-feminine style. Classic Louis Vuitton Monogram canvas Taupe Alacantra interior Oxidizing cowhide leather trim Polished brass engraved hardware Date code and Louis Vuitton made in Paris heat embossed stamp * Comes with: Dust Bag * Care Book * Serial Number * Receipt Actual size:11''x8,3''x­5,5''

Please check out our website:
http://www.fashi­onhause.com There are top quality of replica handbags for sell
with perfect weight, feel, and like the originals.or email us : info (at) fashi­onhause.com

9. August 2007, 19:22

4. juraj: To je pěkná blbost, tím naopak hash oslabuješ pro případný brutal force…

# v6ak
31. August 2007, 12:06

„A mimochodem, říká se, že pokud bezpečnost aplikace stojí na uzavřeném kódu, tak aplikace bezpečná není.“
Naprosto souhlasím.
„Pokud je pro každé heslo zvolena (např. náhodně) unikátní sůl, je celý systém více odolný proti útokům hrubou silou (např. rainbow tables), a je tu i výhoda, že stejná hesla s různou solí mají různý hash.“
To taky používám. Pokud bude mít několik uživatelů stejné heslo, pak bude asi slabší a bude asi větší zájem jej rozlousknout… (získání více uživatelů, menší doba pro rozlousknutí)

Taky je dobré ukládat si typ hashe ke každému záznamu, aby šlo postupně přejít na jiný.

# Gringo
8. October 2007, 22:43

16. v6ak: Sloupec s typem hashe snad není problém založit při první změně typu (tzn. dokud je u všech hesel použit stejný typ).

Komentáře jsou uzavřeny