Перш ніж приймати рішення щодо таких питань безпеки, слід оцінити модель загрози. Не маючи уявлення, проти чого ви захищаєтесь, будь-які заходи, які ви вживаєте, можуть бути малоцінні.
Тепер у цьому контексті можна потурбуватися про кілька:
- Зловмисники отримують фізичний доступ до ваших даних (наприклад, вторгнення в центр обробки даних, крадіжка резервних стрічок тощо)
- Зловмисники отримують доступ для читання до вашої необробленої бази даних
- Зловмисники компрометують вашу програму, наприклад, через інжекцію SQL, перевищення буфера тощо.
Для першого сценарію зберігання бази даних та всіх резервних копій на зашифрованих томах повинно працювати, за умови, що сервер стоїть без голови - крадіжка сервера або стрічки тоді потребують порушення шифрування на диску.
Для другого сценарію шифрування даних баз даних допомагає, але тільки якщо ви ніде не зберігаєте потрібні ключі чи фрази.
У третьому сценарії все залежить від контексту, в якому відбувається атака: якщо це, наприклад, атака XSS або CSRF, то зловмисник може зробити все, що може законний користувач, а шифрування ваших даних зовсім не допомагає. .
Модель загрози, таким чином, є зловмисником, який отримує доступ для читання до необробленої бази даних, або знаходячи облікові дані для входу та керуючи увійти на сервер бази даних ззовні, або отримавши кореневий доступ до сервера баз даних. Типовий шлях - це перший доступ до оболонки на веб-сервері; звідти зловмисник може потім зчитувати дані доступу з файлу конфігурації та підключатися до бази даних.
Додатковим питанням є те, де ви зберігаєте ключі та фрази, особливо якщо ви використовуєте платформу з моделлю виконання без стану, наприклад PHP. В ідеалі клієнт вводить його пропускну фразу, коли це потрібно, і зберігайте її лише в пам'яті, а ще краще, виконайте розшифровку на стороні клієнта (але це не часто можливо). На платформі без стану стан зазвичай виконується за допомогою сеансів, пам'яті, баз даних або плоских файлів; але все це набагато вразливіше, ніж зберігати стан у власній пам'яті веб-програми. Уникнути цього - проблема з курячими яйцями, адже якщо ви зашифруєте стан перед тим, як зберегти його, ви просто створили ще один секрет, який ви повинні безпечно пам’ятати. Запам’ятовування парольної фрази клієнта та відправлення його разом з кожним запитом, який потребує цього, може бути найменш жахливим рішенням;