Передача безопасного пароля по незашифрованному tcp/ip

Я нахожусь на этапах разработки пользовательского tcp/ip протокола для мобильной коммуникации клиент-сервер. При отсутствии требования (данные не уязвимы), я хотел бы избегать использования SSL по служебным причинам (и в задержке квитирования и в циклах сохранения).

Мой вопрос, каковы лучшие практики способ передать информацию аутентификации по незашифрованному соединению?

В настоящее время мне нравятся SRP или J-PAKE (они генерируют безопасные маркеры сессии, являются дружественным хешем/солью, и позволяют ударять в TLS, когда необходимый), которому я верю, оба реализованы в OpenSSL. Однако я немного осторожен, так как я не вижу, что многие люди используют эти алгоритмы с этой целью. Также ценил бы указатели на любые материалы, обсуждая эту тему в целом, так как я испытал затруднения при нахождении любого.

Править

Возможно, вопрос должен был быть: существует ли подход лучших практик для безопасных паролей по незашифрованному tcp/ip? В противном случае, каковы причины выбора конкретного метода по другим? (Ответ Грачей является самым близким в духе к этому вопросу до сих пор, даже если он действительно нарушает букву).

Редактирование, часть deux

Мне, прежде всего, интересно в случае аутентификации клиент-сервер, где существует ожидание, что у обеих сторон есть общий секрет (пароль) априорно.

5
задан rook 5 November 2010 в 05:06
поделиться

3 ответа

Вам следует взглянуть на «Обмен ключами Диффи-Хеллмана» :

Обмен ключами Диффи-Хеллмана (D– H) - это криптографический протокол, который позволяет двум сторонам, которые не знают друг друга заранее, совместно установить общий секретный ключ по незащищенному каналу связи. Затем этот ключ можно использовать для шифрования последующих сообщений с использованием шифра с симметричным ключом.

После обмена ключом вы можете зашифровать свой пароль этим ключом и передать его по незащищенному протоколу.

7
ответ дан 18 December 2019 в 09:48
поделиться

Я все еще думаю, что SSL - это лучший выбор, в конце концов, зачем изобретать колесо, если так много может пойти не так? Вам не нужно покупать дорогой сертификат, если у вас есть список "хороших" и "плохих" (скомпрометированных) сертификатов. openSSL полностью бесплатен, и я не вижу веских причин не использовать его.

Некоторые вещи, которые вы могли не знать: рукопожатия ssl могут быть возобновлены.

Также вы можете использовать SSL/TLS через UDP для снижения накладных расходов, это называется DTLS.

6
ответ дан 18 December 2019 в 09:48
поделиться

Вы можете использовать алгоритм "вызов-ответ". Алгоритм выглядит так:

  • Сервер посылает клиенту случайную строку.
  • Клиент объединяет эту строку с паролем (объединяя, вы можете сделать их xor или просто добавить).
  • Клиент вычисляет хэш (например, SHA1) результата и отправляет его на сервер.
  • Сервер вычисляет такой же хэш, используя это случайное число и настоящий пароль.
  • Сервер сравнивает два хэша.

Поскольку вы не должны хранить пароль в виде обычного текста, а только в виде хэша, клиент должен вычислить этот хэш в самом начале.

Возможно, существует несколько библиотек, реализующих это, так что вам, вероятно, не нужно писать это самостоятельно.

4
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

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