]> Cypherpunks.ru repositories - nncp.git/blob - doc/usecases.ru.texi
Chunked notice in use cases
[nncp.git] / doc / usecases.ru.texi
1 @node Сценарии использования
2 @section Сценарии использования
3
4 @menu
5 * Доступность почтового сервера время от времени: UsecaseMailRU.
6 * Легковесная и быстрая замена POP3/IMAP4: UsecasePOPRU.
7 * Ненадёжный/дорогой канал связи: UsecaseUnreliableRU.
8 * Медленная/дорогая связь для больших объёмов данных, плохой QoS: UsecaseQoSRU.
9 * Экстремальные наземные окружающие условия, нет связи: UsecaseNoLinkRU.
10 * Частные, изолированные MitM/Sybil-устойчивые сети: UsecaseF2FRU.
11 * Высоко защищённые изолированные компьютеры с воздушным зазором: UsecaseAirgapRU.
12 * Обход сетевой цензуры, здоровье: UsecaseCensorRU.
13 * Разведка, шпионаж, тайная агентура: UsecaseSpyRU.
14 @end menu
15
16 @node UsecaseMailRU
17 @subsection Доступность почтового сервера время от времени
18
19 Представьте, что у вас есть собственный @url{http://www.postfix.org/,
20 Postfix} SMTP сервер подключённый к Интернету. Но вы читаете и пишете
21 почтовые сообщения на своём ноутбуке, который подключается к нему лишь
22 время от времени. Как опустошить очередь из ожидающих сообщений когда
23 ноутбук подключён?
24
25 Одна из возможностей это войти на сервер и сделать что-то типа
26 @command{postqueue -f}, но по-умолчанию у вас есть только несколько дней
27 на это, плюс отправитель будет получать уведомления о том что его
28 сообщение всё ещё не доставлено. Кроме того, вы должны использовать
29 безопасный канал связи (SSH, VPN, итд).
30
31 Другая возможность это использовать POP3/IMAP4 сервер, но это слишком
32 переусложнённо и громоздко для такой простой задачи. Не вариант.
33 @url{https://ru.wikipedia.org/wiki/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF),
34 KISS}!
35
36 Просто скажите вашим обоим Postfix-ам (на сервере и ноутбуке) отправлять
37 сообщения через NNCP (@ref{nncp-mail}) на заданный узел. Это делается
38 аналогично тому как с UUCP, и описано в
39 @url{http://www.postfix.org/UUCP_README.html, документации Postfix}.
40
41 Читайте @ref{Postfix, здесь} для более подробной информации. Вся почта
42 будет сохранятся в NNCP @ref{Spool, спуле}, который после обмена данных
43 и распаковки вызовет локальный @command{sendmail} для доставки почты,
44 как будто это произошло на этой же машине.
45
46 @node UsecasePOPRU
47 @subsection Легковесная и быстрая замена POP3/IMAP4
48
49 @ref{nncp-daemon} может быть соединён с @ref{nncp-caller} длительное
50 время -- он создаёт TCP соединение на многие часы. Когда SMTP сервер
51 получает письмо, то вызывает @ref{nncp-mail} для создания исходящего
52 зашифрованного пакета. Демон ежесекундно проверяет исходящую директорию
53 и сразу же посылает оповещение о недоставленных пакетах противоположной
54 стороне, которая сразу же их может скачать.
55
56 Всего несколько дюжин байтов оповещают о входящих пакетах, дюжины байт
57 начинающие доставку этих пакетов. Почтовые пакеты сжимаются (POP3 и
58 IMAP4, как правило, нет). У вас легковесный, сжатый, надёжный, с низкими
59 задержками канал связи для почты с сильным шифрованием и двусторонней
60 аутентификацией!
61
62 @node UsecaseUnreliableRU
63 @subsection Ненадёжный/дорогой канал связи
64
65 Представьте, что у вас медленный модем/радио/спутниковый канал связи,
66 который часто обрывается и вызывает timeout у TCP. Не все HTTP серверы
67 поддерживают возобновляемые скачивания. SMTP вообще не поддерживает
68 возобновление оборванного приёма и тяжёлые сообщения становится очень
69 проблематично получить. Более того, каждый обрыв может приводить к
70 отсылке данных с самого начала, что не всегда по карману.
71
72 Просто отправьте вашу @ref{nncp-mail, почту} и @ref{nncp-file, файлы}
73 через NNCP. Вы сможете использовать или offline методы доставки --
74 читайте о них в следующем разделе, либо использовать поставляемый NNCP
75 @ref{nncp-daemon, TCP демон}.
76
77 Команды:
78
79 @verbatim
80 % nncp-file file_i_want_to_send bob:
81 % nncp-file another_file bob:movie.avi
82 @end verbatim
83
84 добавят в очередь отправки два файла для узла @emph{bob}. Выстрелил и
85 забыл! Теперь это работа демона (или offline передачи) доставить частями
86 эти файлы до удалённой системы когда она будет доступна.
87
88 @node UsecaseQoSRU
89 @subsection Медленная/дорогая связь для больших объёмов данных, плохой QoS
90
91 Представьте, что относительно дешёвый 2 TiB переносной жёсткий диск вы
92 отдаёте кому-нибудь утром каждый день (и забираете назад вечером). Это
93 равносильно 185 мегабитному качественному однонаправленному каналу
94 связи. Как насчёт большего количества и бОльших жёстких дисков? Этот
95 метод обмена данными называется
96 @url{https://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%BE%D0%BF%D0%BF%D0%B8%D0%BD%D0%B5%D1%82,
97 флоппинет}.
98
99 NNCP поддерживает @ref{Niceness, приоритезацию трафика}: каждый пакет
100 имеет уровень "приятности", который гарантирует что он будет обработан
101 раньше или позднее остальных. Почти все команды имеют соответствующую
102 опцию:
103
104 @verbatim
105 % nncp-file -nice 32 myfile node:dst
106 % nncp-xfer -nice 192 /mnt/shared
107 % nncp-call -nice 224 bob
108 [...]
109 @end verbatim
110
111 Огромные файлы могут быть разбиты на маленькие @ref{Chunked, части},
112 давая возможность передачи, по сути, любых объёмов используя накопители
113 небольших размеров.
114
115 @node UsecaseNoLinkRU
116 @subsection Экстремальные наземные окружающие условия, нет связи
117
118 Это, в некотором роде, вариант очень медленного канала связи. Offline
119 методы доставки -- единственный выбор. Просто отправьте, файлы как было
120 показано в предыдущем разделе, но используйте переносные накопители для
121 передачи пакетов другим узлам.
122
123 Представьте, что вы послали два файла узлу @emph{bob}. Вставьте USB
124 устройство хранения, подмонтируйте и запустите @ref{nncp-xfer}:
125
126 @verbatim
127 % nncp-xfer -node bob /media/usbstick
128 @end verbatim
129
130 чтобы скопировать все исходящие пакеты относящиеся к @emph{bob}.
131 Используйте @option{-mkdir} опцию чтобы создать все необходимые
132 директории на накопителе, если их нет (например когда запускаемся первый
133 раз).
134
135 Если вы используете один и тот же накопитель для передачи данных и к
136 @emph{bob} и к @emph{alice}, то тогда просто не указывайте
137 @option{-node} опцию, чтобы скопировать все доступные исходящие пакеты.
138
139 @verbatim
140 % nncp-xfer /media/usbstick
141 @end verbatim
142
143 Размонтируйте и передайте накопитель Бобу и Алисе. Когда они вставят
144 накопитель в свои компьютеры, то выполнят точно такую же команду:
145
146 @verbatim
147 % nncp-xfer /media/usbstick
148 @end verbatim
149
150 чтобы найти все пакеты относящиеся к их узлу и локально скопируют для
151 дальнейшей обработки. @command{nncp-xfer} это единственная команда
152 используемая с переносными устройствами хранения.
153
154 @node UsecaseF2FRU
155 @subsection Частные, изолированные MitM/Sybil-устойчивые сети
156
157 Все Интернет соединения могут быть прослушаны и сфальсифицированы. Вы
158 @strong{вынуждены} использовать шифрование и аутентификацию для
159 безопасности. Но очень сложно обезопасить метаданные, которые утекают
160 при каждой online сессии. Когда вы запускаете свой новый сверкающий
161 программный сервер, то имейте в виду, что может существовать огромное
162 количество поддельных узлов пытающихся произвести
163 @url{https://en.wikipedia.org/wiki/Sybil_attack, Sybil атаку}. Открытые
164 узел-к-узлу (peer-to-peer) сети опасны.
165
166 Наиболее популярный криптографический протокол в Интернете это
167 @url{https://ru.wikipedia.org/wiki/TLS, TLS}, который крайне сложно
168 правильно реализовать и сконфигурировать для двусторонней аутентификации
169 собеседников. Не все конфигурации TLS обладают свойством
170 @url{https://ru.wikipedia.org/wiki/Perfect_forward_secrecy, совершенной
171 прямой секретности} -- все ранее перехваченные пакеты могут быть
172 прочтены если приватные ключи скомпрометированы.
173
174 Друг-к-другу (friend-to-friend) сети, "тёмные сети" (darknet) могут
175 нивелировать возможные риски связанные с поддельными и фиктивными
176 узлами. Хотя они и сложнее в поддержке и требуют больше затрат на
177 построение.
178
179 @ref{nncp-daemon, TCP демон} NNCP использует
180 @url{http://noiseprotocol.org/, Noise-IK} протокол для двусторонней
181 аутентификации узлов и предоставляет эффективный (оба участника могут
182 отослать полезную нагрузку сразу же в самом первом пакете) безопасный
183 транспорт с свойством совершенной прямой секретности.
184
185 @verbatim
186 % nncp-daemon -bind [::]:5400
187 @end verbatim
188 запустит TCP демон, который будет слушать входящие соединения на всех
189 интерфейсах.
190
191 @verbatim
192 % nncp-call bob
193 @end verbatim
194 попытается подключиться к известному TCP-адресу узла @emph{bob} (взятого
195 из конфигурационного файла), послать все связанные с ним исходящие
196 пакеты и получить от него. Все прерванные передачи будут автоматически
197 возобновлены.
198
199 @node UsecaseAirgapRU
200 @subsection Высокозащищённые изолированные компьютеры с воздушным зазором
201
202 Если вы сильно беспокоитесь о безопасности, то компьютер с
203 @url{https://ru.wikipedia.org/wiki/%D0%92%D0%BE%D0%B7%D0%B4%D1%83%D1%88%D0%BD%D1%8B%D0%B9_%D0%B7%D0%B0%D0%B7%D0%BE%D1%80_(%D1%81%D0%B5%D1%82%D0%B8_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85),
204 воздушным зазором} может будет вашим единственным позволительным
205 выбором. Компьютер без каких-либо модемов, проводных и беспроводных
206 сетей. Очевидно, что единственная возможность обмениваться почтой и
207 файлами -- использовать физически переносимые устройства хранения типа
208 CD-ROM, жёстких дисков, лент и USB накопителей (худший вариант, из-за
209 сложности подобных устройств).
210
211 Предполагаем что у вас есть ещё один собственный узел, стоящий "до"
212 безопасного, который делает базовые проверки полученных накопителей,
213 возможно перезаписывая данные с USB/жёстких дисков на CD-RW.
214
215 NNCP из коробки поддерживает ретрансляцию пакетов.
216
217 @verbatim
218 neigh:
219   bob:
220     [...]
221     addrs:
222       lan: [fe80::5400%igb0]:5400
223   bob-airgap:
224     [...]
225     via: [bob]
226 @end verbatim
227
228 Такой @ref{Configuration, конфигурационный файл} говорит что у нас есть
229 два известных соседа: @emph{bob} и @emph{bob-airgap}. @emph{bob}
230 доступен через online соединение, используя @emph{lan} адрес.
231 @emph{bob-airgap} доступен путём посылки промежуточного ретранслируемого
232 пакета через узел @emph{bob}.
233
234 Любая команда типа @command{nncp-file myfile bob-airgap:} автоматически
235 создаст инкапсулированный пакет: один непосредственно для целевой точки,
236 а другой несущий его для промежуточного узла.
237
238 Имейте в виду, что узел-ретранслятор ничего не знает о внутреннем
239 пакете, кроме его полного размера и приоритета. Все промежуточные пакеты
240 тоже зашифрованы: используя хорошо известную технологию
241 @url{https://ru.wikipedia.org/wiki/%D0%9B%D1%83%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F,
242 луковой маршрутизации}. @emph{bob} не может прочитать пакеты
243 @emph{bob-airgap}.
244
245 @node UsecaseCensorRU
246 @subsection Обход сетевой цензуры, здоровье
247
248 Это тоже подвид плохого канала связи. Некоторые правительства склонны к
249 запрету @strong{любого} вида личного общения между людьми, разрешая
250 только доставку развлекательного контента и доступ к популярным
251 социальным сетям (которые уже вовсю наводнены рекламой, локально
252 исполняемым @url{https://www.gnu.org/philosophy/free-sw.ru.html,
253 проприетарным} JavaScript кодом (для слежкой за действиями
254 пользователя, сбором данных), бесстыдно и бессовестно эксплуатируя
255 базовые потребности человека в общении).
256
257 Это их естественное желание. Но никто вас не заставляет насильно
258 подчиняться огромным корпорациям типа Apple, Google или Microsoft. Ваш
259 выбор это создавать изолированные друг-к-другу сети с кучами безобидного
260 контента и приватными сообщениями. Только хищники тихо наблюдают за
261 своими жертвами в мире млекопитающих -- слежка и чувство что вы жертва,
262 сделавшая что-то плохое, вредит вашему здоровью.
263
264 @node UsecaseSpyRU
265 @subsection Разведка, шпионаж, тайная агентура
266
267 Эти ребята знают насколько небезопасное место Интернет, несовместимое с
268 понятием приватности. Им необходим быстрый сброс и забор данных. Без
269 возможности нескольких итераций туда-обратно (round trip) -- только
270 сбросить данные, выстрелить и забыть. Опять же, это может быть
271 переносной накопитель и/или
272 @url{https://en.wikipedia.org/wiki/USB_dead_drop, USB тайник},
273 @url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}ы,
274 @url{https://en.wikipedia.org/wiki/Short-range_agent_communications,
275 связь малой дальности (SRAC)}. Короткоживущие сети малой дальности типа
276 Bluetooth и WiFi могут быть и довольно быстрыми, позволяя быстро
277 "выстреливать" порциями исходящих пакетов.
278
279 Очень важное свойство -- компрометация этих тайников или накопителей не
280 должна быть ни фатальна, ни даже опасна. Пакеты посылаемые через сети
281 или обмениваемые через устройства -- @ref{Encrypted, зашифрованы} по
282 принципу точка-точка (но, к сожалению, без совершенной прямой
283 секретности). Никаких имён файлов, получателей почтовых сообщений не
284 видно.
285
286 Общение узлов между собой происходит в, так называемой, @ref{Spool,
287 спул} области: директории содержащей только необработанные зашифрованные
288 пакеты. После передачи пакета вы всё-равно не сможете его прочитать:
289 необходимо запустить другую фазу: @ref{nncp-toss, распаковку}, которая
290 использует ваши приватные криптографические ключи. То есть, даже если вы
291 потеряете свой компьютер, устройства хранения и тому прочее -- это не
292 так плохо, потому-что вы не носите с собой приватные ключи (ведь так?),
293 вы не "распаковываете" эти пакеты сразу же на том же самом устройстве.
294 Распаковка (чтение этих зашифрованных пакетов с извлечением переданных
295 файлов и почтовых сообщений) может и должна бы быть произведена на
296 отдельном компьютере (@ref{nncp-mincfg} команда может помочь с созданием
297 конфигурационного файла без приватных ключей для этой цели).