Asymetrické šifrování dat v aplikaci rubrika: Programování: PHP

1 nanuqcz
položil/-a 31.8.2014

Ahoj,
(úvod můžete přeskočit přímo k části "Otázka")
potřebuju pro jednu webovou aplikaci v PHP vybrat způsob šifrování citlivých údajů. Uvažoval jsem, že by to ve výsledku fungovalo nějak takto:

1) Citlivá data budou uložena v DB - zašifrovaná pomocí asymetrické šifry.
2) Na serveru bude z důvodu bezpečnosti uložen jen veřejný klíč (používaný pro zašifrování dat). Privátní klíč (pro dešifrování) bude znát uživatel systému a bude ho zadávat při požadavku na zobrazení těchto dat. Privátní klíč by tedy měl být člověkem zapamatovatelný řetězec o délce třeba 8 znaků.

Účelem je zabezpečit, aby pokud se případný hacker dostane na FTP (a tím pádem i k DB), aby neměl k dispozici citlivá data z DB v čitelné podobě. Proto nechci mít privátní klíč nikde na serveru a uživatel ho bude zadávat při každém požadavku na zobrazení citlivých dat.

Otázka:
Existuje pro PHP nějaký asymetrický šifrovací systém, který dovolí si zvolit JEDNODUCHÉ heslo pro dešifrování, a na základě něj vygeneruje (klidně složité) heslo pro zašifrování dat? Díval jsem se na OpenSSL, který ale nedovoluje vybrat si vlastní podobu privátního klíče.

Díky moc za tipy.

odkaz
7 messa
odpověděl/-a 31.8.2014

Vlastní podobu privátního klíče si určit nemůžeš (pokud nejsi matematický génius), protože to bývá informace se specifickými vlastnostmi - např. v RSA to jsou dvě velká prvočísla.

Dá se to udělat tak, že na serveru budou uloženy i privátní klíče, ale (symetricky) zašifrované uživatelskými hesly, která nebudou na serveru uložena.

Existují systémy public key šifrování, které mají privátní klíče rozumně krátké, aby se daly použít i jako heslo, nebo z hesla nějak vytvořit, viz např. aplikaci minilock.io - https://github.com/kaepora/miniLock/blob/master/README.md#0-overview :

Advancements in elliptic curve cryptography, specifically in systems such as curve25519, allow us to generate key pairs where the lengths of both public and private keys are relatively very small. This means that public keys become far easier to share (miniLock public keys, called miniLock IDs, fit inside less than half a tweet). This also means that a human-memorizable passphrase of adequate entropy can be used as the basis for deriving a private key.

Ale spíš bych to viděl na privátní klíč zašifrovaný uživatelovo heslem. To má i tu výhodu, že při změně hesla se nemusí všechno znovu zašifrovat.

Pro zobrazení všech 4 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.