Шифрование на стороне клиента - какие-либо рекомендации / лучшие практики - Направьте меня в правильном направлении? - PullRequest
1 голос
/ 28 июля 2010

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

Основная предпосылка: Поставщик генерирует открытую / закрытую пару ключей: VendorPub и VendorPriv

Наши клиенты вводят конфиденциальные данные. При отправке JavaScript в форме зашифровывает конфиденциальные части данных, которые отправляются на наш сервер, это VendorPub (SensitiveData).

Мы отправляем этот пакет нашему поставщику как VendorPub (SensitiveData), только они могут использовать эти данные.

Независимо от длины ключа и утвержденных алгоритмов (RSA и 4096 соответственно), и, конечно, все будет по SSL-соединению ...

Это выглядит выполнимо, но я еще не смоделировал это ... Есть предложения? Ловушки?

Нашей средой разработки является Visual Studio 2k5 / 2k8 / ASP.net 2.0 или 3.0

Спасибо

Ответы [ 4 ]

3 голосов
/ 28 июля 2010

Другие ответы в настоящее время, по-видимому, упускают суть этого: «Мы отправляем этот пакет нашему поставщику как VendorPub (SensitiveData), только они могут использовать эти данные». Другими словами, вы являетесь ретранслятором, который обрабатывает данные как черный ящик.

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

Между прочим,

RSA4096 смехотворно огромно. 2048 год является полноценным на данный момент, а 3000 - все, что должно быть хорошо для 30+ лет. Но больше силы для тебя. Обычный способ обойти расходы на открытый ключ - это зашифровать симметричный (DSA) ключ с использованием RSA - таким образом ваше шифрование фактических данных происходит быстро, и единственной медленной частью является дешифрование (более короткого) ключа. Шифрование с асимметричным ключом намного медленнее, чем симметричное.

Что бы вы ни решили реализовать, убедитесь, что вы правильно настроили шифрование в коде JS.

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

2 голосов
/ 28 июля 2010

Это определенно выполнимо;хотя это может быть немного вяло.

Вот реализация RSA в JS: http://www.ohdave.com/rsa/

0 голосов
/ 30 июля 2010

Хорошо, итоговый ответ: Это выполнимо, достаточно быстро и достаточно безопасно. Однако, так как это было требованием PCI с намерением вычеркнуть нашу среду, оно не удалось, потому что у нас все еще был бы метод шифрования, т. Е. JavaScript, который будет выполнять шифрование, будет обслуживаться из нашей системы.

Спасибо всем, кто принял участие.

Gary

0 голосов
/ 28 июля 2010

Кажется, есть небольшая (если есть) причина делать что-либо из этого, если вы собираетесь использовать SSL-соединение (хотя я бы предпочел TLS).

Если вы все равно решите это сделатьСамая большая ошибка в PK-криптографии - это атака MITM, т. е. вы не хотите просто принимать ключ сервера и шифровать данные с его помощью.Это гарантирует, что только сервер может считывать данные, , но , если вы не проверили подлинность сервера, вы можете отправить его кому-то другому полностью.Именно поэтому 1) соединения SSL / TLS настраиваются медленно, и 2) библиотеки SSL / TLS большие и сложные.Шифрование намного проще, чем аутентификация.

Нет больше причин делать это самостоятельно, чем шифрование самостоятельно - SSL / TLS уже делают обе аутентификация и шифрование.

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