Я бы сделал следующие шаги для отправки/получения данных между клиентом и сервером. Но я не уверен, что все шаги достаточно безопасны и невозможны для перехвата. Пожалуйста, дайте мне знать, как исправить дыры в безопасности, если таковые имеются? Пожалуйста, обратите внимание, что:Как отправить данные безопасным способом между клиентом и сервером, используя только симметричную криптографию
Первый раз - Зарегистрироваться (пользователь вводит новое имя пользователя и новый пароль)
- стороне клиента
- Создать CSPRNG соль для пользователя
- Сохранить соль на машине пользователя
- Создать энтропия в памяти (base64 временного значения, например [час дня] + [день года])
- Почтовый пароль (base64 открытого текста), а соль и энтропия на сервере
- стороне сервера
- Для принятого сообщения от cliet
- проверить, если энтропия соответствует (например, с базой64 [часа дня] + [день года]).
- Вычислить хэш (SHA1) соли и пароля (base64 открытого текста) - потому что хеширование всегда должно выполняться на сервере.
- Сохранить соль и вычисленный хэш в базу данных
В следующий раз - Войти (пользователь вводит свое имя и его пароль)
- стороны клиента
- Читайте соль из машины пользователя
- Вычислить хэш (SHA1) соли и ввести пароль (base64 открытого текста)
- Почтовый пароль (base64 открытого текста), а соль и вычисленный хэш на сервер
- сторона сервера
- Получение соли и «хранимая хэш» из базы данных
- Из полученного сообщения от клиента
- Split сообщения на 3-х частей: пароль (base64 из paintext); поваренная соль; «полученный хэш»
- Сравните «полученный хэш» с «сохраненным хешем»; если они совпадают, то пользователь является подлинным не хакером
Отправки TemperProof QueryString от пользователя к серверу
- стороны клиента
- Читайте соль из машины пользователя
- Создания энтропии в памяти (base64 временного значения, например [час дня] + [день года])
- Вычисляет хэш (SHA1) запросаString (base64 открытого текста), а также соль и энтропия
- Сообщение querystring (base64 of the сетование внутр), и соль, и энтропии, и вычисленное хэш на сервер
- стороне сервера
- Получение соли из базы данных
- Для принятого сообщения от cliet
- Split сообщение на 4 части: queryString (base64); поваренная соль; энтропия; 'received hash'
- Проверьте, соответствует ли энтропия (например, с базой64 [час дня] + [день года]).
- Вычисляет хэш (SHA1) запросаString (base64 открытого текста) и соли и энтропии.
- Сравните вычисленный хеш с 4-й частью расщепленного сообщения («полученный хэш»); если они совпадают, QueryString является подлинной
Отправка ответа обратно пользователю с сервера
- стороне сервера
- Compute ответ с использованием базы данных запросов
- Получение соли из базы данных
- Создайте энтропию в памяти (base64 временного значения, например[час дня] + [день года])
- Вычисляет хэш (SHA1) ответа (base64 открытого текста), а соль и энтропия
- Ответ на сообщение (base64 открытого текста) и соль, и энтропии, и вычисленное хеш-клиенту
- стороне клиента
- Read соль из машины пользователя
- Создание энтропии в памяти (base64 височной значение, например, [час дня] + [день из год])
- Разделить полученное сообщение на 4 части: ответ (base64 of paintext); поваренная соль; энтропия; 'received hash'
- Проверьте, соответствует ли энтропия (например, с базой64 [час дня] + [день года]).
- Вычислять хэш (SHA1) ответа (base64 открытого текста) и соли и энтропии.
- Сравните вычисленный хеш с 4-й частью расщепленного сообщения («полученный хэш»); если они совпадают, то ответ является подлинной
Зоны Ниже перечислены недостатки, я думаю. Не могли бы вы посоветовать, как они могут быть исправлены, а также указать другие возможные отверстия?
-
A)
Первый раз - Регистрация: хакер может размещать мусор заполнить базу данных, если он находит энтропии на этапе 1,3
-
B)
следующий раз - Вход: Я не могу придумать способ добавить энтропию хэшированного пароль на шаге 1.2, потому что тогда я не могу сравнить с тем, на базе сервера на шаге 2.2.2
Благодаря
1. Вы хотите иметь безопасную систему? Если это так, не создавайте свою собственную систему, используйте проверенные методы. 2. Вы говорите: «нет изобретений», построенных по всей схеме, является изобретением худшего рода: чрезмерно сложным. 3. [«Закон Шнейера»] (https://www.schneier.com/blog/archives/2011/04/schneiers_law.html): Любой, от самого невежественного любителя до лучшего криптографа, может создать алгоритм, который он сам не может сломаться. – zaph
Я не думаю, что это абсолютно безопасно, поскольку base64 не является шифром, и, насколько я вижу, человек в середине может получить всю информацию, необходимую для выдачи себя за обе стороны. Чтобы убедиться, что человек в середине не может легко вломиться в сообщение, вам нужен общий секрет между клиентом и сервером, и я просто не вижу, где что-то подобное вступает в игру. – Frank
@Frank. Как вы заметили, для Symmetric криптографии это не метод открытого ключа. Таким образом, «соль» и «энтропия» являются секретом между клиентом и сервером. – CloudWindMoonSun