Задать вопрос

Шифрование в базе данных на сервере?

Подскажите как решить задачу.

В общем есть сервис (что то похожее на интернет магазин) в котором зарегистрированы пользователи и менеджеры. Так вот задача стоит такая: пользователи сохраняют на сервере свои личные данные и менеджеры их могут просматривать. Нужно зашифровать эти личные данные так, чтобы их мог прочитать только сам пользователь и группа менеджеров.


У каждого пользователя и менеджера есть свои пароли, которые захешированы с солью и хранятся в базе.


В общем бьюсь над алгоритмом дня два, даже на stackoverflow задал вопрос. Несмотря на мой плохой английский, кто то даже меня понял :)
  • Вопрос задан
  • 11199 просмотров
Подписаться 6 Оценить 2 комментария
Решения вопроса 1
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
Если набор менеджеров фиксирован с момента зашифрования данных пользователем, то задача решается тривиально, схема будет аналогична PGP.
У каждого пользователя и менеджера будем в БД хранить пару открытый-закрытый ключ, а каждый закрытый ключ будет зашифрован на производной от пароля, вводимого пользователем в веб-интерфейс (это уже реализовано в стандарте).

Если же менеджеры могут добавляться по ходу игры, то несколько сложнее:
Вариант №0: нагенерируем 100 ключей заранее. Избыточно, и со сменой паролей придется попариться, зато просто.
Вариант №1: один закрытый ключ для всех менеджеров и промежуточный код, который может получать доступ к паролю этого закрытого ключа, и который сам расшифровывает данные и отдает их на веб-интерфейс.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
smoked
@smoked
А нельзя просто сделать роли просмотра определенных данных и просто не показывать менеджерам данные, за неимением доступа к ним. А у кого доступ есть(по умолчанию сам пользователь + роль доступа к данным пользователя у каких-то менеджеров) тот может видеть данные. И ничего шифровать по идее не надо будет.
Ответ написан
melervand
@melervand Автор вопроса
Кажется я придумал, правда есть избыточность.

Итак:
1. У каждого пользователя на основе его пароля(ЗК) генерируется открытый ключ
2. У группы менеджеров на основе мастер-пароля(ЗК) также генерируется открытый ключ
3. Пользователь шифрует данные своим и менежерским открытым ключом. Оба варианта сохраняются в базу
4. Теперь когда пользователю надо прочитать данные — он вводит свой пароль(ЗК) и дешифрует свою половину.
5. Также и менеджер вводит свой мастер-пароль(ЗК) и дешифрует свою половину.
6. Ну и менеджер изменяя данные шифрует их своим и пользовательским открытым ключом.

Ничего не упустил? Не упадет ли криптостойкость из-за дублирования данных зашифрованных двумя открытыми ключами?
Ответ написан
@ComodoHacker
Не понял, зачем шифровать. Настроить контроль доступа в приложении не достаточно?
Ответ написан
Комментировать
@StepEv
Вставлю свои 5 копеек.

Технический вариант защиты вам выше неплохо описали. Но любой специалист по информзащите вам скажет, что в большинстве случаев такие базы утекают не через взлом, а через сотрудников, которые имеют к ним доступ.

100% решения тут нет и быть не может, но можно максимально снизить риски. Рецепт:
— разделение доступа, предоставление доступа не ко всему массиву информации, а только к той части, которая нужна непосредственно в данный момент (НИКАКИХ общих паролей)
— журналирование — любой доступ к чувствительным данным должен быть запротоколирован
— мониторинг — любая подозрительная активность должна «включать сирену»
— аудит — анализ журналов

Плюс юридическое сопровождение — менеджеры должны подписать NDA.

На случай если утечка таки произойдёт, нужна возможность идентифицировать источник утечки по утёкшим данным. Как именно — консультируйтесь со специалистами по ИБ.

P.S. Если для вас вышеописанное дорого/сложно — не парьтесь и с шифрованием.

И ещё, вам надо понимать, что шифруя данные в БД, вы, не предприняв специальных мер, теряете возможность поиска, сортировки по хранимым данным. Нужна ли в этом случае именно БД?
Ответ написан
Комментировать
Iliapan
@Iliapan
здесь, очевидно, нужно смотреть в сторону шифрования с открытым ключом
Ответ написан
Комментировать
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
del
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы