2015-02-15 3 views
11

В настоящее время я изучаю возможности создания клиента обмена сообщениями (peer2peer) с точки зрения шифрования, что обеспечивает безопасность. Это приложение будет основано на веб-технологиях (если возможно).Возможно ли сквозное шифрование в Javascript?

Мои вопросы: возможно ли сквозное шифрование только с помощью javascript (клиент & node.js/peer.js)? Если да: правильно ли изучать методы шифрования HMAC (RSA)? Я уже пытался понять, как работают эти библиотеки, но мне пока не повезло :)

lib я нахожу интересным, но я не понимаю (полностью) и знаю, как реализовать (в этом случае):

Я могу попытаться разработать более, если это необходимо.

ОБНОВЛЕНИЕ: Приложение будет мобильным приложением. Использование веб-технологий является немного доказательством концепции.

+4

Почему бы просто не купить сертификат ssl, как и все остальные? – Emissary

+0

Является ли проблема решена путем внедрения SSL-сертификата при создании приложения чата (P2P WebRTC)? Возможно, я должен добавить, что это будет мобильное (веб-приложение) в будущем. – Dominique

+2

Я уверен, что вы могли бы реализовать какой-то RSA, используя 'window.crypto.getRandomValues ​​(uintarr);', вопрос в том, «будет ли это хорошим шифрованием?» и «это безопасно?» наряду с «допустимы ли накладные расходы»? –

ответ

4

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

Artjom правильно указывает, что для однорангового шифрования вам, скорее всего, потребуется аутентификация обеих сторон. Это не обеспечивается обычным SSL/TLS, вам потребуется аутентификация клиента. Но для проверки подлинности клиентов и серверов необходимо установить доверие. В обычных браузерах это обеспечивается внутренним хранилищем сертификатов. Однако гораздо сложнее доверять клиентам.

Все остальные вещи (например, как RSA не являются HMAC) - это детали реализации. Однако вы не должны внедрять все, что связано с безопасностью. Сначала сосредоточьтесь на своем случае использования, сценарии угроз и разработке протокола.

+0

Итак, вы говорите, если я не знаю, как именно, просто не делайте этого самостоятельно? Я понимаю, что аутентификация клиента является трудной точкой, потому что мы все никогда не можем доверять клиенту. Тем не менее, вы рекомендуете некоторые вещи, которые я могу прочитать, или вы думаете, что я слишком сильно задумываюсь об этом? : P Спасибо за ваши 2 цента, конечно. – Dominique

+0

Сначала вам нужно установить, что вы можете доверять в каждом месте. Для большинства сценариев вам не нужна только конфиденциальность, вам также нужна целостность и аутентификация, так как обычно возможен человек в средних атаках *. Для транспортных протоколов TLS/DTLS будет наиболее логичным выбором, но вам понадобятся доверенные сертификаты в большинстве реализаций (есть также основанные на паролях и т. Д.). –

2

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

Основная причина заключается в том, что независимо от того, какую часть головоломки вы используете для шифрования данных в интерфейсе, ваш клиент в конечном счете зависит от того, что сервер отправляет.

Необходимое чтение:

+0

javascript не обязательно означает шифрование в браузере. Он перечислил node.js в стеке технологий. – thomasmeadows

0

Цель шифрования конца в конец, что пользователи могут быть уверены в безопасности коммуникаций, даже если центральный сервер обманывает. Необходимо решить две основные проблемы:

(1) Пользователи должны быть на 100% уверены, что они общаются с кем, по их мнению, они общаются.Это делается для предотвращения атак типа «человек в середине» (MITM), где человеком в середине может быть любой, включая сам сервер (пример: Apple iMessage has this weakness).

(2) Вы должны быть на 100% уверены, что код на стороне клиента не изменяет. Например, действительно ли это шифрование данных с использованием открытого ключа другого человека или просто отправка его в открытый текст где-то еще, а затем шифрование оттуда. Учитывая, что любой, кто имеет доступ к серверу, может поменять JavaScript в любое время, это огромная проблема.

Обе проблемы кажутся разрешимыми.

Для (1) пользователи могут проверять открытые ключи вне диапазона, как это сделано в PGP/GPG (к сожалению, многие люди пропустили этот шаг, но для истинной сквозной защиты вам это понадобилось) или keybase.io.

Для (2) группа из Массачусетского технологического института утверждает, что она разрешила это в своем дизайне Mylar. См. Раздел 6. Следует отметить, что исследователи обнаружили проблемы безопасности с Mylar, но, насколько мне известно, их решение для целостности кода на стороне клиента не было скомпрометировано.

Итак, теоретически сквозное шифрование может быть сделано полностью на JavaScript (какой язык используется не так). На практике ... это будет нелегко.

 Смежные вопросы

  • Нет связанных вопросов^_^