Почему SSL такой особенный? Разве я не могу реализовать RSA самостоятельно? - PullRequest
2 голосов
/ 27 декабря 2011

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

Сначала я бы создал открытый и закрытый ключи.Я бы зашифровал пароль клиента с помощью javascript путем перевода букв пароля в ascii-значения, а затем умножил или добавил (какие-либо предложения?) Эти ascii-значения, чтобы получить «незашифрованное сообщение».Затем я зашифрую это сообщение, используя javascript и открытый ключ.

На сервере я расшифрую защищенное сообщение, используя закрытый ключ, и получу сумму / произведение значений ascii-значений пароля.Любые советы о том, как получить отдельные письма от этого?

Редактировать: я пришел к выводу, что SSL является лучшим способом.Я только смотрел на клиента на стороне сервера сделки (где все, что клиент отправляет, это пароль).Разумеется, информация, отправляемая сервером клиенту, является ценной и не должна быть уязвимой для атак MITM.Спасибо за бесплатные предложения SSL.

Спасибо

Ответы [ 6 ]

5 голосов
/ 27 декабря 2011

Существует множество причин, по которым вы не можете использовать свое собственное шифрование.

  1. SSL дает пользователю уверенность в том, что сайт безопасен и что перехватчики не могут просматривать пароль по проводам.Если вы не используете SSL, то обычные указания браузера о том, что сайт безопасен, не будут отображаться.
  2. Это действительно трудно получить правильный RSA (или любой криптоалгоритм в этом отношении),Во-первых, использование необработанного RSA небезопасно, и вам необходимо иметь соответствующий механизм заполнения и не делать его действительно безопасным.RSA также может шифровать только n-1 байтов данных, где n - это размер ключа.
  3. Оставлять шифрование криптографам.Первая проблема с предложенной вами системой заключается в том, что вы упускаете смысл использования безопасного транспорта: вам не нужно делать какое-либо специальное кодирование ваших данных (преобразование в ascii и умножение / суммирование или любую другую часть), потому что безопасныйтранспорт означает, что подслушивающие не могут видеть, что происходит.
  4. Ваше предложение не защищает от атак "человек посередине".Это (своего рода) предотвращает подслушивание, что является другой проблемой.

Тем не менее, вы, безусловно, можете реализовать RSA в Javascript с небольшими усилиями, но просто знайте, что он вряд ли будет безопасным доу вас была куча криптоаналитиков, которые смотрели на это и пытались сломать.Вы совершите ошибку где-то в очереди, даже если вы лучший программист в мире.

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

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

3 голосов
/ 27 декабря 2011

Вы можете использовать самозаверяющий сертификат на сервере и явно доверять ему на клиенте (т.е. кодировать параметры сертификата и т. Д.).Таким образом, вам не нужно изобретать велосипед.Я бы сказал больше - в зависимости от библиотеки вы можете использовать наборы шифров PSK (pre-shared key) и полностью избавиться от сертификатов.

2 голосов
/ 27 декабря 2011

Если вы ищете SSL, но не тратите деньги, используйте www.startssl.com, так как это позволит вам использовать SSL бесплатно.Создание вашего собственного решения займет время, и если оно не будет сделано, правильный путь будет небезопасным.

2 голосов
/ 27 декабря 2011

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

Система открытых / закрытых ключей - лучший путь. К тому времени, когда вы поймете, как создать свой собственный сертификат и включить свой сертификат CA во все основные браузеры и операционные системы и стать вашим собственным центром сертификации, я думаю, вы найдете, что потратить несколько 100 долларов на сертификат - это дешево.

1 голос
/ 31 марта 2013

Мне нет дела до подтверждения личности сайта; Я просто хочу зашифровать пароль между клиентами и сервером для защиты от атак типа «человек посередине»)

Именно поэтому вы действительно заботитесь о том, чтобы подтвердить личность сайта.

Именно поэтому использование RSA без схемы аутентификации небезопасно. Бесполезно вести тайный разговор, когда не можешь определить, с кем разговариваешь.

1 голос
/ 27 декабря 2011

Да, таким способом можно реализовать простой RSA «вручную». Чтобы создать незашифрованное сообщение, вы можете просто использовать биты сообщения. Например, если ваш пароль cheese:

c    h    e    e    s    e
0x63 0x68 0x65 0x65 0x73 0x65

Тогда число для шифрования может быть просто 0x636865657365. Вам нужно использовать математические процедуры, которые могут обрабатывать большие целые числа (собственные числа Javascript недостаточно велики).

Применяются стандартные предупреждения, ваше решение каким-то образом будет иметь фатальный недостаток и т. Д.

...