Как можно обмениваться информацией с помощью парадигмы «хост-доказательство»? - PullRequest
2 голосов
/ 22 февраля 2012

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

Мне действительно нравится идея «хоста».«защищенное» приложение, где шифрование / дешифрование выполняется на стороне клиента с использованием JavaScript, и только зашифрованная информация всегда покидает браузер, подобно PassPack или Clipperz.Чего я не могу понять, так это того, как Passpack удается разрешить людям обмениваться паролями.Я не могу понять, как это можно сделать без передачи простого текста или ключа шифрования другому пользователю через сервер, что делает этот процесс неотъемлемым нарушением парадигмы «защищенности хоста».

Может ли кто-нибудь указать мне нарешение этой проблемы?

1 Ответ

1 голос
/ 23 февраля 2012

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

Сначала пользователь должен будет ввести свой закрытый ключ в веб-интерфейс. Ключи RSA обычно имеют длину не менее 1024 бит, поэтому даже если вы используете относительно эффективную кодировку base64 (что, вероятно, является неправильным выбором, поскольку многие из используемых символов визуально похожи), пользователю придется ввести 171 бессмысленный символ. С клавиатурой это будет утомительно и подвержено ошибкам.

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

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

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

Нейт Лоусон упоминает криптографию javascript в его Google Tech Talk .

...