Narazili jste na největší problém se šifrováním dat v databázi:
➽ Kam uložit klíč?
Šifrování nemůže vyřešit problém se zabezpečením dat, může je pouze „koncentrovat“ do klíče. Kdekoli uložíte klíč, vaše aplikace musí být schopna dešifrovat data, což může udělat i útočník. Znám dvě možná řešení tohoto problému:
- Umístěte klíč na co nejbezpečnější místo. To znamená, že by měl být určitě umístěn mimo adresář www-root v nepřístupném adresáři na serveru. V závislosti na důležitosti dat můžete také zvážit outsourcing šifrování na jiný vyhrazený server.
- Klíč vůbec neukládejte a odvoďte jej z uživatelského hesla. Toto je jediný skutečně bezpečný způsob, protože data pak nedokáže dešifrovat ani server. Nevýhody jsou samozřejmě v tom, že uživatel musí zadat heslo pokaždé, když použije vaši službu. Pokud uživatel změní heslo, musíte všechna data znovu zašifrovat. Pokud uživatel zapomene heslo, data jsou ztracena.
P.S. Doporučuji zašifrovat data před uložení do databáze, protože MySQL AES_ENCRYPT používá režim ECB bez IV. To umožňuje vyhledávat určitou hodnotu, ale je to méně bezpečné (jsem si docela jistý, že nechcete hledat podle hesla).