Безопасный вход в систему: шифрование с открытым ключом в PHP и JavaScript

Для заканчивания болезненного опыта разности файла установите опцию VSS в различном диалоговом окне, чтобы сделать нечувствительные к регистру сравнения. Тем путем Вы будете только видеть "реальные" изменения.

6
задан Bart van Heukelom 6 October 2009 в 20:44
поделиться

6 ответов

Заранее: я прошу прощения за отрицательный ответ;

Внедрение собственного протокола безопасности никогда не является хорошей идеей, если только вы не хорошо обучены эксперт по безопасности, или вы на самом деле не заботитесь о безопасности и хотите только создать впечатление безопасности (маркетинг) и остановить скрипачей.

SSL определенно не блокировка отпечатков пальцев, как сказано в ваших комментариях, JCryption и ваше предложение равносильны наличию двери, в которую вы можете ввести двузначный код, чтобы открыть дверь, и у вас есть бесконечное количество попыток. Трудно сломаться, если вы не очень заинтересованы и просто проходите мимо, но если вы хотите попасть в этот дом (а вы, вероятно, это сделаете, иначе безопасность не потребуется), вы войдете.

Другое дело, что люди часто забывают упомянуть, чего они хотят достичь. Безопасность включает в себя три знаменитых компонента, называемых CIA, а именно конфиденциальность, целостность и доступность. Для вас важна конфиденциальность передаваемых вами данных или важна их целостность (т.е. вы уверены, что отправленные данные исходят от того, кого вы ожидаете, а не от человека в середине)?

Чтобы сделать это конкретным в В этом случае единственное, чего вы здесь добиваетесь, - это то, что пассивный злоумышленник не может видеть, что проходит по линии. Как только ваш злоумышленник становится активным и меняет сообщения на своем маршруте, вся ваша безопасность рушится. Поэтому я бы посоветовал просто придерживаться решения, предложенного экспертами (в данном случае TLS, а не ssl, поскольку это его старая версия), и просто убедитесь, что ваш сервер его поддерживает.

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

Между прочим, SSL / TLS не может работать без сертификатов. Вся суть криптографии с открытым ключом состоит в том, что где-то должна быть хоть какая-то доверенная сторона.

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

Аргумент, что сертификаты должны быть бесплатно - это действительно с точки зрения перспективы. Я думаю, что люди, утверждающие, что это подделка / идиотизм, не знают, что нужно для того, чтобы стать центром сертификации. Эти компании инвестируют миллионы, чтобы обеспечить безопасность связи, и уверены, что они хорошо зарабатывают на продаже сертификатов. но это их работа, и они тоже заслуживают зарабатывать деньги, как и все остальные.

edit2: после комментариев

Я действительно говорю, что у вас безопасное общение. Однако вы упускаете тот момент, что с самоподписанными сертификатами вы не знаете, с кем вы разговариваете безопасно. Представьте себе темную комнату, полностью изолированную от прослушивания разговора. А теперь представьте разницу между такой комнатой со светом и без него. Если в комнате есть свет, вы действительно можете видеть, с кем разговариваете, и только выберите , чтобы поговорить с людьми, которым вы доверяете. А теперь представьте, что вы делаете то же самое в полностью темной комнате. Вы можете только надеяться, что парень, с которым вы разговариваете в этой темной комнате, всего лишь союзник, а не ваш противник. Однако вы не можете этого знать, просто надейтесь , что все в порядке. И хотя ваш разговор безопасен, никто не может подслушивать, у вас по-прежнему нет "полной" безопасности.

Если я, будучи мошенником, проведу атаку типа "злоумышленник в середине", я могу создать самоподписанный сертификат без ведома пользователя. Таким образом, преимущество использования TLS с самоподписанными сертификатами заключается в том, что у вас есть хотя бы реализация протокола corrent (и даже реализовать это далеко не просто). Более того, вы можете избежать неприятных предупреждений, посоветовав пользователям один раз доверять сертификату вручную. Однако это возможно только в том случае, если у вас относительно небольшая группа постоянных посетителей, для общедоступного веб-сайта это не решение.

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

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

17
ответ дан 8 December 2019 в 03:01
поделиться

Это не кажется безопасным с точки зрения клиента. Две (связанные) проблемы:

  1. Как клиент доверяет серверу? Как он может проверить, что ключ, представленный сервером, является тем, который ему принадлежит?
  2. Можно сделать man-in-the -средние атаки. Вредоносный прокси-сервер может вырезать и сохранить открытый ключ до того, как клиент его увидит, подставив свой собственный, затем расшифрующий пароль, когда клиент аутентифицируется, сохранит его, а затем повторно зашифрует и отправит ответ, чтобы клиент не понял что-то вверх.

Что не так с обычным SSL? Должен быть консенсус, что это безопасно, иначе поставщики и организации прекратят поддержку в одночасье. Напротив, большинство попыток изобрести необычный новый способ обеспечения безопасности "по дешевке"

10
ответ дан 8 December 2019 в 03:01
поделиться

Похоже, многое из того, что вы хотите сделать, предоставляет плагин jquery JCryption . Он даже предполагает PHP в качестве бэкэнда, так что он вам подходит.

3
ответ дан 8 December 2019 в 03:01
поделиться

Livejournal делает что-то похожее на то, что вы хотите, где:

  1. Сервер генерирует строку запроса, вставляет ее в форму. [ 1 ]
  2. Клиент генерирует ответ, хешируя пароль MD5, затем MD5 хеширует предыдущий хеш с добавленным вызовом [ 2 ].
  3. Сервер получает ответ, проверяет запрос достоверность, затем выполняет то же самое, что и шаг 2, сравнивая результат с ответом.
1
ответ дан 8 December 2019 в 03:01
поделиться

Это очень хорошая идея, и она уже реализована. См. jCryption .

0
ответ дан 8 December 2019 в 03:01
поделиться

jCryption выглядит интересно, я его раньше не видел.

Но я должен спросить, что не так с SSL?

Код шифрования, как известно, сложно сделать правильно, и вы можете поспорить, что реализации SSL, имеющиеся в браузерах и http-серверах, гораздо более тщательно проверены и проверены, чем материал jCryption.

Тем не менее, jCryption выглядит аккуратно, если вы абсолютно необходимо избегать SSL, и вы не имеете дело с сверхчувствительной информацией.

0
ответ дан 8 December 2019 в 03:01
поделиться
Другие вопросы по тегам:

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