практическое использование cryptico.js

Cryptico кажется очень удобной библиотекой шифрования RSA.

cryptico.wwwtyro.net

Что касается приложений JavaScript, предположим, что я хочу отправить данные клиенту, заставить их что-то сделать с данными и передать их обратно. Как я могу использовать RSA, чтобы гарантировать, что данные, которые клиенты отправляют обратно на сервер, не будут подделаны? Поскольку JavaScript легко подвергается обратному проектированию, существует ли практическое применение cryptico на стороне клиента?


person ejang    schedule 05.01.2012    source источник


Ответы (2)


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

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

person disorder    schedule 05.01.2012

Есть решение того, что вы ищете (я уверен, что их больше одного). Мой ответ требует двух нетрадиционных подходов к тому, что мы называем «безопасным соединением», и к тому, как вы получаете «клиентский код».

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

  2. Физически предварительно поделитесь своим клиентским кодом аналогичным образом, т. е. загрузите код с компакт-диска в журнале или с предоплаченной карты, продаваемой на рынке. Это останавливает MITM от отправки вам поддельных и эксплуатируемых клиентов, что позволяет ssl. Как только известно, что клиент является безопасным, и установлено настоящее безопасное соединение, упомянутое в (1), код клиента может быть обновлен.

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

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

person user2372852    schedule 12.05.2013