Ukládání hesel a citlivých dat rubrika: Programování: PHP

3 Fidelio
položil/-a 25.12.2014

Ahoj, přemýšlím, že bych si udělal nějakou databázi hesel a různých přístupů, ale jak tyto citlivá data ukládat do db? Asi je dobré být v tomto trochu paranoidní... Co kdybych si chtěl uložit svůj pin, nebo číslo kreditky a nevěřil bych hostingu? :) Jak toto šifrovaně ukládat do db, aby se mi to po přihlášení zobrazilo rozšifrovaně? Napadlo mě to šifrovat to pomocí mého hesla, ale co kdybych chtěl udělat funkčnost tak, že budu některé přístupy sdílet mezi více uživatelů?

Jak zachovat tuto funkčnost při dodržení nečitelnosti databáze, pokud jí někdo vykrade? Pokud bych toto chtěl udělat časem jako veřejnou službu, musí vše být neprůstřelné...

Díkec za nápady či nasměrování

odkaz
8 spazef0rze
odpověděl/-a 3.1.2015

Co kdybych si chtěl uložit svůj pin, nebo číslo kreditky a nevěřil bych hostingu? :)

Pokud nechceš věřit hostingu (což je docela dobrý nápad v tomto případě), tak je to trochu složitější, protože takovou aplikaci na klasickém hostingu provozovat nemůžeš. Proč? Protože bys musel věřit hostingu, že nezmění kód, který na něm běží, nebo který se stahuje z hostingu do browseru (na šifrování na klientovi). Ale hostingu věřit nemůžeš. Takže šifrování na klientovi je v principu fajn, ale má spoustu problémů, protože kromě jiného musíš věřit serveru, ze kterého ten JS kód poskytuješ, protože by sice bylo hezké, že šifrování probíhá na klientovi, ale když by do klienta dorazil pozměněný kód, který třeba původní nešifrované heslo kamsi odesílá, tak je celé šifrování na klientovi k ničemu. (k tématu: Javascript Cryptography Considered Harmful)

Pokud chceš dělat další password manager, tak je dobrý si uvědomit, že password manager dělá více věcí, než jen že bezpečně ukládá hesla. Často se snaží chránit proti keyloggerům (alespoň proti některým) např. pomocí ochrany clipboardu nebo Secure Desktopu (viz třeba Detailed information about the security of KeePass). Výrobci některých password managerů (KeePass, 1Password) ani neví, kdo, kdy a jak často, odkud je používají, protože databáze není u nich na serveru, ani se přes jejich servery nesynchronizuje, takže ani nemají šanci to zjistit (Our lack of data collection is verifiable). Password managery mají bezpečné generátory náhodných hesel, auditory krátkých a slabých hesel, upozornění na hesla, která je potřeba změnit, protože někomu unikla databáze apod. Sdílení mají také již vyřešeno (1Password Sharing a vault, LastPass Sharing).

Důležitou součástí password managerů je i důvěra v jejich výrobce. Ta se získává třeba tak, že výrobci informují o bezpečnostních problémech (LastPass and the Heartbleed Bug), vystupují na konferencích k tématu (PasswordsCon, Jeffrey Goldberg z AgileBits, výrobce 1Password je častým přednášejícím), popisují rozhodnutí (Guess why we’re moving to 256-bit AES keys) apod.

Udělat dobrý a důvěryhodný password manager tedy není jen o "šifrování na klientovi", to je vcelku to nejjednodušší. Trochu blbá situace je ta, že většina uživatelů nějakého password manageru nemá šanci poznat, jestli je opravdu dobrý a jesti se dá výrobci důvěřovat (Password Managers: Facts, Fallacies & FUD, Kickstarter Password Managers: The good, the iffy and the dangerous.) - velmi dobře si tedy rozmysli, jestli bys to opravdu chtěl časem dělat jako veřejnou službu nebo to používat na svá "ostrá" hesla, nebo jestli to má být jen "chci se naučit něco nového" - to bych podporoval, narozdíl od toho používání.

PS: odkazy jsou jen pro uvedení některých zdrojů a pro dokreslení situace, rozhodně to nejsou všechny odkazy k danému tématu

Pro zobrazení všech 6 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.