Autor Zpráva
p.Petr
Profil *
Ahoj,
Tady jsem našel funkce pro zašifrování a dešifrování v JS. Tady jsem to dal do živé ukázky.
Chtěl bych se zeptat, jak moc je to bezpečné a jak velký řetězec můžu zašifrovat? Díky
juriad
Profil
Není to vůbec bezpečné. Z těch, koho napadne stisknout F12, to rozšifruje každý druhý.

Co to dělá? Každý znak vyxoruje s konstantním číslem (které je odvozené od salt) a zapíše jej hexadecimálně.

Když dáš salt prázdný (""), tak první dvojice znaků je 48, což je H v hexu, viz tabulka a zbylé jsou 6x, protože to jsou malá písmena.

Když dáš salt "salta", tak výsledek je stejný jako "lst", kvůli komutativnosti xoru a tomu, že x ^ x = 0.

Celá šifra je náchylná na frekvenční útoky a při znalosti algoritmu stačí vyzkoušet 256 možností (ve skutečnosti méně, protože salt je jen text).

Jak velký řetězec tím můžeš zašifrovat? Asi skoro libovolně velký; může to trvat déle a prohlížeč ti ten skript může zastavit, nebo dojde paměť. Text o délce 2 621 440 znaků mi trvá zakryptovat 2255 ms.
Radek9
Profil
I kdyby ten „klíč“ byl opravdu soukromý a nedal by se vyčíst ze zdrojáku, tak to stejně není bezpečné. Jak psal juriad, při troše snahy to s pomocí frekvenční analýzy a hrubé síly rozlouskne i amatér. Použij něco rozumného, třeba AES.
Keeehi
Profil
p.Petr:
Chtěl bych se zeptat, jak moc je to bezpečné
Vůbec. Vždyť sám autor odpovědi píše, že to není bezpečné.

jak velký řetězec můžu zašifrovat?
Teoreticky neomezeně dlouhý.
p.Petr
Profil *
juriad:
Moc děkuji za cennou informaci.


Radek9:
Můžeš to prosím upřesnit? Děkuji


Keeehi:
Tak to mi uniklo, k čemu to potom je netuším, ale díky.
Keeehi
Profil
p.Petr:
Tak to mi uniklo, k čemu to potom je netuším, ale díky.
Tak na internet může napsat kdokoliv cokoliv, že. Jsou i lidé, kteří by neměli problém vzít výstup z funkce btoa("test"); a říct o tom, že je to zašifrované.

Nicméně neřekl jsi nám, k čemu by to šifrování melo sloužit. Těžko se pak radí konkrétněji. Ale můj tip je, že stejně jako 99,999% dalších webových projektů můžeš s celým šifrováním skončit tím, že nasadíš https. A co se šifrování týče, tím to pro tebe bude asi končit protože víc nebude potřeba.
Pokud by tvůj projekt nějakou čirou náhodou patřil do té malé skupiny projektů, které by potřebovaly nějaké další šifrování, pak si na tu část najmi někoho, kdo se tím zabývá.
p.Petr
Profil *
Šifrování by mělo sloužit k ochraně přihlašovacích údajů v html dokumentu. Mám tabulku a v tabulka obsahuje v každém řádku přihlašovací údaje s odkazem na přihlašovací stránku včetně nějakého popisu, a k tomuto bych chtěl mít přístup pouze já a to odkudkoliv, bude to dostupné na internetu. Díky
Radek9
Profil
p.Petr:
Jinými slovy chceš, aby byla někde veřejně na internetu vystavená tabulka se zašifrovanými přihlašovacími údaji, přičemž šifrovací klíč by sis pamatoval a zadával ho tam? To je otřesný nápad. I kdybys použil silnou šifru se silným klíčem, tak si jenom říkáš o to, aby se to někdo pokusil prolomit. Proč prostě nepoužiješ nějakého správce hesel? Má ho zabudovaný prakticky každý prohlížeč i smartphone.
Keeehi
Profil
p.Petr:
Správným řešením je použít password managera. Na výběr je jich celkem dost. Existují i varianty zdarma, pokud je tohle tvým primárním cílem.
Rozhodně bych se nepokoušel tvořit si vlastní verzi. To je totiž skvělý způsob jak si nechat veškerá hesla ukradnout.

Radek9:
Nevím, jestli se to někam posunulo ale ukládání hesel v prohlížeči nebývalo zrovna nejbezpečnější. Existovaly programy, které zobrazily veškerá hesla různých prohlížečů, jelikož jejich lokální uložiště nebyla šifrovaná. Je to lepší než vystavovat svá hesla na internetu ale já bych to nepoužíval.
anonym_
Profil *
Keeehi:
Je to lepší než vystavovat svá hesla na internetu
Asi tak.

Na druhé straně, tohle nebude dle dotazu tazatele aplikace, kterou by měla používat široká veřejnost a kde by mohl být zájem na jejím hacknutí. Takže prohlížeč mi přijde bezpečný dostatečně pro tuto záležitost.
p.Petr
Profil *
A PHP by na to bylo vhodnější? Co to AES jak psal Radek, to je taky k ničemu?
anonym_
Profil *
p.Petr:
Ano, PHP, databáze a samozřejmě hashovana hesla je správná cesta, jak řešit login.
p.Petr
Profil *
anonym:
Já ale neřeším žádný login.
N71
Profil *
Pokud nemáš znalosti matematiky a kryptografie prakticky na vědecké úrovni, tak se do vymýšlení šifer vůbec nepouštěj. Jinak kryptografické knihovny pro JavaScript existují, například github.com/brix/crypto-js.

Implementačně je to ošemetné, JavaScript je zpracováván na klientu. Aby to mělo smysl, privátní klíč tedy musí vložit až klient, například vyplněním hesla, načtením souboru a podobně.
p.Petr
Profil *
N71:
No a je používání této knihovny opravdu bezpečné?
Radek9
Profil
p.Petr:
A PHP by na to bylo vhodnější?
Rozhodně. Pokud chceš mermomocí jít cestou HTML tabulky s hesly, tak ji alespoň schovej za heslo pomocí PHP (ideálně přes šifrované HTTPS spojení, nikoli HTTP). Úplně naivně třeba takhle:
<form method="post">
  <input type="password" name="password">
  <input type="submit" value="Login">
</form>

<?php
$password = '$2a$12$L3LJkx5nsSihHVOLq6ivU.5TTxu.icmo8C2enE8lPb8QpfcBvwPX.';
// '123456' zahashované pomocí bcrypt (sem si musíš samozřejmě dát nějaké vlastní bezpečné heslo)
if (isset($_POST['password']) && password_verify($_POST['password'], $password)) {
?>
<table>
  ...
</table>
<?php
}
?>

Pořád riskuješ, že ti hesla někdo ukradne, pokud se ti dostane na server, ale v prohlížeči se k nim dostaneš jedině, pokud znáš heslo.

Co to AES jak psal Radek, to je taky k ničemu?
Není to k ničemu, ale rozhodně bych to nedělal tak, že rovnou zašifrovaná hesla veřejně zobrazíš. Ideální by bylo použít obojí (tzn. jedno heslo na zobrazení tabulky a druhé heslo na její rozšifrování).

No a je používání této knihovny opravdu bezpečné?
Ta knihovna je v pohodě. Jen ti nesmí utéct šifrovací klíč.
p.Petr
Profil *
Radek9:
ale v prohlížeči se k nim dostaneš jedině, pokud znáš heslo.
Můžeš to upřesnit? To se bavíš o JS?


Radek9:
Pořád riskuješ, že ti hesla někdo ukradne, pokud se ti dostane na server
Hesla budou přece na serveru zašifrované, ne?
Keeehi
Profil
Tazatel chce ukládat si hesla, aby si je nemusel pamatovat. Přesně k tomuto účelu slouží password manager. Jediné bezpečné řešení pro jeho situaci je použít password manager.

p.Petr:
Neber to prosím nijak zle ale bohužel na vytvoření vlastní verze password manageru nemáš potřebné znalosti. A není to bohužel něco, co se můžeš během chvilky naučit. Problém bezpečnosti je, že celý systém musí být absolutně bez chybičky. Stačí drobný problém v návrhu a celý systém se sesype a bude to, jako by žádné šifrování neexistovalo. Chyby v návrhu zvládnou dělat velké společnosti (Hyunday nezvládla správně zašifrovat software svého palubního počítače), je prakticky nemožné aby to správně navrhl někdo, kdo tomu vlastně vůbec nerozumí.
Pokud nechceš, aby tvá hesla unikla, použij prosím nějaké hotové, široce rozšířené řešení.
Radek9
Profil
p.Petr:
Motáš se v tom. Radši se na to, prosím tě, vykašli, bylo by to akorát plné bezpečnostních děr. Proč prostě nepužiješ nějakého správce hesel, který je přesně na tyhle věci určený?
p.Petr
Profil *
Radek9 Žádný správce hesel používat nebudu. Nehodlám někomu dávat hesla ke všemu možnému přímo na talíři.
anonym_
Profil *
p.Petr:
Ale přesně to předávání hesel na talíři děláš teď. Oproti tomu je jakýkoliv password manager nedobytna pevnost. Pokud ale jsi o své pravdě přesvědčen, nevím, o čem je pořad řec.

Ps. S tím loginem v #12 jsem ustřelil, byl jsem myšlenkami jinde a neuvědomil si, ze neřešis login.
Radek9
Profil
p.Petr:
Existují i self-hosted open-source varianty, které si prostě nainstaluješ na svůj server a hesla se v tu chvíli nesdílí s žádnou třetí stranou. Stačí hledat.
Keeehi
Profil
p.Petr:
To je asi jako tvrdit, nikdy nebudu používat žádný vyrobený zámek, protože výrobce by si mohl k němu vyrobit klíč. Tak raději se rozhodneš vyrobit vlastní. Ovšem jelikož toho o návrhu zámků moc nevíš, půjde otevřít nejenom tvým klíčem ale i kdejakou sponkou. Ale hlavně že budeš mít skvělý falešný pocit jak jsi vyzrál nad zlým vyrobcem zámků.
Tomáš123
Profil
Keeehi:
+1 (kľudne ma zmaž, nepatrí to sem :-))
N71
Profil *
p.Petr:
tabulka obsahuje v každém řádku přihlašovací údaje ... a k tomuto bych chtěl mít přístup pouze já a to odkudkoliv, bude to dostupné na internetu.
Pokud se vrátíme k původnímu záměru, tak celkem bezpečná cesta je mít obsah té tabulky symetricky zašifrovaný nějakou spolehlivou šifrou (třeba AES) a při každém zobrazení obsah dešifrovat zadáním privátního klíče.

Podle toho cos psal, s tím nemáš žádné zkušenosti, takže bych ti radil se do toho nepouštět. Stejnou službu ti totiž udělá zašifrovaný XLSX soubor umístěný do libovolného sdíleného souborového cloudu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0