Autor Zpráva
martin20a
Profil
Ahoj,

potřebuji následující věc ... budu mít řetězec třeba $text = "Hello world!" ... tento řetězec potřebuji hashnout (zašifrovat).

Původně jsem to chtěl dělat za pomocí hesla a při změně hesla by bylo potřeba zadat původní, pomocí něj by se 'odhashovali' a novým opět 'hashli'. Jenže by nastal problém při zapomenutém heslu, jelikož heslo hashuji přes sha256, tak bych se k tomu původnímu nedostal. Dala by se sice použít, že jako heslo bude právě hashnuté heslo, ale to zas ztrácí tu bezpečnost.

Takže další nápad byl, že uživatel dostane náhodnou posloupnost znaků, což bude sloužit jako to hashovací heslo, jenže opět je problém s tím, že se dá zjistit z databáze.

A další možnost mě zatím nenapadla.

---

Další věc je čím ty data hashovat, našel jsem, že je možnost to dělat přes mcrypt viz viz zde. Takže se chci zeptat jestli se to dá nějak jinak a co je lepší. Jen radši doplním, že ten $text nebude argument pro hashování, budou to proměnná data.

---

Můj závěr je, že ten kdo by znal můj algoritmus pro způsob hashování by neměl problém se dostat k datům. Takže bych chtěl nějak toto ošetřit, což asi nepůjde. Takže by ještě mohla být možnost nějak zašifrovat algoritmus, ale s touto problematikou sem se ještě nesetkal, takže to je jen tak od boku.

---

Jde mě o to aby ta data nebyla čitelné v databázi, což mcrypt zajistí. Ale zároveň aby se to hash heslo nedalo zjistit z databáze což už bude horší. Zvlášť když se musí brát v potaz, že to hash heslo může uživatel zapomenout a pak nesmí přijít o data.


Díky :-) Doufám, že jste mě pochopili.
panther_
Profil *
martin20a:
nechce se mi odpovídat na celý dotaz, odpovím na ten konec, který asi objasňuje celý problém.

Ale zároveň aby se to dešifrovací heslo nedalo zjistit z databáze což už bude horší.
nešifrovat, ale hashovat.

heslo může uživatel zapomnět a pak nesmí přijít o data.
pak si požádá o nové, ty nějaké náhodné vygeneruješ a on si ho následně změní.
martin20a
Profil
panther:
ok, změním na hashovat. Nicméně jsi mně neporadil nic nového a zřejmě jsi nepochopil tu podstatu problému. To že vygeneruji nové je samozřejmé, ale jde mně o to, že když budu hashovat data, kde bude jako paramatr jeho heslo => bez toho hesla to 'neodhašuji'. A při ztrátě hesla se tedy k těm datům už nikdo nedostane, když heslo je hashováno pomocí sha256 :-)
panther_
Profil *
martin20a:
bez toho hesla to 'neodhašuji'
ano, to je přeci podstatou hashování, ne? Útočník, který má hash hesla neví o původním hesle nic a není jak jej zjistit.

A při ztrátě hesla se tedy k těm datům už nikdo nedostane, když heslo je hashováno pomocí sha256
při ztrátě hesla se právě vygeneruje nové heslo, s kterým se k datům dostaneš.
Joker
Profil
panther:
Řekl bych, že martin20a má jiný problém. Jestli to správně chápu, existují nějaká data, která chce ukládat šifrovaná. A jako šifrovací klíč používá heslo uživatele.

martin20a:
Jestli to dobře chápu, jsou to protichůdné požadavky.
Logicky buď šifrovací klíč má jen uživatel a nikde jinde uložený není, pak pokud ho ztratí, tak (překvapivě) nikde jinde uložený není.
Nebo je šifrovací klíč uložený ještě někde odkud ho jde přečíst kdyby ho uživatel zapomněl, pak ho (překvapivě) jde přečíst z toho místa, kde je uložený.
martin20a
Profil
panther:
Možná se mýlím, ale měl jsem za to že při tom hashování přeci je tam ten řetezec nebo tedy heslo, že se v podstatě heslo a řetězec spojí a zakóduje a pak se bez toho stejného hesla k těm datům nedostaneš. A když změníš heslo (při zapomenutém) tak potřebuješ data nejdřív odhašovat starým heslem aby byly jako klasický text a pak novým heslem zaheshovat => že to nebudu moct odhašovat, jelikož se nedostanu ke starém při generování nového hesla.


Joker:
přesně jsi mi potvrdil mojí domněnku, že chci něco co není možné, takže to budu muset udělat jednou (a nebo obdobou) cestou z tvých variant. Díky za názor

A zeptám se tě tedy jak bys to udělal ty? Asi zvolím tu verzi že to hash heslo (ne heslo uživatele) půjde vidět v DB => při ztrátě hesla se nic neztratí. Stejně tam nebudou tak extra citlivá data, ale je to hlavně ze zvědavosti, že by tomu tak bylo jaké jsou možnosti jsem chtěl vědět. Na tento projekt mě bude asi stačit to co jsem teď napsal.
Joker
Profil
martin20a:
A zeptám se tě tedy jak bys to udělal ty?
Záleží na tom, proč je ta šifrovaná data nutné šifrovat.
Spíš bych ale řekl, že dost možná šifrovaná nemusejí být vůbec, pak bych je prostě nešifroval.
Pokud šifrovaná být musejí, seznámil bych uživatele s tím, že v případě ztráty hesla o ta šifrovaná data prostě přijde. Když si někdo zašifruje harddisk a pak zapomene heslo, taky o ta data přijde.
martin20a
Profil
Joker:
Přesný případ použití ti bohužel nemůžu říct, jelikož je to do plánovaného projektu a nesmím o tom mluvit pochopitelně. Probereme opět jestli je to nutné šifrovat nebo ne. Každopádně děkuji za reakce :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: