best practice – ukládání citlivých údajů

drakul
Člen | 37
+
0
-

Zdravím kolegové programátoři,
rád bych se zeptal, jak řešíte ukládání citlivých osobních údajů ve svých aplikacích? Po pročtení zdejších diskuzí (https://forum.nette.org/…delat-insert, https://forum.nette.org/…res-nette-db, https://www.2ndquadrant.com/…-encryption/) jsem došel k následujícím závěrům.

Možnost 1) Šifrovat data funkcemi DB serveru (např. MySQL/Maria – AES_ECRYPT/AES_DECRYPT). Tuto metodu používám v současné době. Šifrování probíhá pomocí klíče, který je rozdělený na dvě části. První část je uložena (také zašifrovaná) v tabulce u jednotlivých uživatelských účtů (tzn. první část je šifrovaná pomocí hesla jednotlivých uživatelů a saltu). Druhá část klíče je umístěna ve zdrojovém kódu aplikace. Tzn. při úniku dat čistě z databáze neunikne celý šifrovací klíč (protože druhá část je uložena jinde). Samozřejmě pokud někdo hackne celý server a dostane se ke zdrojákům, tak se mu zřejmě podaří časem prolomit i druhou část klíče v databázi.

Možnost 2) Šifrovat data pouze v rámci aplikace a do databáze ukládat již připravená šifrovaná data. Zde jsem se díval, že možností, jak data šifrovat je celá řada (od nativních funkcí PHP (openSSL až po rozsáhlé frameworky). Osobně nemám s tímto způsobem žádné zkušenosti (kromě ukládání hesel do DB). Především mi není jasné, jak bych prováděl komplexnější dotazy nad „dekódovanými daty“ (HAVING, GROUP BY, SUM, …).

Předem děkuji všem za náměty a postřehy.

Marek Bartoš
Nette Blogger | 1165
+
+1
-

Databáze a případně jednotlivé tabulky se dají zašifrovat vestavěným řešením pracujícím na pozadí, proč si komplikovat aplikaci?
https://mariadb.com/…ariadb-10-1/

Kamil Valenta
Člen | 758
+
+1
-

Jen pozor, aby spojení s DB bylo pod sTunelem, nebo jinak šifrované. Protože když uděláš select, na klienta už jde open-text.