Введение
I2P/Bote - это бессерверный псевдонимный сервис обмена электронными сообщениями через сеть I2P.
Электронные письма хранятся в зашифрованном виде в распределённой хеш-таблице Kademlia, сформированной всеми узлами I2P/Bote.
Электронные письма могут быть отправлены через некоторое число промежуточных узлов (Реле) (для усиления анонимности) или напрямую на несколько узлов-хранителей (для более быстрой доставки).
Все узлы равнозначны.
Не существует "суперузла" или специально назначеных реле/хранителей.
Любой участник является потенциальным реле или хранителем.
Перед отправкой письмо разбивается на пакеты по 30 КиБ или менее и шифруется при помощи публичного ключа получателя.
Полученые пакеты передаются на хранение в распределённую хеш-таблицу.
Пакеты сохраняются в распределённой хеш-таблице Kademlia с избыточностью.
Сохранёные пакеты хранятся на узлах в течении 100 дней, в течении которых получатель может выгрузить их.
Если узел достиг лимита дискового пространства, доступного для хранилища, и нет пакетов для удаления, то новые запросы на хранение будут отклонены.
Ниже находится схемотичная иллюстрация маршрутизации пакетов от отправителя до получателя через реле:
.-------. .-------. .-------------.
| Реле | ---> | Реле | ---> | Сохранитель | -----------.
_ `-------' `-------' `-------------' `\
/` |
/ |
.-------------. .-------. .-------. .-------------. |
| Отправитель |--> | Реле | ---> | Реле | ---> | Сохранитель | ------. |
`-------------' `-------' `-------' `-------------' `\ |
\ | |
_\/ | |
.-------. .-------. .-------------. | |
| Реле | ---> | Реле | ---> | Сохранитель | -. | |
`-------' `-------' `-------------' `\ | |
| | |
V V V
.--------------- Kademlia DHT -------------------------.
| .---------. |
| .---------. | Узел | |
| | Узел | .---------. |Хранитель| |
| |Хранитель| | Узел | `---------' |
| `---------' |Хранитель| |
| `---------' .---------. |
| .---------. .---------. | Узел | |
| | Узел | | Узел | .---------. |Хранитель| |
| |Хранитель| |Хранитель| | Узел | `---------' |
| `---------' `---------' |Хранитель| |
| `---------' |
`------------------------------------------------------'
| | |
.-------. .-------. .---------. / | |
| Реле | <--- | Реле | <--- | Сборщик | <---' | |
/ `-------' `-------' `---------' | |
/ | |
\/_ | |
.------------. .-------. .-------. .---------. / |
| Получатель | <-- | Реле | <--- | Реле | <--- | Сборщик | <--------' |
`------------' `-------' `-------' `---------' |
|\ |
\ |
\ .-------. .-------. .---------. /
| Реле | <--- | Реле | <--- | Сборщик | <-------------'
`-------' `-------' `---------'
Число реле, через которое будет отправлено или получено письмо, является настраиваемым значением.
Для большей производительности, но с уменьшением анонимности, возможно сохранение или получение без реле, т.е. отправитель и получатель общаются с узлами-хранителями напрямую.
Если оба, отправитель и получатель, выбирают отправку без реле, то схема выглядит следующим образом:
.-------------.
| Отправитель | ------------.
`-------------' `\
|
V
.------------------- Kademlia DHT ---------------------.
| .---------. |
| .---------. | Storage | |
| | Storage | .---------. | Node | |
| | Node | | Storage | `---------' |
| `---------' | Node | |
| `---------' .---------. |
| .---------. .---------. | Storage | |
| | Storage | | Storage | .---------. | Node | |
| | Node | | Node | | Storage | `---------' |
| `---------' `---------' | Node | |
| `---------' |
`------------------------------------------------------'
|
|
.------------. /
| Получатель | <-------------'
`------------'
I2P/Bote использует строки с кодированием ключей в Base32/Base64.
Их называют Почтовое назначение и они имеют переменную длину, в зависимости от выбранного комплекта алгоритмов.
Детали можно узнать в разделе Криптография.