http://habrahabr.ru/post/242535/
Перевод вводной части и введения в техническое описание проекта с открытым исходным кодом
Ricochet (
github).
Анонимная бессерверная система передачи мгновенных сообщений, которая просто работает
Ricochet – это эксперимент с альтернативным методом передачи мгновенных сообщений, который не доверяет никому – не раскрывает вашу личность, список контактов или общение.
— можно общаться без раскрытия личности или ip-адреса.
— никто не может выяснить, с кем вы общаетесь или когда вы общаетесь (никаких мета-данных)
— никаких серверов, которые можно было бы взломать, или операторов, которых можно было бы заставить выдать информацию о вас
— кросс-платформенный и простой даже для обычных пользователей
Примечание: проект недавно был переименован из Torsion.
Как это работает
Ricochet – система передачи мгновенных сообщений peer-to-peer, основанная на использовании скрытых сервисов Tor. Ваш логин – адрес вашего скрытого сервиса, а ваш контакт соединяется с вами (без участия серверов-посредников) через Tor. Система взаимодействия устроена так, что очень сложно установить вашу личность, исходя из вашего адреса.
Ricochet не связан и не согласован с разработчиками The Tor Project.
Эксперимент
Проект экспериментальный. Никто не проводил формальный аудит кода. Безопасность и анонимность – это сложные темы, и вам нужно самостоятельно оценивать риски возможности быть раскрытым при использовании любого программного обеспечения. Не рекомендуем полагаться на Ricochet в плане безопасности и не доверять Ricochet больше, чем необходимо. Хотя я, как разработчик, уверен что мой проект даёт вам больше приватности, чем какой-либо другой аналогичный.
Скачать
Ricochet доступен для Windows, OS X (10.7 и выше), также есть generic Linux binary package. Информация о релизах и журнал релизов доступны на соответствующих страницах.
Также они доступны на
сайте проекта.
Бинарники подписаны через PGP 9032 CAE4 CBFA 933A 5A21 45D5 FF97 C53F 183C 045D.
Адрес автора: ricochet:rs7ce36jsj24ogfw или john.brooks@dereferenced.net.
Tor: как работает протокол скрытых сервисов
Tor даёт пользователям возможность скрывать их местонахождение, предоставляя при этом различные виды сервисов, от веб-публикаций до системы мгновенных сообщений. Используя точки встреч Tor («rendezvous points»), другие пользователи могут присоединяться к скрытым сервисам, причём никто из них не будет знать личность другого.
Скрытый сервис должен сообщить о своём существовании по сети Tor, прежде чем к нему получится присоединиться. Сервис случайным образом выбирает ретрансляторы, строит к ним цепочки, и делает их своими точками «знакомства», предоставляя им свой публичный ключ. На картинках зелёные линии – это цепочки, а не прямые соединения. При использовании полноценных цепочек Tor очень сложно привязать точку знакомства к ip-адресу скрытого сервиса. Хотя публичный ключ доступен многим, ip-адрес скрытого сервиса не должен разглашаться.
Шаг второй: скрытый сервис собирает свой дескриптор, содержащий публичный ключ и краткую информацию о каждой из точке знакомства, и подписывает это приватным ключом. Он закачивает дескриптор в распределённую таблицу хэшей. Клиенты найдут дескриптор по запросу XYZ.onion, где XYZ – 16-символьное имя, созданное на основе публичного ключа. После этого скрытый сервис запущен.
Использование автосгенерированного имени сервиса может показаться непрактичным, но оно служит важной цели: каждый,- включая точки знакомства, директория распределённой таблицы хэшей, и конечно, клиенты,- может подтвердить, что он общается с нужным скрытым сервисом. Есть мнение, что из трёх пунктов – «децентрализованный, безопасный и имеющий смысл для человека» обычно можно выбрать не более двух.
Шаг три: клиент, пожелавший соединиться со скрытым сервисом, должен узнать его onion-адрес. После этого ему нужно скачать дескриптор из распределённой хэш-таблицы. Если там есть дескриптор для XYZ.onion (и если сервис в онлайне, не заброшен и не сделал опечатки в своём имени), клиенту становится известен набор точек знакомства и правильный публичный ключ. В это время клиент тоже создаёт цепочку к другому случайно выбранному ретранслятору и делает его точкой встречи, передавая ему разовый секретный ключ.
Шаг четыре: когда дескриптор существует и точка встречи подготовлена, клиент собирает вводное сообщение (шифрованное с публичным ключом скрытого сервиса), включающее адрес точки встречи и одноразовый секретный ключ. Клиент отправляет его одной из точек знакомства с запросом о передаче его скрытому сервису. Опять-таки общение происходит через цепочку Tor, никто не может связать отправку вводного сообщения с ip-адресом клиента, и тот остаётся анонимным.
Шаг пять: скрытый сервис расшифровывает вводное сообщение и выясняет адрес точки встречи и секретный ключ. Он создаёт цепочку к точке встречи и отправляет одноразовый секретный ключ в приветственном сообщении.
На последнем шаге точка встречи уведомляет клиента об успешном соединении. После этого клиент и скрытый сервис используют цепочки, построенные до точки встречи, для связи друг с другом. Точка просто транслирует зашифрованные сообщения туда и обратно.
В общем, полностью соединение между клиентом и скрытым сервисом состоит из 6 ретрансляторов: 3 выбраны клиентом (один из них – точка встречи), а другие три выбраны скрытым сервисом.
Технические замечания по дизайну Ricochet
Цели проекта
Создать систему мгновенных сообщений со следующими свойствами:
— пользователи не идентифицируются по контактам или адресам
— общение имеет проверку подлинности и проходит в приватном режиме
— никто не имеет доступ к списку контактов, истории сообщений или другим метаданным
— сопротивляется цензуре и отслеживанию на уровне локальной сети
— сопротивляется использованию чёрных списков или DOS
— доступна и понятна для обычных пользователей
— надёжность и интерактивность сопоставима с традиционными IM
Введение
Личность каждого пользователя представлена скрытым сервисом и его точкой связи. Эта информация распространяется как id для связи в виде ricochet:qjj5g7bxwcvs3d7i. В этом виде она уникальна и достаточна для соединения с сервисом.
Находясь в онлайне, пользователь распространяет информацию о своём скрытом сервисе в виде id, содержащего onion-адрес, и принимает двусторонние анонимные соединения, которые либо идентифицируются как известные контакты, либо используются для получения запросов на общение.
Известные контакты используют специальный протокол для передачи сообщений через установленные соединения.
Запрос контакта
Как в классических системах мгновенных сообщений, вы можете отправить запрос на добавление пользователя в свой список контактов, используя его id. Перед тем, как вы сможете отправлять или получать сообщения, этот запрос должен быть принят.
Запрос отправляется путём соединения с сервисом, при котором сообщается, что соединение установлено для запроса контакта и предоставляется разная информация, в том числе id отправителя запроса. Отправитель, находясь в онлайне, периодически пытается устанавливать связь.
Запрос включает в себя:
— имя скрытого сервиса получателя
— случайный cookie, созданный в начале соединения получателем
— случайный секретный ключ, который использует получатель для подтверждения соединений
— полный публичный ключ, связанный со скрытым сервисом и подтверждающий личность отправителя
— возможно, прозвище и короткое приветственное сообщение
— подпись этой информации RSA при помощи того же публичного ключа
Получатель подсчитывает id отправителя, основываясь на публичном ключе, и подтверждает его, проверяя подпись запроса. Это подтверждает право отправителя пользоваться скрытым сервисом, представляемым его id
Получатель может принять или отклонить запрос. Отклонённый публичный ключ можно добавить в чёрный список и в будущем отклонять автоматически
Соединения между контактами
Находясь в онлайне, сервис периодически пробует связь с каждым из контактов. В случае успеха подключение остаётся открытым и контакт считается находящимся в онлайне. На каждый из контактов нужно одно соединение, неважно, кто именно из двоих контактов являлся его инициатором.
Слой скрытого сервиса удобен тем, что предоставляет конфиденциальность, эфемерность, и подтверждения – поэтому протокол приложения получается очень простым. Клиентская часть соединения подтверждается предварительно распространённым случайным ключом, созданным сразу после запроса контакта.
Для общения используется простой бинарный протокол команда-ответ. Он пытается добавить надёжности в нестабильные соединения. Для простоты и полного контроля над процессом, чтобы исключать возможность атак на безопасность и анонимность общения, используется оригинальный протокол, а не один из готовых вариантов (вроде XMPP).
Протокол включает возможность проверки версий для будущего развития.
Интерфейс и стабильность
Интерфейс – важная и часто недооценённая часть безопасности и анонимности. Менее подкованные в технических аспектах пользователи должны без труда понимать, как пользоваться программой и что нужно делать, чтобы оставаться в безопасности.
Интерфейс Ricochet старается быть простым и понятным для тех, кто использовал другие менеджеры мгновенных сообщений. Понимание Tor и сетевых концепций не требуется. Должно быть просто использовать его правильным образом, сложно нарушать правила безопасности, и возможно для IT-специалистов расширять возможности программы
Будущее развитие
Описанный здесь протокол близок к наипростейшему варианту. Более продвинутые протоколы могут допускать передачу файлов или потоковое аудио и видео. Более продвинутое использование скрытых сервисов может уменьшить риски при открытии сервиса с публичным доступом. Также можно использовать разделённые сервисы или более сложно настроенные сервисы для предотвращения атак. Естественно, приветствуются идеи и помощь в развитии проекта.