Шифрование: симуляция SSL в JavaScript и Python - PullRequest
5 голосов
/ 20 октября 2010

Из-за Китая Great Firewall заблокировал https порт Google appengine.Поэтому я хочу смоделировать уровень защищенных сокетов с помощью javascript и python, чтобы защитить информацию о моих пользователях, которая не будет перехвачена этими провайдерами и GFW.1006 *

Сервер запросов браузера, сервер генерирует ключ шифрования k1 и ключ дешифрования k2, отправляет k1 в браузер.Браузер генерирует ключ шифрования k3 и расшифровывает ключ k4, отправляет k3 на сервер.

  • Просмотр:

Во время сеанса браузер шифрует данные с помощью k1 и отправляет на сервер.Сервер расшифровывается с помощью k2.сервер шифрует данные с помощью k3 и отвечает браузеру, браузер расшифровывает с помощью k4.

Пожалуйста, выясните мою ошибку.

Если это так, мой вопрос

  1. какдля генерации пары ключей в javascript и python, есть ли библиотеки?
  2. как зашифровать и расшифровать данные в javascript и python, есть ли библиотеки?

Ответы [ 4 ]

2 голосов
/ 20 октября 2010

У вас есть фундаментальная проблема в том, что реализация SSL в JavaScript не будет иметь встроенных корневых сертификатов для установления доверия, что делает невозможным предотвращение атаки "человек посередине".Любые сертификаты, которые вы доставляете со своего сайта, включая корневой сертификат, могут быть перехвачены и заменены шпионом.

Обратите внимание, что это фундаментальное ограничение, а не особенность работы SSL.Вся криптографическая безопасность зависит от установления общего секрета.Корневые сертификаты, развернутые в основных браузерах, обеспечивают точки входа в доверенную сеть, созданную сертифицирующими органами (ЦС), которая позволяет вам установить общий секрет с известной третьей стороной.Эти сертификаты, AFAIK, не доступны напрямую для кода JavaScript.Они используются только для установления безопасных (например, https) соединений.

1 голос
/ 26 октября 2010

Другие ответы здесь верны: вы не сможете безопасно доставить JavaScript, который будет работать на клиенте. Тем не менее, если вы все равно хотите еще кое-что изучить, посмотрите проект Forge с открытым исходным кодом. Он имеет реализацию SSL / TLS в JavaScript и простой сервер Python SSL:

http://github.com/digitalbazaar/forge/blob/master/README

Если вы хотите больше узнать о его использовании:

http://digitalbazaar.com/2010/07/20/javascript-tls-1/

http://digitalbazaar.com/2010/07/20/javascript-tls-2/

1 голос
/ 20 октября 2010

Вы не можете помешать мужчинам в середине перехватывать ваши пакеты / сообщения, особенно если им действительно все равно, узнаете ли вы. Что вы можете сделать, так это зашифровать ваши сообщения, чтобы их перехват не позволял им читать то, что вы отправляете и получаете. Теоретически это хорошо, но на практике вы не можете сделать современную криптографию вручную даже с помощью ключей: вам также необходимо перенести некоторое программное обеспечение, и вот тут оно становится гораздо более неловким.

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

Я понятия не имею, насколько практично делать все это в Javascript. Очевидно, что он может это сделать - это полный по Тьюрингу язык, он имеет доступ ко всем необходимым системным вызовам - но это может быть глупо дорого. Возможно, было бы проще подумать об использовании GPG ...

(Сокрытие факта от правительства, что вы общаетесь вообще, - это совсем другая проблема.)

0 голосов
/ 20 октября 2010

Существует большая проблема, если безопасность действительно является серьезной проблемой: ваш алгоритм будет передаваться без защиты. Вы можете доверять клиенту вообще? Может ли клиент вообще доверять серверу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...