]> Cypherpunks.ru repositories - nncp.git/blob - doc/usecases.ru.texi
Rename nncp-*cfg commands to have the common prefix
[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
89 @node UsecaseQoSRU
90 @subsection Медленная/дорогая связь для больших объёмов данных, плохой QoS
91
92 Представьте, что относительно дешёвый 2 TiB переносной жёсткий диск вы
93 отдаёте кому-нибудь утром каждый день (и забираете назад вечером). Это
94 равносильно 185 мегабитному качественному однонаправленному каналу
95 связи. Как насчёт большего количества и бОльших жёстких дисков? Этот
96 метод обмена данными называется
97 @url{https://ru.wikipedia.org/wiki/%D0%A4%D0%BB%D0%BE%D0%BF%D0%BF%D0%B8%D0%BD%D0%B5%D1%82,
98 флоппинет}.
99
100 NNCP поддерживает @ref{Niceness, приоритезацию трафика}: каждый пакет
101 имеет уровень "приятности", который гарантирует что он будет обработан
102 раньше или позднее остальных. Почти все команды имеют соответствующую
103 опцию:
104
105 @verbatim
106 % nncp-file -nice 32 myfile node:dst
107 % nncp-xfer -nice 192 /mnt/shared
108 % nncp-call -nice 224 bob
109 [...]
110 @end verbatim
111
112 Огромные файлы могут быть разбиты на маленькие @ref{Chunked, части},
113 давая возможность передачи, по сути, любых объёмов используя накопители
114 небольших размеров.
115
116 @node UsecaseNoLinkRU
117 @subsection Экстремальные наземные окружающие условия, нет связи
118
119 Это, в некотором роде, вариант очень медленного канала связи. Offline
120 методы доставки -- единственный выбор. Просто отправьте, файлы как было
121 показано в предыдущем разделе, но используйте переносные накопители для
122 передачи пакетов другим узлам.
123
124 Представьте, что вы послали два файла узлу @emph{bob}. Вставьте USB
125 устройство хранения, подмонтируйте и запустите @ref{nncp-xfer}:
126
127 @verbatim
128 % nncp-xfer -node bob /media/usbstick
129 @end verbatim
130
131 чтобы скопировать все исходящие пакеты относящиеся к @emph{bob}.
132 Используйте @option{-mkdir} опцию чтобы создать все необходимые
133 директории на накопителе, если их нет (например когда запускаемся первый
134 раз).
135
136 Если вы используете один и тот же накопитель для передачи данных и к
137 @emph{bob} и к @emph{alice}, то тогда просто не указывайте
138 @option{-node} опцию, чтобы скопировать все доступные исходящие пакеты.
139
140 @verbatim
141 % nncp-xfer /media/usbstick
142 @end verbatim
143
144 Размонтируйте и передайте накопитель Бобу и Алисе. Когда они вставят
145 накопитель в свои компьютеры, то выполнят точно такую же команду:
146
147 @verbatim
148 % nncp-xfer /media/usbstick
149 @end verbatim
150
151 чтобы найти все пакеты относящиеся к их узлу и локально скопируют для
152 дальнейшей обработки. @command{nncp-xfer} это единственная команда
153 используемая с переносными устройствами хранения.
154
155 @node UsecaseF2FRU
156 @subsection Частные, изолированные MitM/Sybil-устойчивые сети
157
158 Все Интернет соединения могут быть прослушаны и сфальсифицированы. Вы
159 @strong{вынуждены} использовать шифрование и аутентификацию для
160 безопасности. Но очень сложно обезопасить метаданные, которые утекают
161 при каждой online сессии. Когда вы запускаете свой новый сверкающий
162 программный сервер, то имейте в виду, что может существовать огромное
163 количество поддельных узлов пытающихся произвести
164 @url{https://en.wikipedia.org/wiki/Sybil_attack, Sybil атаку}. Открытые
165 узел-к-узлу (peer-to-peer) сети опасны.
166
167 Наиболее популярный криптографический протокол в Интернете это
168 @url{https://ru.wikipedia.org/wiki/TLS, TLS}, который крайне сложно
169 правильно реализовать и сконфигурировать для двусторонней аутентификации
170 собеседников. Не все конфигурации TLS обладают свойством
171 @url{https://ru.wikipedia.org/wiki/Perfect_forward_secrecy, совершенной
172 прямой секретности} -- все ранее перехваченные пакеты могут быть
173 прочтены если приватные ключи скомпрометированы.
174
175 Друг-к-другу (friend-to-friend) сети, "тёмные сети" (darknet) могут
176 нивелировать возможные риски связанные с поддельными и фиктивными
177 узлами. Хотя они и сложнее в поддержке и требуют больше затрат на
178 построение.
179
180 @ref{nncp-daemon, TCP демон} NNCP использует
181 @url{http://noiseprotocol.org/, Noise-IK} протокол для двусторонней
182 аутентификации узлов и предоставляет эффективный (оба участника могут
183 отослать полезную нагрузку сразу же в самом первом пакете) безопасный
184 транспорт с свойством совершенной прямой секретности.
185
186 @verbatim
187 % nncp-daemon -bind [::]:5400
188 @end verbatim
189 запустит TCP демон, который будет слушать входящие соединения на всех
190 интерфейсах.
191
192 @verbatim
193 % nncp-call bob
194 @end verbatim
195 попытается подключиться к известному TCP-адресу узла @emph{bob} (взятого
196 из конфигурационного файла), послать все связанные с ним исходящие
197 пакеты и получить от него. Все прерванные передачи будут автоматически
198 возобновлены.
199
200 @node UsecaseAirgapRU
201 @subsection Высокозащищённые изолированные компьютеры с воздушным зазором
202
203 Если вы сильно беспокоитесь о безопасности, то компьютер с
204 @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),
205 воздушным зазором} может будет вашим единственным позволительным
206 выбором. Компьютер без каких-либо модемов, проводных и беспроводных
207 сетей. Очевидно, что единственная возможность обмениваться почтой и
208 файлами -- использовать физически переносимые устройства хранения типа
209 CD-ROM, жёстких дисков, лент и USB накопителей (худший вариант, из-за
210 сложности подобных устройств).
211
212 Предполагаем что у вас есть ещё один собственный узел, стоящий "до"
213 безопасного, который делает базовые проверки полученных накопителей,
214 возможно перезаписывая данные с USB/жёстких дисков на CD-RW.
215
216 NNCP из коробки поддерживает ретрансляцию пакетов.
217
218 @verbatim
219 neigh:
220   bob:
221     [...]
222     addrs:
223       lan: [fe80::5400%igb0]:5400
224   bob-airgap:
225     [...]
226     via: [bob]
227 @end verbatim
228
229 Такой @ref{Configuration, конфигурационный файл} говорит что у нас есть
230 два известных соседа: @emph{bob} и @emph{bob-airgap}. @emph{bob}
231 доступен через online соединение, используя @emph{lan} адрес.
232 @emph{bob-airgap} доступен путём посылки промежуточного ретранслируемого
233 пакета через узел @emph{bob}.
234
235 Любая команда типа @command{nncp-file myfile bob-airgap:} автоматически
236 создаст инкапсулированный пакет: один непосредственно для целевой точки,
237 а другой несущий его для промежуточного узла.
238
239 Имейте в виду, что узел-ретранслятор ничего не знает о внутреннем
240 пакете, кроме его полного размера и приоритета. Все промежуточные пакеты
241 тоже зашифрованы: используя хорошо известную технологию
242 @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,
243 луковой маршрутизации}. @emph{bob} не может прочитать пакеты
244 @emph{bob-airgap}.
245
246 @node UsecaseCensorRU
247 @subsection Обход сетевой цензуры, здоровье
248
249 Это тоже подвид плохого канала связи. Некоторые правительства склонны к
250 запрету @strong{любого} вида личного (приватного) общения между людьми,
251 разрешая только доставку развлекательного контента и доступ к популярным
252 социальным сетям (которые уже вовсю наводнены рекламой, локально
253 исполняемым @url{https://www.gnu.org/philosophy/free-sw.ru.html,
254 проприетарным} JavaScript кодом (для слежкой за действиями пользователя,
255 сбором данных), бесстыдно и бессовестно эксплуатируя базовые потребности
256 человека в общении).
257
258 Это их естественное желание. Но никто вас не заставляет насильно
259 подчиняться огромным корпорациям типа Apple, Google или Microsoft. Ваш
260 выбор это создавать изолированные друг-к-другу сети с кучами безобидного
261 контента и приватными сообщениями. Только хищники тихо наблюдают за
262 своими жертвами в мире млекопитающих -- слежка и чувство что вы жертва,
263 сделавшая что-то плохое, вредит вашему здоровью.
264
265 @node UsecaseSpyRU
266 @subsection Разведка, шпионаж, тайная агентура
267
268 Эти ребята знают насколько небезопасен Интернет, несовместим с
269 понятием приватности. Им необходим быстрый сброс и забор данных. Нет
270 возможности провести несколько итераций туда-обратно (round trip) --
271 только сбросить данные, выстрелить и забыть. Опять же, это может быть
272 переносной накопитель и/или
273 @url{https://en.wikipedia.org/wiki/USB_dead_drop, USB тайник} (dead drop),
274 @url{https://en.wikipedia.org/wiki/PirateBox, PirateBox}ы,
275 @url{https://en.wikipedia.org/wiki/Short-range_agent_communications,
276 связь малой дальности (SRAC)}. Короткоживущие сети малой дальности типа
277 Bluetooth и WiFi могут быть и довольно быстрыми, позволяя быстро
278 "выстреливать" порциями исходящих пакетов.
279
280 Очень важное свойство -- компрометация этих тайников или накопителей не
281 должна быть ни фатальна, ни даже опасна. Пакеты посылаемые через сети
282 или обмениваемые через устройства -- @ref{Encrypted, зашифрованы} по
283 принципу точка-точка (но, к сожалению, без совершенной прямой
284 секретности). Никаких имён файлов, получателей почтовых сообщений не
285 видно.
286
287 Общение узлов между собой происходит в, так называемой, @ref{Spool,
288 спул} области: директории содержащей только необработанные зашифрованные
289 пакеты. После передачи пакета вы всё-равно не сможете его прочитать:
290 необходимо запустить другую фазу: @ref{nncp-toss, распаковку}, которая
291 использует ваши приватные криптографические ключи. То есть, даже если вы
292 потеряете свой компьютер, устройства хранения и тому прочее -- это не
293 так плохо, потому-что вы не носите с собой приватные ключи (ведь так?),
294 вы не "распаковываете" эти пакеты сразу же на том же самом устройстве.
295 Распаковка (чтение этих зашифрованных пакетов с извлечением переданных
296 файлов и почтовых сообщений) может и должна бы быть произведена на
297 отдельном компьютере (@ref{nncp-cfgmin} команда может помочь с созданием
298 конфигурационного файла без приватных ключей для этой цели).