Давайте предположим, что я должен хранить конфиденциальные данные пользователя, которые могут быть зашифрованы на стороне клиента.
- Шифрование (необязательно) должно выполняться с парольной фразой пользователя .
- Вход в систему пользователя (необязательно) должен осуществляться с использованием пароля пользователя .
Примечания:
Простой текстовый пароль не сохраняется на сервере и не передается по сети.
Мои опции и их недостатки:
1. Без аутентификации, авторизация на стороне клиента:
Сервер предоставляет данные всем, но только исходный пользователь имеет возможность декодировать.
Данные могут использоваться кем угодно , чтобы попытаться взломать шифрование - не лучший способ защитить его.
2. Аутентификация на стороне сервера, без авторизации:
Сервер хранит пароль пользователя для доступа к данным и предоставляет данные только тому пользователю, который может предоставить правильный пароль.
Пользователи не доверяют сети для передачи своих данных без шифрования .
3. Аутентификация и авторизация:
Сервер хранит пароль пользователя для доступа к зашифрованным данным, шифрование выполняется с использованием ключевой фразы, которая отличается от пароля пользователя.
Хорошая безопасность, но пользователи не хотят запоминать два пароля .
4. Аутентификация против авторизации:
Сервер хранит пароль пользователя для доступа к зашифрованным данным, шифрование выполняется с использованием того же пароля.
Пользователи счастливы. Некоторые проблемы безопасности.
Я предпочитаю последний четвертый вариант, но меня беспокоит:
Что если сервер будет взломан, как я могу быть уверен, что зашифрованный пароль и зашифрованные данные не могут быть использованы совместно для взлома шифрования?
Как я могу усложнить взлом шифрования?
Некоторые мысли:
- Используйте разные алгоритмы шифрования для пароля и данных.
- Добавить фиксированную строку в конец пароля пользователя перед шифрованием.
- Пароль пользователя Pad на определенную длину.
EDIT:
Система должна быть очень похожа на систему резервного копирования, которая должна быть защищена со всех сторон: сервер не должен иметь возможность читать данные, только исходный клиент должен иметь возможность доступа к данным, а человек в середине атаки должен быть предотвращенным. Так что, если кто-то взломает аутентификацию сервера или шифрование клиента, данные не должны раскрываться.
Он должен быть основан на сети, поэтому человек в средней атаке должен быть предотвращен с помощью HTTPS.
Чтобы серверные хаки не могли раскрыть данные, данные шифруются на стороне клиента.
Чтобы предотвратить вмешательство клиентского шифрования, доступ к данным должен быть защищен на стороне сервера с помощью некоторого логина и пароля или токена (может быть уникальным URL).