Neco lepsiho nez md5

zbi:
"Co máte tak super tajného na vašich stránkách na freehostingu, že je vám md5 málo?" Že by šlo o národní bezpečnost? Ne, ale pokud máš nějaký registrační systém, ve kterém sbíráš osobní údaje o lidech, tak je celkem příhodné mít je aspoň trošku zabezpečené.

"nikdo se nezabýval tím, jak získat ten hash." Možností je mnoho; od špatně napsaných stránek (PHP a SQL injection a spol a ne že by jich tady nebylo požehnaně ;) až po použití hrubé síly.

Já osobně s tím problémy nemám, protože používám vlastní třídu (nepůjčuju), která je založená na jednoduchých operacích s řetězcem (prodloužení, rozsekání, přeházení, obrácení, složení, převody čísel tam a zpět, ...) a na tom, že nikdo neví, jaká operace je prováděna.
Takže třeba pro inspiraci číslo 2006 se mi překóduje na M7:wiZ
Toto už je jiná debata. A to o celkové bezpečnosti. Na freehostingu se neprovozují kritické aplikace (eshopy, internetbankingy), kde je velmi důležitá bezpečnost. Pokud o někom třeba v rekačním systému ukládám login, zahešované heslo, jméno a email na freemailu, tak o co jde?

Já osobně na žádný pochybný server nezadávám při registraci pravé údaje a mám na to speciálné emailovou schránku, kam potvrdím existence emailu. To jsou typu serevru, kde se dá stáhnout třeba nějaký driver pro atypický hardware a je třeba se registrovat.

Ano teoreticky existují způsoby, jak využít, nedokonalou aplikaci (injection, skenování paketů s otevřeným heslem, keylogger), ale v praxi...? Proč by to někdo na freehostingu dělal?

Tedy md5 na freehosting považuji za dostatečný (samozřejmě ne 100% bezpečný, což není nikdy nic).

PS. Četl jsem nějakou studii o bezpečnosti na internetu. A víte co byla největší díra? Chování uživatelů: hesla a loginy si nechávají uložené v prohlížeči, v emailu, v kancelářích na lístečku nalepeném na monitoru.
zbi (knizky.unas.cz)
ano, to je pravda
sha1($login.$heslo)
sha1(sha1($login.$heslo))
jeste se doporucuje zaskrtavatko pro hlidani IP
sha1(sha1($login.$heslo.$ip))

sha1(sha1($login.$heslo))
to vydrzi o chvilku dele nekoho napadne zkusit nasobne sha1
a jestli ho to napadne, tak protoze sha1 vygeneruje konkretni retezec, ktery uz muze byt jen konkretne zahashovany, tak kolizni agoritmus by mohl primo generovat prvni kolizi a snad i rychleji, diky omezenosti sha1 ?

"ale nikdo se nezabýval tím, jak získat ten hash"
jak uz jsem psal, google javascript sha1 md5
http://pajhome.org.uk/crypt/index.html
predevsim je dulezite uz samotne heslo zacryptovat javascriptem, protoze wifi signal se da krasne odchytavat a nezasifrovane heslo uz pri logovani je mnohem jednodussi odchytit nez cokoliv jineho.

Soucastne to zodpovida dotaz
zbi (knizky.unas.cz)
"jak získat ten hash"

Velice snadno :) Vemes notebook, nainstalujes asi 100k soft a nechas si zobrazovat vsechny inetove transakce v signalu nejake nejblizsi stanice.
Nejenze zishas ten hash, ale i heslo pri logovani a muzes is cist nezasifrovane maily, atd, atd ... pristupove kody do banky, protoze bankovni soft delali amateri a proste nemaji na strance sifrovani hesla jeste pred odeslanim :)
V podstate se tak muzes velice rychle napakovat na konte ve svycarsku :)
peta: můj Internet Banking dělali profíci (snad :), takže se přihlašuji na https, takže ti odposlech mé komunikace bude k ničemu ;)
Tom (manual.wz.cz)
oki, ztohoto pohledu je vetsina programu nezabezpecenych nijak, vyjimka je https, mno :)
Ale, kdyz to nekdo naboura, tak pak by urco pomohlo i sifrovani pred odeslanim. A to se uz nevidi skoro vubec.
Peta: Ten skript uz zial nemam, a ta stranka uz bola zrusena. Prezeral som si ten js kod (ktory bol mimochodom umiestneny priamo v zdrojovom kode prihlasovacej stranky - nie v subore .js). Nepovazujem sa za odbornika, ale javascriptu celkom rozumiem. Myslim ze tam bolo dokonca v komentaroch aj meno firmy, ktora ho vytvorila. Aj ja som si vedomy nevhodnosti js na zaheslovanie stranky - mozno sa jednalo len o primitivne zabezpecenie stranky (nebola to kriticka aplikacia), no kazdopadne nedokazal som z kodu vycitat heslo. Mozno to nebolo ani tak "sifrovacim algoritmom", ako skor neprehladnym kodom a tym obrovskym polom znakov.

Pouzitie https je samozrejme najlepsi sposob zabezpecenia komunikacie, ale zase nie kazdy freewebhosting ho musi mat. Preto som sa trochu zaujimal aj o ine sposoby, hlavne sifrovanie na strane klienta, len skoda ze Javu neviem :-(
4-b.xf.cz: to heslo bolo "majky"? lebo, som sa nedostal na tvoj ucet cezen, ale dekryptuje sa to ako majky :)
Nějak to tady utichlo. Zkusil jsem majky vložit do md5(), a skutečně vyšel ten zhora uvedený řetězec čísel
(82c8a9f536794df3d36cdc001f583f4).
Tak buď si z nás někdo dělá srandu, ale jestli ne ta jsme v p*li ! Potom ale co s tím?
btw dajte este nieko sem svoje heslo ak neverite :) alee nemente ho :)
radek: "Potom ale co s tím?" Dle mého názoru MD5 na 99% místních (tj. na wz.cz) aplikací bohatě stačí.
Pokud by jsi ale nutně potřeboval nějakou opravdu "bezpečnou" funkci, tak ti doporučuji napsat svou vlastní a důsledně jí tajit. Já mám na šifrování taky svou vlastní funkci.

Peta: hele, tak mě napadá, že to tvé šifrování u uživatele je celkem k ničemu:
dejme tomu, že jsi hacker a posloucháš můj AP. Já otevřu http://www.adresa.cz/login.htm, vyplním login, heslo a stisknu tlačítko "Přihlásit". JS heslo prožene MD5kou a odešle na server. Ty tedy zachytíš login, hash hesla, referer stránky a cíl formuláře. Pokud budeš hacker co k čemu, tak ti bude divný, že bych měl takovýhle heslo a že bych ho vyplňoval při každém přihlášení. Takže mrkneš na přihlašovací formulář, zjistíš která bije, uděláš si parazitní formulář, který heslo už MD5 neprohání, ale místo hesla vyplníš jen jeho hash, který jsi zachytil, odešleš a server nemá šanci poznat, zda jsi hacker nebo jo. Takže tuto cestu bych viděl jako dost nevhodnou a když už je tedy někdo tak paranoidní, tak ať se přihlašuje jen skrz https a bude mít klid.

tom@sqo: vzhledem k tom, že (jak jsem psal výše) k šifrování používám vlastní funkci, tak ti sem moje helso klidně napíšu a budu mít klidný spaní, protože ti k jeho probourání jen tak nějaká ulita nepomůže: 7D:ap5rO1q010Z:eu
Tom (manual.wz.cz)
Ano, muzes odchytit hash a pouzit ho, ale k cemu?
To heslo se samozrejme kontroluje jeste na serveru.
a kdyz do hesla pripojis IP na serveru, protoze ucasnik bezpecne komunikace zaskrtl
jmeno [...........]
heslo [...........]
[x] heslo md5 JS
[x] IP adresa
tak ti samotny hash bude na 2 veci, kdyz si server overi tvou IP
a pak je tu zabezpeceni s generovanim nejakeho kodu stranky do session nebo formulare (nevim, kde jsem to ted cetl)
Ale nerikam, ze je problem nasimulovat IP nebo mozna i ten kod do stranky.

Tom (manual.wz.cz)
7D:ap5rO1q010Z:eu
vypada to jako base64 (jen misto +/ pouzivas : a jiny znak) a dal by se videlo :)
Peta:
Tak teď jsem tě vůbec nepochopil, prosím vysvětlit "po vidlácku" :)
Koukal jsem na internet a našel jsem něco na tomhle principu:
mám formuláč s políčky LOGIN a HESLO. form má nastavenou událost onsubmit="prozen_heslo_MD5kou()". Obsah políčka HESLO se vezme, nechá se z něj vygenerovat MD5 hash a ten se odešle na server místo plain hesla.
Na serveru se to potom kontroluje:
a) pokud měl uživatel zapnujtej JS ($_POST['heslo'] je už v hashi), zkotnroluje pouze:
if($_POST['heslo'] == $hash_z_DB) {/* pokračuj */}
b) pokud uživatel JS zapnutý neměl ($_POST['heslo'] je v plain textu) zkontroluje to takhle:
if(md5($_POST['heslo']) == $hash_z_DB) {/* pokračuj */}

Tudíž z toho logicky vyvozuji, že pokud někdo po cestě zaznamená hash, tak si s pomocí HTML vytvoří podobný formulář jako máš ty (jenom místo orig. hesla zadá hash a ten už funkcí neprohání) a přihlásí se.

Jedině co, tak by jsi musel formulář generovat dynamicky a pro každou IP a každý požadavek vygenerovat UNIQID, který by jsi potom kontroloval.
Bral jsem to z této stránky: http://pajhome.org.uk/crypt/md5/

PS:base64 vůbec nepoužívám. Ty úseky před (7D) a za dvojtečkou (eu) jsou generovány úmyslně, ale jejich význam ti nepovím ;)
Neco lepsiho nez md5? Ted me napadlo tohle :)

$xx = md5('neco');

$xxx = md5($xx);

ale nevim co to udela a jestli by to vudec fungovalo :)
2Zbi: Nevim, proč tu větu, že se to PRÝ dá probourat během půl minuty považuješ za perličku. Kdyby sis přečetl, jak ta diskuse pokračovala, tak bys zjistil, že jsem psal, že o tom vím prd. A když o něčem něco nevím a jenom jsem to někde přečetl, tak se většinou používá slovo "prý".

Jinak tys mě ale taky docela pobavil. Jsi první člověk, kterej kroutí hlavou nad tím, že na serveru, kde má svoje internetový stránky se to snaží co nejlíp zabezpečit:-). Kdyby ti je někdo pravidelně mazal, tak bys nadával, že to tu je blbě zabezpečený...
Mám na WZ několik stránek a běží bez problémů několik let. NIKDY mi nebyly smazány. Parvděpodobně to bude tím, že dodržuji pravidla. Každou chvíli tady někdo brečí, že mu admin nečekaně smazal stránky a pak se přijde na to, že skutečně porušoval pravidla. Rozhodně bych nenadával na špatné zabezpečení.

Zajímaly by mě detaily - co je na WZ špatně zabezpečeno?
zbi: ChristmssPoo tím "pravidelně mazal" asi myslel něco jako že se ti do účtu někdo (hacker :) bude pravidelně nabourávat a mazat ti tvoje výtvory.

Z pohledu bezpečnosti je WZ dle mého soukromého názoru zabezpečené celkem dostatečně, jedninné, co považuju za problém je ten Správce souborů, protože pokud opravdu čas od času míchá účty, tak je to celkem slušný bezpečnostní riziko ;) Představ si, že si nějakej amatér chce aktualizovat stránky v tom "editoru ve Správci", napíše tam něco, uloží a najednou má místo požadovaného souboru obsah tvého souboru s připojením k DB. Dobrý, viď?

ChristmasPoo: 'A když o něčem něco nevím a jenom jsem to někde přečetl, tak se většinou používá slovo "prý".' Nezapomeň, jedna paní povídala ... ;)
TO (tomasko.wz.cz):
Ano, to heslo bolo "majky".... Ale jeasne ze som ho zmenil preto ti neisiel login... Takze co teraz? MD5 je zlomene... :-(( Idem si robit vlastnu funkciu...
Inak (tomasko.wz.cz) mohol by si popisat ako pracovala ta utilitka s ktorou si zistil moje heslo (nechcem jej url kde sa da stiahnut a ani meno, len povedz princip)? Kolko ti to trvalo? Trvalo by to dlhsie alebo bolo by to zlozite zistit keby som mal silnejsie heslo, napriklad: "wtretmajkyfsdafg" ?
Tady to máš i s odkazy na weby, kde zadáš hash a on se pokusí najít kolizní řetězec: http://cs.wikipedia.org/wiki/MD5
Autor: Tom (manual.wz.cz)
jmeno [...........]
heslo [...........]
[x] heslo md5 JS
[x] IP adresa

1. takze prvni X provede, co jsi popsal. Pred odeslanim zasifruje heslo do MD5.
Toto by slo delat bez toho zaskrtavatka na onsubmit automaticky.

2. Jenze pak je tam to spatny s porovnavani s databazi.
To by slo resit treba zasilanim IP a s db porovnavas treba:
$md5.$ip / md5($heslo).$ip
md5($md5.$ip) / md5(md5($heslo).$ip)
Slouzilo jen k tomu, aby nebylo mozne precist "text" hesla pri odchyceni transakce, coz mi prijde za velice uzitecne.

3. A jeste jsem na jedne strance videl generovat skryte policko dalsim md5(), kterym se overovala platnost stranky s hodnotou v session.

Osobne https povazuji za stejne bezpecne, jako cokoliv jine. Jen amatersky je to hodne nepristupne. Kdyz by doslo na vec, staci zavesit parazitni program do procesu, ktery ulozi HTML stranku pred odeslanim na server. Cili neco takove jako mezi-sluzbu, nazveme ji treba proxy :)
>> staci zavesit parazitni program do procesu, ktery ulozi HTML stranku pred odeslanim na server.

je videt ze nekdo nechape jak https funguje. sifrovani provadi klient, takze nejaky ukladani na proxy ti nepomuze
Peta: jo aha ... ale to potom krutě omezuje možnosti přihlášení, protože potom se uživatel musí přihlásit jen z IP adresy, ze které bylo generováno heslo.

O tom HTTPS: poslouchání "po cestě" je ti, jak psal Mike k ničemu, protože HTTPS pracuje na principu asymetrického šifrování, kdy si při prvním spojení server s klientem vymění certifikát a potom už si spolu povídají šifrovaně (každý odeslaný i přijatý bit je zašifrovaný náhodným řetězcem, který se vygeneruje při výměně certifikátu)
A tak mě napadá, možná že by stačilo, aby se heslo zašifrovalo pomocí IP adresy a nějakého UNIQID, které by server vygeneroval. To by potom mělo být dostatečně bezpečné i proti některým zvědavcům. Teď jen nějak vymyslet JS funkci, která by uměla například toto: var a = "Hatlamatla"; var b = "255.255.255.255"; => var c = "H28kBjdh8pOkHnW"; kde A je heslo, b je IP a c je výsledný řetězec, který se pošle na server.
zbi: Myslel jsem to přesně tak, jak psal Tom. Podivoval jsem se nad tím, že se ti zdá WZ "zbytečně moc" zabezpečený. Žádný výhrady k bezpečnosti WZ nemám, mně stránky taky nikdy nikdo nesmazal.

Tom: Tak s tím správcem souborů je to drsný;-)... jinak

'ChristmasPoo: 'A když o něčem něco nevím a jenom jsem to někde přečetl, tak se většinou používá slovo "prý".' Nezapomeň, jedna paní povídala ... ;)'

to "nezapomeň, jedna paní povídala" bylo mně? Právě proto že jsem nevěděl, jestli to mám z důvěryhodnýho zdroje, tak jsem to "prý" použil... jestli to ale bylo vysvětlení pro zbi, proč jsem ho tam dal, tak to potom jo;-)
Ssl je sice bezpečné, ale kdo z vás si pamatuje, jaký má wz.cz fingerprint nebo certifikát? Když někdy v listopadu seznam.cz prošel certifikát, kontroloval si někdo ten nový? Jak můžeš vědět, že to, co považuješ za certifikát wz.cz je skutečně webzdarma, když je podepsán cekitem, což není žádná certifikační autorita? Ví někdo, podle čeho ten podpis ověřit? SSL je bezpečné, dokud si uživatel dává striktní pozor na certifikáty (a správce není lajdák).

Lepší hash? Php5 podporuje více hashů a tak jestli se php5 dočkáme, tak bude třeba whirlpool :-)
Autor: Tom (manual.wz.cz)
"uživatel musí přihlásit jen z IP adresy, ze které bylo generováno heslo"
ted presne nechapu. Ale jde o to, ze si uzivatel muze/nemusi zaskrtnout, jestli se bude prihlasovat s kontrolou IP nebo ne. je to volba pri logovani, aby nenastal pripad, ze ti odejde server a ted, jak se prihlasis na stejnou IP u souseda?

Mike (specialfx.xf.cz)
Ten parazitni program lze zavesit na tvuj komp a odchytavat, co do stranky vyplnujes, pripadne, jake mackas klavesy.

Non_E (rada.borec.cz)
"tak jestli se php5"
php5.cz ?