Проект невидимый интернет (I2P)

I2P - анонимная сеть, которая предоставляет простой слой, который может использоваться приложениями для анонимного и безопасного обмена сообщениями. Сама сеть основана на сообщениях (как IP), но есть и библиотека для организации гарантированной потоковой связи поверх сети (как TCP). Все коммуникации используют сквозное шифрование (всего используется четыре слоя шифрования при отправке сообщения), и даже сами абоненты ("направления") являются криптографическими идентификаторами (в сущности парой публичных ключей).

Как работает I2P

Чтобы анонимизировать отправляемое сообщение, каждое приложение-клиент имеет свой I2P "маршрутизатор", строящий несколько входящих и исходящих "туннелей" - последовательность пиров, передающих сообщения в одном направлении (к и от клиента соответственно). В свою очередь, когда один клиент хочет послать сообщение другому, он передаёт это сообщение через один из своих исходящих туннелей, нацеливаясь на один из входящих туннелей другого клиента, в конечном итоге достигая пункта назначения. Каждый участник сети выбирает длину этих туннелей, и таким образом идёт на компромисс между анонимностью, временем ожидания и пропускной способностью в соответствии со своими нуждами. В результате, количество пиров, ретранслирующих каждое сообщение из конца в конец, сведено к абсолютному минимуму, необходимому, чтобы удовлетворить "модель угрозы" (уровень желаемой безопасности) как отправителя, так и получателя.

Когда клиент обращается к другому клиенту в первый раз, он обращается к полностью распределенной "сетевой базе данных" - распределённой хэш-таблице (DHT) особой структуры, основанной на алгоритме Kademlia, чтобы быстро найти входящие туннели другого клиента. Следующие сообщения между двумя клиентами обычно содержат эти данные, поэтому запросы к сети более не нужны.

Более подробно о том, как работает I2P.

Как вы можете это использовать?

Внутри сети I2P приложения не ограничены в способах коммуникации - те, что обычно используют UDP, могут использовать базовый функционал I2P, а те, что обычно используют TCP, могут использовать TCP-подобную потоковую библиотеку. У нас есть приложение общего TCP/IP моста ("I2PTunnel"), которое позволяет людям пересылать TCP потоки в I2P сеть также как получать потоки извне сети и пересылать их на определённый TCP/IP адрес.

I2PTunnel в настоящее время позволяет людям иметь свой собственный анонимный сайт ("eepsite"), запустив обычный веб-сервер и указав на него серверный туннель I2PTunnel. Такой сайт доступен в сети I2P анонимно с помощью обычного браузера, настроенного на использование I2PTunnel HTTP прокси ("eepproxy"). Кроме того, мы используем эту же технику в работе анонимной IRC сети (в которой IRC сервер анонимен, а стандартные IRC-клиенты используют I2PTunnel для соединения с ним). Также ведется разработка других приложений, например, работы над оптимизированным приложением сегментированной передачи файлов (а-ля BitTorrent), распределенным хранилищем данных (а-ля Freenet / MNet) и системой блогов (полностью распределенным аналогом LiveJournal), но в данный момент они ещё не готовы к использованию.

По своей сути I2P не является сетью для доступа во "внешний Интернет" - тот, кому Вы посылаете сообщение представлен криптографическим идентификатором, а не каким-либо IP-адресом, поэтому сообщение должно быть адресовано кому-то, у кого запущен I2P. Тем не менее вполне возможно, что тот пользователь предоставляет внешний прокси, позволяя Вам анонимно использовать своё Интернет соединение. Для примера, "eepproxy" обрабатывает не-I2P адреса (например, "http://www.i2p.net") и направляет их по определённому адресу, на котором запущен HTTP-прокси squid, предоставляющий возможность простого анонимного сёрфинга в "обычном" вебе. Простые внешние прокси, такие как вышеназванный, обычно доступны на не очень длительный срок по нескольким причинам (они включают в себя затраты на поддержку, а также из-за вопросов анонимности и безопасности, которые они поднимают), но в некоторых случаях этот путь может быть приемлем.

Команда разработчиков I2P - это группа, открытая для всех кто заинтересован принять участие, и весь код проекта - это открытый код. Ядро I2P SDK и текущая реализация роутера выполнены на языке Java (в настоящий момент поддерживаются реализации от sun и kaffe, реализация поддержки gcj запланирована на будущее), также существует простое основанное на сокетах API для доступа к сети из других языков (библиотека для C уже доступна, а для Python и Perl в процессе разработки). Проект активно разрабатывается, и хоть ещё и не достиг стадии релиза 1.0, но текущий план развития проекта описывает дальнейший путь нашей команды.