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