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