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