Безопасная передача пароля по незашифрованному протоколу TCP / IP - PullRequest
5 голосов
/ 16 мая 2010

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

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

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

Редактировать

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

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

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

Ответы [ 3 ]

7 голосов
/ 16 мая 2010

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

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

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

6 голосов
/ 16 мая 2010

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

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

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

4 голосов
/ 16 мая 2010

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

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

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

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

...