--- /dev/null
+doc/news.ru.texi
\ No newline at end of file
+++ /dev/null
-doc/thanks.texi
\ No newline at end of file
--- /dev/null
+* Applied Cryptography (https://www.schneier.com/books/applied_cryptography/) (C) 1996 Bruce Schneier.
+* Strong Password-Only Authenticated Key Exchange (http://tnlandforms.us/cns05/speke.pdf) (C) 1996 David P. Jablon.
+* Augmented Encrypted Key Exchange (https://www.cs.columbia.edu/~smb/papers/aeke.pdf): a Password-Based Protocol Secure Against Dictionary Attacks and Password File Compromise (C) Steven M. Belloving, Michael Merrit.
+* Watson Ladd <watsonbladd@gmail.com> for suggestion of Elligator (http://elligator.cr.yp.to/) encoding.
+* Password Hashing Competition for Argon2 (https://password-hashing.net/#argon2).
+* Chaffing and Winnowing: Confidentiality without Encryption (http://people.csail.mit.edu/rivest/chaffing-980701.txt) (C) Ronald L. Rivest
+++ /dev/null
-doc/todo.texi
\ No newline at end of file
--- /dev/null
+* Randomize ports usage
plantuml -tutxt handshake.txt
govpn.info: *.texi handshake.utxt
- $(MAKEINFO) govpn.texi
+ $(MAKEINFO) index.texi
govpn.html: *.texi handshake.utxt
rm -f govpn.html/*.html
- $(MAKEINFO) --html --css-include=style.css -o govpn.html govpn.texi
+ $(MAKEINFO) --html \
+ --css-include=style.css \
+ --set-customization-variable SHOW_TITLE=0 \
+ --set-customization-variable DATE_IN_HEADER=1 \
+ -o govpn.html index.texi
@node О демоне
-@cindex About (russian)
-@cindex Description (russian)
-@cindex О демоне
-@cindex Описание
-@cindex Вступление
-@unnumbered Подробнее о демоне GoVPN
+@section Подробнее о демоне GoVPN
GoVPN это простой демон виртуальных частных сетей, код которого нацелен
на лёгкость чтения и анализа, безопасность, устойчивость к DPI/цензуре.
@itemize
@item
-Свободное программное обеспечение, копилефт: лицензировано под условиями
-@url{https://www.gnu.org/licenses/gpl-3.0.ru.html, GPLv3+}.
+@url{https://www.gnu.org/philosophy/free-sw.ru.html, Свободное программное
+обеспечение}, @url{https://www.gnu.org/philosophy/pragmatic.ru.html, копилефт}:
+лицензировано под условиями @url{https://www.gnu.org/licenses/gpl-3.0.ru.html,
+GPLv3+}.
@item
Быстрый сильный @ref{PAKE, аутентифицируемый по парольной фразе}
A-EKE (Diffie-Hellman Augmented Encrypted Key Exchange)).
@item
-@ref{Verifier structure, Ð\9dеÑ\81баланÑ\81иÑ\80ованнÑ\8bе аÑ\83Ñ\82енÑ\82иÑ\84икаÑ\86ионнÑ\8bе Ñ\82окены}
+@ref{Verifier structure, Ð\9dеÑ\81баланÑ\81иÑ\80ованнÑ\8bе веÑ\80иÑ\84икаÑ\82оÑ\80ы}
устойчивые к внесетевым (offline) атакам по словарю. Используют
усиленный по CPU и памяти алгоритм хэширования. Злоумышленник не может
замаскироваться под клиента даже скомпрометировав базу данных токенов
@item
Защита от атак повторного воспроизведения (replay) (используя
-одноразовые MAC и опциональное условие синхронизации времени).
+одноразовые MAC и опциональное условие @ref{Timesync, синхронизации времени}).
@item
Встроенные функции пересогласования ключей (ротация сессионных ключей) и
-@cindex About
-@cindex Description
-@cindex Introduction
-
GoVPN is simple free software virtual private network daemon,
aimed to be reviewable, secure and
@url{https://en.wikipedia.org/wiki/Deep_packet_inspection, DPI}/censorship-resistant.
+See also this page @ref{О демоне, on russian}.
+
@itemize
@item
-Copylefted free software: licenced under
-@url{https://www.gnu.org/licenses/gpl-3.0.html, GPLv3+}.
+@url{https://www.gnu.org/philosophy/pragmatic.html, Copylefted}
+@url{https://www.gnu.org/philosophy/free-sw.html, free software}:
+licenced under @url{https://www.gnu.org/licenses/gpl-3.0.html, GPLv3+}.
@item
Fast strong @ref{PAKE, passphrase authenticated} augmented
property.
@item
-Replay attack protection (using one-time MACs and optional time
-synchronization requirement).
+Replay attack protection (using one-time MACs and optional
+@ref{Timesync, time synchronization} requirement).
@item
Built-in rehandshake (session key rotation) and heartbeat features.
@node Client
-@cindex Client
-@cindex Client part
-@cindex Client configuration
-@cindex Client side
-@cindex Configuring client
-@cindex govpn-client
@section Client part
-Except for common @code{-stats}, @code{-egd} options client has the
-following ones:
+Except for common @ref{Stats, -stats}, @ref{EGD, -egd} options client
+has the following ones:
-@table @code
+@table @option
@item -mtu
Expected TAP interface @ref{MTU}.
@item -proto
-@ref{Network, network protocol} to use. Can be either @emph{udp}
+@ref{Network, Network protocol} to use. Can be either @emph{udp}
(default) or @emph{tcp}.
@item -proxy
established. Interface name will be given to it as a first argument.
@item -down
-Same as @code{-up} above, but it is executed when connection is lost,
+Same as @option{-up} above, but it is executed when connection is lost,
when we exit.
@end table
Example up-script that calls DHCP client and IPv6 advertisement
solicitation:
-@example
+@verbatim
client% cat > up.sh <<EOF
#!/bin/sh
dhclient $1
rtsol $1
EOF
client% chmod +x up.sh
-@end example
+@end verbatim
@node Contacts
-@cindex Contacts
-@cindex Feedback
-@cindex Support
-@cindex Help
-@cindex Maillist
@unnumbered Contacts
Please send questions regarding the use of GoVPN, bug reports and patches to
@node CPR
-@cindex CPR
-@cindex Constant Packet Rate
@subsection Constant Packet Rate
Constant Packet Rate is used to hide fact of underlying payload packets
appearance. In this mode daemon inserts necessary dummy packets and
delays other ones.
-This mode is turned by @code{-cpr} option, where you specify desired
+This mode is turned by @option{-cpr} option, where you specify desired
outgoing traffic rate in KiB/sec (kibibytes per second). This option also
@strong{forces} using of the @ref{Noise, noise}! It is turned off by default.
@node Developer
-@cindex Developer manual
-@cindex Developer
-@cindex Cryptography
@unnumbered Developer manual
Pay attention how to get @ref{Sources, development source code}.
@node Tarballs
-@cindex Download
-@cindex Tarball
-@cindex Prepared tarballs
@section Prepared tarballs
You can obtain releases source code prepared tarballs from the links below:
@multitable {XXXXX} {XXXX KiB} {link sign} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
@headitem Version @tab Size @tab Tarball @tab SHA256 checksum
-@item @ref{Release_5.3, 5.3} @tab 301 KiB
+@item @ref{Release 5.3, 5.3} @tab 301 KiB
@tab @url{download/govpn-5.3.tar.xz, link} @url{download/govpn-5.3.tar.xz.sig, sign}
@tab @code{50955d0a2ea41236682cb5ac245210691fb6ecbe88d138c5873e2362e547da48}
-@item @ref{Release_5.2, 5.2} @tab 300 KiB
+@item @ref{Release 5.2, 5.2} @tab 300 KiB
@tab @url{download/govpn-5.2.tar.xz, link} @url{download/govpn-5.2.tar.xz.sig, sign}
@tab @code{44e3a3265b30305a4436e172565585c327fb28d26197e61b7496c437d032c0db}
-@item @ref{Release_5.1, 5.1} @tab 287 KiB
+@item @ref{Release 5.1, 5.1} @tab 287 KiB
@tab @url{download/govpn-5.1.tar.xz, link} @url{download/govpn-5.1.tar.xz.sig, sign}
@tab @code{0d456c5683287dca31f8c3302eb9a9329feab82bc1fbdb0098fca991513536d1}
-@item @ref{Release_5.0, 5.0} @tab 237 KiB
+@item @ref{Release 5.0, 5.0} @tab 237 KiB
@tab @url{download/govpn-5.0.tar.xz, link} @url{download/govpn-5.0.tar.xz.sig, sign}
@tab @code{cc186a3b800279b6f5a7c86d61b250c24cf97235f6c3e1bb05a6cb60251085c6}
-@item @ref{Release_4.2, 4.2} @tab 233 KiB
+@item @ref{Release 4.2, 4.2} @tab 233 KiB
@tab @url{download/govpn-4.2.tar.xz, link} @url{download/govpn-4.2.tar.xz.sig, sign}
@tab @code{dc2d390b9dcfb30a3612018d410b61ddf8edd82f4d9aa5ed2691b027be10ba0a}
-@item @ref{Release_4.1, 4.1} @tab 227 KiB
+@item @ref{Release 4.1, 4.1} @tab 227 KiB
@tab @url{download/govpn-4.1.tar.xz, link} @url{download/govpn-4.1.tar.xz.sig, sign}
@tab @code{fbc7a730afe96384827dc1e1402c53165710ade5113d90531427c39172e40aca}
-@item @ref{Release_4.0, 4.0} @tab 183 KiB
+@item @ref{Release 4.0, 4.0} @tab 183 KiB
@tab @url{download/govpn-4.0.tar.xz, link} @url{download/govpn-4.0.tar.xz.sig, sign}
@tab @code{a791c3569c01dea8b18aa2f21d27b797ded76f2c33a8d96c2db864a9abf2615b}
-@item @ref{Release_3.5, 3.5} @tab 179 KiB
+@item @ref{Release 3.5, 3.5} @tab 179 KiB
@tab @url{download/govpn-3.5.tar.xz, link} @url{download/govpn-3.5.tar.xz.sig, sign}
@tab @code{6b60c2cd4a8b4b2c893e52d3366510678704fd68a02a0ea24cb112bd753ea54b}
-@item @ref{Release_3.4, 3.4} @tab 175 KiB
+@item @ref{Release 3.4, 3.4} @tab 175 KiB
@tab @url{download/govpn-3.4.tar.xz, link} @url{download/govpn-3.4.tar.xz.sig, sign}
@tab @code{266612a7f8faa6ceb2955ed611c0c21872776306f4eaad5b785145bbb0390c82}
-@item @ref{Release_3.3, 3.3} @tab 175 KiB
+@item @ref{Release 3.3, 3.3} @tab 175 KiB
@tab @url{download/govpn-3.3.tar.xz, link} @url{download/govpn-3.3.tar.xz.sig, sign}
@tab @code{1834a057215324f49d6272b2beb89f1532105156f7e853eae855659992ac0c84}
-@item @ref{Release_3.2, 3.2} @tab 174 KiB
+@item @ref{Release 3.2, 3.2} @tab 174 KiB
@tab @url{download/govpn-3.2.tar.xz, link} @url{download/govpn-3.2.tar.xz.sig, sign}
@tab @code{388e98d6adef5ebf3431b0d48419f54d2e2064c657de67e23c669ebcf273126d}
-@item @ref{Release_3.1, 3.1} @tab 54 KiB
+@item @ref{Release 3.1, 3.1} @tab 54 KiB
@tab @url{download/govpn-3.1.tar.xz, link} @url{download/govpn-3.1.tar.xz.sig, sign}
@tab @code{4034a67eb472e33760ed1783ca871f531c3a6be99b9bd6213f4f83c1147c344b}
-@item @ref{Release_3.0, 3.0} @tab 53 KiB
+@item @ref{Release 3.0, 3.0} @tab 53 KiB
@tab @url{download/govpn-3.0.tar.xz, link} @url{download/govpn-3.0.tar.xz.sig, sign}
@tab @code{12579c5c3cccfe73c66b5893335bc70c42d7b13b8e94c7751ec65d421eaff9a5}
-@item @ref{Release_2.4, 2.4} @tab 42 KiB
+@item @ref{Release 2.4, 2.4} @tab 42 KiB
@tab @url{download/govpn-2.4.tar.xz, link} @url{download/govpn-2.4.tar.xz.sig, sign}
@tab @code{df45225bac2384c5eed73c5cdb05dc3581495e08d365317beb03a2487d46b98c}
-@item @ref{Release_2.3, 2.3} @tab 34 KiB
+@item @ref{Release 2.3, 2.3} @tab 34 KiB
@tab @url{download/govpn-2.3.tar.xz, link} @url{download/govpn-2.3.tar.xz.sig, sign}
@tab @code{92986ec6d6da107c6cc1143659e5a154cd19b8f2ede5fa7f5ccc4525ae468e97}
-@item @ref{Release_2.2, 2.2} @tab 32 KiB
+@item @ref{Release 2.2, 2.2} @tab 32 KiB
@tab @url{download/govpn-2.2.tar.xz, link} @url{download/govpn-2.2.tar.xz.sig, sign}
@tab @code{5745278bce8b9a3bd7ec1636507bbce8c17ba1d79f1568e2f3681b7a90bbe6e1}
-@item @ref{Release_2.0, 2.0} @tab 31 KiB
+@item @ref{Release 2.0, 2.0} @tab 31 KiB
@tab @url{download/govpn-2.0.tar.xz, link} @url{download/govpn-2.0.tar.xz.sig, sign}
@tab @code{d43be1248d6a46ba8ca75be2fdab5e3d8b0660fb9df9b6d87cfa3973722b42be}
-@item @ref{Release_1.5, 1.5} @tab 19 KiB
+@item @ref{Release 1.5, 1.5} @tab 19 KiB
@tab @url{download/govpn-1.5.tar.xz, link} @url{download/govpn-1.5.tar.xz.sig, sign}
@tab @code{715b07d4d1ea4396c3e37014ca65ec3768818423521f3c12e7200b6edca48c31}
@node EGD
-@cindex EGD
-@cindex Entropy Gathering Daemon
-@cindex Entropy
@subsection Entropy Gathering Daemon
Overall security mainly depends on client side:
number generator.
Some operating systems do not have good enough quality PRNG, bad
-@code{/dev/urandom}. You should use separate PRNG with them. GoVPN
+@file{/dev/urandom}. You should use separate PRNG with them. GoVPN
communicates with them using
@url{http://egd.sourceforge.net/, Entropy Gathering Daemon} protocol.
To switch using EGD-compatible daemons instead of @code{crypto/rand}
-library you provide @code{-egd PATH} command line option, where
+library you provide @option{-egd PATH} command line option, where
@code{PATH} is the domain socket.
-@example
+@verbatim
% ./govpn-server [...] -egd /var/run/egd.sock
-@end example
+@end verbatim
@node Encless
-@cindex Encryptionless
-@cindex Encryptionless mode
-@cindex Chaffing-and-Winnowing
-@cindex AONT
-@cindex All-Or-Nothing-Transformation
-@cindex OAEP
-@cindex SAEP+
@subsection Encryptionless mode
Some jurisdictions can force user to reveal his encryption keys. However
@node Example
-@cindex Example
-@cindex Example usage
-@cindex Tutorial
@section Example usage
Let's assume that there is some insecure link between your computer and
@strong{Prepare the client}. Generate client's verifier for Alice as an
example:
-@cindex newclient.sh
@verbatim
client% ./utils/newclient.sh Alice
verifier: $argon2d$m=4096,t=128,p=1$bwR5VjeCYIQaa8SeaI3rqg$KCNIqfS4DGsBTtVytamAzcISgrlEWvNxan1UfBrFu10
@end verbatim
-@strong{Prepare the server}. Add this entry to @code{peers.yaml}
+@strong{Prepare the server}. Add this entry to @file{peers.yaml}
configuration file:
@verbatim
@strong{Prepare network on GNU/Linux IPv4 server}:
-@example
+@verbatim
server% ip addr add 192.168.0.1/24 dev wlan0
server% tunctl -t tap10
server% ip addr add 172.16.0.1/24 dev tap10
server% ip link set up dev tap10
-@end example
+@end verbatim
@strong{Run server daemon itself}:
-@example
+@verbatim
server% govpn-server -bind 192.168.0.1:1194
-@end example
+@end verbatim
@strong{Prepare network on GNU/Linux IPv4 client}:
-@example
+@verbatim
client% ip addr add 192.168.0.2/24 dev wlan0
client% tunctl -t tap10
client% ip addr add 172.16.0.2/24 dev tap10
client% ip link set up dev tap10
client% ip route add default via 172.16.0.1
-@end example
+@end verbatim
@strong{Run client daemon itself}:
-@example
+@verbatim
client% govpn-client \
-verifier '$argon2d$m=4096,t=128,p=1$bwR5VjeCYIQaa8SeaI3rqg' \
-iface tap10 \
-remote 192.168.0.1:1194
-@end example
+@end verbatim
@strong{FreeBSD IPv6 similar client-server example}:
-@example
+@verbatim
server% ifconfig em0 inet6 fe80::1/64
server% govpn-server -bind "fe80::1%em0"
-@end example
+@end verbatim
-@example
+@verbatim
client% ifconfig me0 inet6 -ifdisabled auto_linklocal
client% ifconfig tap10
client% ifconfig tap10 inet6 fc00::2/96 up
-verifier '$argon2d$m=4096,t=128,p=1$bwR5VjeCYIQaa8SeaI3rqg' \
-iface tap10 \
-remote "[fe80::1%me0]":1194
-@end example
+@end verbatim
@node ЧАВО
-@cindex FAQ (russian)
-@cindex ЧАВО
-@cindex Часто задаваемые вопросы
-@unnumbered Часто задаваемые вопросы
-
-@table @asis
-
-@item Почему вы не используете TLS?
-Это сложный протокол. Он использует Аутентификацию-затем-Шифрование
-порядок использования алгоритмов -- это не безопасно. Более того, его
-библиотеки огромный и сложны для чтения, ревью и анализа.
-
-@item Почему вы не используете SSH?
-Его первые версии использовали Аутентификацию-и-Шифрование порядок,
-однако более поздние поддерживают даже ChaCha20-Poly1305 алгоритм. Его
-исходный код не тривиален и достаточно большой для чтения и ревью.
-OpenSSH не поддерживает сильные протоколы аутентификации по паролю с
-нулевым неразглашением.
-
-@item Почему вы не используете IPsec?
-Это достаточно хороший протокол, поддерживаемый большинством ОС. Но в
-нём нет сильного протокола аутентификации по паролю с нулевым
+@section Часто задаваемые вопросы
+
+@menu
+* Почему вы не используете TLS?: Почему не TLS.
+* Почему вы не используете SSH?: Почему не SSH.
+* Почему вы не используете IPsec?: Почему не IPsec.
+* Почему GoVPN написан на Go?: Почему Go.
+* Почему вы аутентифицируете по парольной фразе?: Почему парольные фразы.
+* Почему вся настройка сети делается вручную?: Почему ручная настройка сети.
+* Почему нет поддержки OS X или Windows?: Почему нет поддержки проприетарных ОС.
+* Что вы подразумеваете под совершенной прямой секретностью?: Что такое PFS.
+* Что вы подразумеваете когда говорите что клиенты анонимны?: Что такое анонимность.
+* Что вы подразумеваете под цензуроустойчивостью?: Что такое цензуроустойчивость.
+* Когда я должен использовать нешифрованный режим?: Когда нешифрованный режим.
+* Когда я должен использовать noise опцию?: Когда noise опцию.
+* Когда я должен использовать опцию синхронизации времени?: Когда синхронизацию времени.
+* Могу ли я сделать DoS (отказ в обслуживании) демона?: Можно ли DoS демона.
+* Почему YAML для конфигурации?: Почему YAML.
+@end menu
+
+@node Почему не TLS
+@subsection Почему вы не используете TLS?
+
+@itemize
+@item Это сложный плохо спроектированный протокол.
+@item Он использует Аутентификацию-затем-Шифрование порядок
+использования алгоритмов.
+@item Его библиотеки огромны и сложны для чтения, ревью и анализа.
+@end itemize
+
+@node Почему не SSH
+@subsection Почему вы не используете SSH?
+
+@itemize
+@item Его первые версии использовали Аутентификацию-и-Шифрование
+порядок, однако более поздние поддерживают даже ChaCha20-Poly1305
+алгоритм.
+@item OpenSSH не поддерживает сильные протоколы аутентификации по паролю
+с нулевым неразглашением.
+@end itemize
+
+@node Почему не IPsec
+@subsection Почему вы не используете IPsec?
+
+В нём нет сильного протокола аутентификации по паролю с нулевым
неразглашением и, снова, его код сложно читать.
-@item Почему вы не используете XXX?
-По тем же самым причинам: большинство ПО не предоставляют сильных
-протоколов аутентификации, высокой криптографической безопасности и,
-большая часть, написана на C -- на нём сложно правильно писать.
+@node Почему Go
+@subsection Почему GoVPN написан на Go?
-@item Почему GoVPN написан на Go?
Go очень легко читается, поддаётся ревью и поддержке. Он усложняет
написание сложного кода. Он предоставляет всё что нужно для C языка:
проверки границ массивов, сборщик мусора и конкурентные примитивы. Он
более чем 750 Mbps пропускной способности), но большую надёжность и
гораздо меньше строк кода.
-@item Почему вы аутентифицируете по парольной фразе?
+@node Почему парольные фразы
+@subsection Почему вы аутентифицируете по парольной фразе?
+
Человек способ запоминать достаточно длинные парольные фразы (не
пароли): 100-200 символов, что даёт возможность использовать её как
высокоэнтропийный ключ. Вам нужно доверять только себе, не аппаратному
токену или другому устройству хранения. Это удобно.
-@cindex Настройка сети
-@item Почему вся настройка сети делается вручную?
+@node Почему ручная настройка сети
+@subsection Почему вся настройка сети делается вручную?
+
Потому-что существует так много вариантов использования, конфигураций и
установок, что или я поддерживаю их всех, или использую громоздкие
протоколы типы PPP, или просто даю право выбора администратору. VPN это
всего-лишь прослойка.
-@item Почему нет поддержки OS X или Windows?
+@node Почему нет поддержки проприетарных ОС
+@subsection Почему нет поддержки OS X или Windows?
+
Любые проприетарные системы с закрытым исходным кодом не дают
возможности управлять компьютером. Вы не можете безопасно использовать
всё что касается криптографии без контроля над нижестоящим
вычислительным устройством. Выбирайте другую операционную систему.
-@item Что вы подразумеваете под совершенной прямой секретностью?
+@node Что такое PFS
+@subsection Что вы подразумеваете под совершенной прямой секретностью?
+
Что вы не можете дешифровать ранее перехваченный трафик если ваши
долгоживущие ключи будут скомпрометированы. Это свойство работает на
уровне сессии: оно не спасёт если сессионный ключ скомпрометирован из
памяти.
-@cindex Анонимность
-@cindex Анонимные клиенты
-@item Что вы подразумеваете когда говорите что клиенты анонимны?
+@node Что такое анонимность
+@subsection Что вы подразумеваете когда говорите что клиенты анонимны?
+
Что третьей лицо не может отличить одного клиента от другого, смотря на
трафик (транспортный или рукопожатия).
-@cindex Цензуроустойчивость
-@item Что вы подразумеваете под цензуроустойчивостью?
+@node Что такое цензуроустойчивость
+@subsection Что вы подразумеваете под цензуроустойчивостью?
+
Невозможность определить GoVPN ли это трафик или просто
@code{cat /dev/urandom | nc somehost}. Если вы не можете отличить один
вид трафика от другого, то при цензуре ваше единственный вариант это
заблокировать все его виды.
-@item Когда я должен использовать @ref{Encless, нешифрованный режим}?
+@node Когда нешифрованный режим
+@subsection Когда я должен использовать @ref{Encless, нешифрованный режим}?
+
Если вы работаете под юрисдикциями где суды могут привлечь вас к
ответственности за использование шифрования или могут вынудить вас
как-либо выдать ваши ключи шифрования (хотя сессионные ключи шифрования
генерируются каждую сессию). В большинстве случаев, эти суды не могут
-требовать аутентификационные ключи или ключи для ЭЦП. @strong{Не
-позволяйте} названию режима вас смутить: он всё-равно обеспечивает
-конфиденциальность и аутентичность передаваемых данных! Но имейте в
-виду, что этот режим требователен к ресурсам и трафику и пока работает
-только в TCP режиме.
+требовать аутентификационные ключи или ключи для ЭЦП.
+
+@strong{Не позволяйте} названию режима вас смутить: он всё-равно
+обеспечивает конфиденциальность и аутентичность передаваемых данных! Но
+имейте в виду, что этот режим требователен к ресурсам и трафику и пока
+работает только в TCP режиме.
-@item Вы думаете нешифрованный режим с его случайными данными поможет в суде?
Если всё что не может быть прочитано кем-угодно считается шифрованием,
-то нет, этот режим вам не поможет. Представьте что вы говорите на другом
+то этот режим вам не поможет. Представьте что вы говорите на другом
иностранном языке или просто используете другую схему кодирования данных.
-@item Когда я должен использовать @ref{Noise, noise} опцию?
+@node Когда noise опцию
+@subsection Когда я должен использовать @ref{Noise, noise} опцию?
+
В большинстве случаев она вам не нужна без включённого
@ref{CPR, постоянного по скорости трафика} (CPR). Без CPR и шума, в
GoVPN трафике (так же как и в TLS, IPsec, SSH и других VPN протоколах)
происходить в сети. Без CPR опции вы можете только сказать в online ли
кто или нет -- ни больше, ни меньше.
-@item Когда я должен использовать опцию @ref{Timesync, синхронизации времени}?
+@node Когда синхронизацию времени
+@subsection Когда я должен использовать опцию @ref{Timesync, синхронизации времени}?
+
Без этой опции, если кто-либо перехватит первоначальный пакет
рукопожатия от настоящего клиента, то он сможет его повторить и получить
пакет рукопожатия от сервера в ответ. Это может быть использовано для
или менее синхронизированные часы между вашими клиентами и сервером, то
можете всего использовать эту опцию.
-@item Могу ли я сделать DoS (отказ в обслуживании) демона?
+@node Можно ли DoS демона
+@subsection Могу ли я сделать DoS (отказ в обслуживании) демона?
+
Каждый транспортный пакет первым делом аутентифицируется очень быстрым
UMAC алгоритмом -- в большинстве случаев потребление ресурсов TCP/UDP
слоёв будет выше чем проверка UMAC. Каждое сообщение рукопожатия
обрабатывается только если зашифрованный @ref{Identity, идентификатор}
клиента найден: он использует быстрый PRP без потребления энтропии.
-@item Почему YAML для конфигурации?
+@node Почему YAML
+@subsection Почему YAML для конфигурации?
+
Есть не так много хорошо известных форматов позволяющих комментировать,
легко редактировать людьми (XML совсем не дружелюбен к человеку, JSON
более менее). Возможно самое важное свойство это шаблоны YAML: очень
удобно сохранить много клиентов, имеющих схожие настройки, в одном
конфигурационном файле.
-
-@end table
@node FAQ
-@cindex FAQ
-@cindex Frequently Asked Questions
@unnumbered Frequently Asked Questions
-@table @asis
-
-@cindex TLS
-@item Why do not you use TLS?
-It is complicated protocol. It uses Authenticate-then-Encrypt ordering
-of algorithms -- it is not secure. Moreover its libraries are huge and
-hard to read, review and analyze.
-
-@cindex SSH
-@item Why do not you use SSH?
-Its first protocol versions used A-a-E ordering, however later ones
-supports even ChaCha20-Poly1305 algorithms. But its source code is not
-so trivial and rather big to read and review. OpenSSH does not support
-strong zero-knowledge password authentication.
-
-@cindex IPsec
-@item Why do not you use IPsec?
-It is rather good protocol, supported by all modern OSes. But it lacks
-strong zero-knowledge password authentication and, again, its code is
-hard to read.
-
-@item Why do not you use XXX?
-For the same reasons: most of software do not provide strong password
-authentication, high cryptographic protocol security, and most of this
-software is written in C -- it is hard to write right on it.
-
-@cindex Why Go
-@cindex Go
-@item Why GoVPN is written on Go?
+See also this page @ref{ЧАВО, on russian}.
+
+@menu
+* Why do not you use TLS?: Why not TLS.
+* Why do not you use SSH?: Why not SSH.
+* Why do not you use IPsec?: Why not IPsec.
+* Why GoVPN is written on Go?: Why Go.
+* Why do you authenticate with passphrases?: Why passphrases.
+* Why all network configuration must be done manually?: Why manual network configuration.
+* Why there is no either OS X or Windows support?: Why no proprietary OS support.
+* What do you mean by perfect forward secrecy?: What is perfect forward secrecy.
+* What do you mean by saying that clients are anonymous?: What is anonymity.
+* What do you mean by censorship resistance?: What is censorship resistance.
+* When should I use encryptionless mode?: When encryptionless mode.
+* When should I use noise option?: When noise option.
+* When should I use time synchronization option?: When timesync option.
+* Can I DoS (denial of service) the daemon?: Can I DoS daemon.
+* Why YAML for configuration?: Why YAML.
+@end menu
+
+@node Why not TLS
+@section Why do not you use TLS?
+
+@itemize
+@item It is complicated badly designed protocol.
+@item It uses Authenticate-then-Encrypt ordering of algorithms.
+@item Its libraries are huge and hard to read, review and analyze.
+@end itemize
+
+@node Why not SSH
+@section Why do not you use SSH?
+
+@itemize
+@item Its first protocol versions used A-a-E ordering, however later
+ones supports even ChaCha20-Poly1305 algorithms.
+@item OpenSSH does not support strong zero-knowledge password
+authentication.
+@end itemize
+
+@node Why not IPsec
+@section Why do not you use IPsec?
+
+It lacks strong zero-knowledge password authentication and, again,
+its code is hard to read.
+
+@node Why Go
+@section Why GoVPN is written on Go?
+
Go is very easy to read, review and support. It makes complex code
writing a harder task. It provides everything needed to the C language:
array bounds checking, garbage collection and concurrency primitives. It
than 750 Mbps of throughput), but higher reliability and much fewer
lines of code.
-@item Why do you authenticate with passphrases?
+@node Why passphrases
+@section Why do you authenticate with passphrases?
+
Human is capable of memorizing rather long passphrases (not passwords):
100-200 characters, that gives ability to use it as a high-entropy key.
-You need to trust only yourself, not hardware token or some other
+You need to trust only yourself, neither hardware token nor some other
storage device. It is convenient.
-@cindex Network configuration
-@item Why all network configuration must be done manually?
+@node Why manual network configuration
+@section Why all network configuration must be done manually?
+
Because there are so many use-cases and setups, so many various
protocols, that either I support all of them, or use complicated
protocol setups like PPP, or just give right of the choice to the
-administrator. VPN is only just a layer.
+administrator. VPN is only just a layer, just like Ethernet cable.
+
+@node Why no proprietary OS support
+@section Why there is no either OS X or Windows support?
-@cindex Windows
-@cindex Microsoft Windows
-@cindex Apple OS X
-@cindex OS X
-@item Why there is no either OS X or Windows support?
Any closed source proprietary systems do not give ability to control the
computer. You can not securely use cryptography-related stuff without
controlling the underlying computing device. Choose another operating
system.
-@item What do you mean by perfect forward secrecy?
+@node What is perfect forward secrecy
+@section What do you mean by perfect forward secrecy?
+
You can not decrypt previously saved traffic by compromising long-lived
keys. PFS property is per-session level: it won't protect from leaking
the session key from the memory.
-@cindex Anonymity
-@cindex Anonymous clients
-@item What do you mean by saying that clients are anonymous?
+@node What is anonymity
+@section What do you mean by saying that clients are anonymous?
+
That third-party can not differentiate one client from another looking
at the traffic (transport and handshake).
-@cindex Censorship
-@cindex Censorship resistance
-@cindex DPI resistance
-@item What do you mean by censorship resistance?
+@node What is censorship resistance
+@section What do you mean by censorship resistance?
+
Unability to distinguish either is it GoVPN-traffic is passing by, or
just @code{cat /dev/urandom | nc somehost}. If you can not differentiate
one kind of traffic from another, then your only option is to forbid all
kinds of it.
-@item When should I use @ref{Encless, encryptionless mode}?
+@node When encryptionless mode
+@section When should I use @ref{Encless, encryptionless mode}?
+
If you are operating under jurisdiction where courts can either sue you
for encryption usage or force you to somehow reveal you encryption
keys (however new session encryption keys are generated each session).
Those courts can not demand for authentication and signing keys in most
-cases. @strong{Do not} let mode's name to confuse you: it still
-provides confidentiality and authenticity of transmitted data! But pay
-attention that this mode is traffic and resource hungry and currently
-operate only in TCP mode.
+cases.
+
+@strong{Do not} let mode's name to confuse you: it still provides
+confidentiality and authenticity of transmitted data! But pay attention that
+this mode is traffic and resource hungry and currently operate only in TCP
+mode.
-@item Do you think encryptionless mode with all those random data helps in court?
If anything that can not be read by anyone is considered encryption,
-then no, encryptionless mode won't help you. Imagine that either you are
+then encryptionless mode won't help you. Imagine that either you are
talking on another foreign language, or just use another date encoding
scheme.
-@item When should I use @ref{Noise, noise} option?
+@node When noise option
+@section When should I use @ref{Noise, noise} option?
+
In most cases you won't need it without @ref{CPR, constant packer rate}
turned on. Without CPR and noise options GoVPN traffic (like TLS, IPsec,
SSH and other VPN protocols) leaks underlying interface's packets
going on in the network. With CPR option enabled you can tell either
somebody is online, or not -- nothing less, nothing more.
-@item When should I use @ref{Timesync, time synchronization} option?
+@node When timesync option
+@section When should I use @ref{Timesync, time synchronization} option?
+
Without that option, if someone captured initial handshake packet from
the valid client, then it could repeat it and receive a handshake packet
as an answer from server. This can be used to detect if some user's
more or less synchronized clocks between your clients and server, then
you can use always use this option.
-@cindex DoS
-@item Can I DoS (denial of service) the daemon?
+@node Can I DoS daemon
+@section Can I DoS (denial of service) the daemon?
+
Each transport packet is authenticated first with the very fast UMAC
algorithm -- in most cases resource consumption of TCP/UDP layers will
be higher then UMAC verifying. Each handshake message is processed only
when an encrypted client's @ref{Identity, identity} is found: it uses
fast PRP without any entropy usage.
-@cindex Why YAML
-@item Why YAML for configuration?
+@node Why YAML
+@section Why YAML for configuration?
+
There are not so many well-known formats that allow commenting, easy
editing by human (XML is not human friendly at all, JSON is more or
less). Probably the most useful feature is YAML's templates: it is very
convenient for storing many clients sharing the same options in the
configuration file.
-
-@end table
@node Handshake
-@cindex Handshake
-@cindex Handshake protocol
-@cindex Diffie-Hellman
-@cindex ed25519
-@cindex curve25519
-@cindex Elligator
-@cindex Perfect Forward Secrecy
-@cindex PFS
-@cindex IDtag
-@cindex Shared key
-@cindex DH-EKE
-@cindex DH
-@cindex EKE
-@cindex A-EKE
-@cindex DH-A-EKE
@section Handshake protocol
@verbatiminclude handshake.utxt
@node Identity
-@cindex Client identity
-@cindex Identity
@subsection Identity
Client's identity is 128-bit string. It is not secret, so can be
@include about.texi
-@center @strong{@ref{Tarballs, Download it}}.
+@center @ref{Tarballs, @strong{Download it}}.
@menu
-* About (russian): О демоне.
* Frequently Asked Questions: FAQ.
-* Часто задаваемые вопросы: ЧАВО.
* News::
+* Информация на русском: Русский.
* Installation::
* Precautions::
* User manual: User.
* Contacts and feedback: Contacts.
* Thanks::
* In the media: Media.
-* TODO::
* Copying conditions::
-* Concept index::
@end menu
-@include about.ru.texi
@include faq.texi
-@include faq.ru.texi
@include news.texi
+@include russian.texi
@include installation.texi
@include precautions.texi
@include user.texi
@include contacts.texi
@include thanks.texi
@include media.texi
-@include todo.texi
@node Copying conditions
@unnumbered Copying conditions
@insertcopying
@verbatiminclude fdl.txt
-@node Concept index
-@unnumbered Concept index
-
-@printindex cp
-
@bye
@node Installation
-@cindex Installation
-@cindex Getting GoVPN
-@cindex Requirements
-@cindex Dependencies
-@cindex Ports
-@cindex Packages
-@cindex FreeBSD
-@cindex AUR
-@cindex Texinfo
@unnumbered Installation
Possibly GoVPN already exists in your distribution:
@item @url{http://www.freshports.org/security/govpn/, FreeBSD ports}
@end itemize
-GoVPN is written on Go programming language and you have to install Go
-compiler (1.5+ version is highly recommended, 1.4 is the minimal
-sufficient): @code{lang/go} port in FreeBSD and @code{golang} package in
-most GNU/Linux distributions. @emph{Make} (BSD and GNU ones are fine) is
-recommended for convenient building.
+GoVPN is written on @url{https://golang.org/, Go} programming language
+and you have to install Go compiler (1.5+ version is highly recommended,
+1.4 is the minimal sufficient): @code{lang/go} port in FreeBSD and
+@code{golang} package in most GNU/Linux distributions. @emph{Make} (BSD
+and GNU ones are fine) is recommended for convenient building.
@url{https://www.gnu.org/software/texinfo/, Texinfo} is used for
building documentation. Possibly you also need to install TUN/TAP
interface utilities (depending on your operating system):
@end multitable
Get @ref{Tarballs, the tarball}, check its
-@ref{Integrity, integrity and authenticity} and run @code{make}.
+@ref{Integrity, integrity and authenticity} and run @command{make}.
@emph{govpn-client}, @emph{govpn-server}, @emph{govpn-verifier}
binaries will be built in the current directory:
-@example
+@verbatim
% wget http://www.cypherpunks.ru/govpn/download/govpn-2.3.tar.xz
% wget http://www.cypherpunks.ru/govpn/download/govpn-2.3.tar.xz.sig
% gpg --verify govpn-2.3.tar.xz.sig govpn-2.3.tar.xz
% tar xf govpn-2.3.tar.xz
% make -C govpn-2.3 all
-@end example
+@end verbatim
-There is @code{install} target respecting @code{DESTDIR}. It will
+There is @code{install} target respecting @env{DESTDIR}. It will
install binaries, info-documentation and utilities.
@menu
@node Integrity
-@cindex Integrity
-@cindex Tarball integrity
-@cindex PGP
-@cindex Public key
@section Tarballs integrity check
You @strong{have to} verify downloaded archives integrity and check
their signature to be sure that you have got trusted, untampered
software. For integrity and authentication of downloaded binaries
@url{https://www.gnupg.org/, The GNU Privacy Guard} is used. You must
-download signature (@code{.sig}) provided with the tarball.
+download signature (@file{.sig}) provided with the tarball.
For the very first time you need to import signing public keys. They
are provided below, but be sure that you are reading them from the
@node Media
-@cindex In the media
-@cindex Articles
@unnumbered In the media
@itemize
@node MTU
-@cindex MTU
-@cindex Maximum Transmission Unit
@subsection Maximum Transmission Unit
MTU option tells what maximum transmission unit is expected to get from
@node Network
-@cindex Transport
-@cindex Network transport
-@cindex TCP
-@cindex UDP
@subsection Network transport
You can use either UDP or TCP underlying network transport protocols.
--- /dev/null
+@node Новости
+@section Новости
+
+@menu
+* Релиз 5.4::
+* Релиз 5.3::
+* Релиз 5.2::
+* Релиз 5.1::
+* Релиз 5.0::
+* Релиз 4.2::
+* Релиз 4.1::
+* Релиз 4.0::
+* Релиз 3.5::
+* Релиз 3.4::
+* Релиз 3.3::
+* Релиз 3.2::
+* Релиз 3.1::
+* Релиз 3.0::
+* Релиз 2.4::
+* Релиз 2.3::
+* Релиз 2.2::
+* Релиз 2.1::
+* Релиз 2.0::
+* Релиз 1.5::
+* Релиз 1.4::
+* Релиз 1.3::
+* Релиз 1.1::
+* Релиз 1.0::
+@end menu
+
+@node Релиз 5.4
+@subsection Релиз 5.4
+@itemize
+@item Добавлена возможность требования @ref{Timesync, синхронизации
+времени}. Она добавит временные метки в PRP аутентификацию сообщений
+рукопожатия, не позволяя повторить ранее перехваченные пакеты и получить
+ответ от сервера, делая его видимым для DPI.
+@end itemize
+
+@node Релиз 5.3
+@subsection Релиз 5.3
+@itemize
+@item Исправлен небольшой баг связанный с тем что @command{newclient.sh}
+ловил "Passphrase:" приглашение и помещал его в примерный вывод YAML.
+Просто заменил вывод приглашения ввода парольной фразы с stdout на
+stderr.
+@end itemize
+
+@node Релиз 5.2
+@subsection Релиз 5.2
+@itemize
+@item Возможность ввода парольной фразы напрямую из терминала
+(пользовательский ввод), без использования файлов с ключами. Утилита
+@command{storekey.sh} удалена.
+@end itemize
+
+@node Релиз 5.1
+@subsection Релиз 5.1
+@itemize
+@item Сервер конфигурируется через @url{http://yaml.org/, YAML} файл.
+Очень удобно иметь комментарии и шаблоны, по сравнению с JSON.
+@item Несовместимая с предыдущими версиями замена функции
+@emph{HSalsa20} на @emph{BLAKE2b} в коде рукопожатия.
+@end itemize
+
+@node Релиз 5.0
+@subsection Релиз 5.0
+@itemize
+
+@item Новый опциональный @ref{Encless, нешифрованный режим} работы.
+Технически к исходящим пакетам не применяются функции шифрования,
+поэтому вас не могут вынудить выдать ключи шифрования или привлечь к
+ответственности за использования шифрования.
+@item @ref{MTU} конфигурируются относительно каждого пользователя отдельно.
+@item Упрощённая схема дополнения полезной нагрузки, экономия в один байт.
+@item Возможность указать название TAP интерфейса явно, без
+использования up-скриптов.
+@item @command{govpn-verifier} утилита теперь может использовать @ref{EGD}.
+@end itemize
+
+@node Релиз 4.2
+@subsection Релиз 4.2
+@itemize
+@item Исправлена некритичная ошибка при которой сервер мог упасть если
+скрипт запуска (up.sh) не выполнился успешно.
+@end itemize
+
+@node Релиз 4.1
+@subsection Релиз 4.1
+@itemize
+@item Вместо PBKDF2 используется
+@url{https://password-hashing.net/#argon2, Argon2d} алгоритм хэширования
+паролей.
+@item Идентификатор клиента хранится внутри проверяльщика (verifier),
+тем самым упрощая конфигурирование сервера и код.
+@end itemize
+
+@node Релиз 4.0
+@subsection Релиз 4.0
+@itemize
+@item Сообщения рукопожатия могут быть зашумлены: их длина скрывается.
+Теперь они неотличимы от транспортных сообщений.
+@item Распараллеленная обработка клиентов на стороне сервера.
+@item Гораздо более высокая общая производительность.
+@item Конфигурирование сервера единственным JSON файлом.
+@end itemize
+
+@node Релиз 3.5
+@subsection Релиз 3.5
+@itemize
+@item Возможность использовать @ref{Network, TCP} сетевой транспорт.
+Сервер можно слушать одновременно на UDP и TCP сокетах.
+@item Возможность использовать @ref{Proxy, HTTP прокси} (через CONNECT
+метод) для доступа к серверу. Сервер может эмулировать поведение HTTP
+прокси.
+@item Обновлённая Poly1305 библиотека с исправлениями для ARM.
+@item Версия Go 1.5+ сильно рекомендуется из-за вопросов
+производительности.
+@end itemize
+
+@node Релиз 3.4
+@subsection Релиз 3.4
+@itemize
+@item Возможность использовать внешний @ref{EGD} совместимый PRNG.
+Теперь вы можете использовать GoVPN даже на системах с плохим
+@file{/dev/random}.
+@item Опция @option{-noncediff} удалена. Она заменена на хранилище уже
+замеченных nonce-ов в памяти, тем самым полностью убирая возможность
+атак перепроигрывания без потерь производительности связанных с
+перетасовкой пакетов.
+@end itemize
+
+@node Релиз 3.3
+@subsection Релиз 3.3
+@itemize
+@item Совместимость со старым GNU Make 3.x. Прежде только BSD Make и GNU
+Make 4.x поддерживались.
+@item @file{/dev/urandom} используется для правильного генерирования
+идентификатора клиента под GNU/Linux системами. Прежде,
+@file{/dev/random} мог выдать меньше ожидаемого количества данных.
+@end itemize
+
+@node Релиз 3.2
+@subsection Релиз 3.2
+@itemize
+@item Детерминированная сборка: коммиты исходного кода зависимых
+библиотек фиксированы.
+@item Для сборки из исходного кода, соединение с Интернетом больше не
+требуется: все зависимые библиотеки включены в tarball релизов.
+@item Совместимость с FreeBSD Make. GNU Make не обязателен больше.
+@end itemize
+
+@node Релиз 3.1
+@subsection Релиз 3.1
+@itemize
+@item Публичные ключи Диффи-Хельмана кодируются алгоритмом Elligator
+перед отправкой, делая их неотличимыми от случайных строчек,
+предотвращая определение удачного подбора ключа дешифрования при
+переборе паролей (используемых для создания DSA публичных ключей).
+Однако это в среднем потребляет в два раза больше энтропии при
+генерировании клюей DH.
+@end itemize
+
+@node Релиз 3.0
+@subsection Релиз 3.0
+@itemize
+@item EKE протокол заменён на Augmented-EKE и статичный симметричный
+(обе стороны его имеют) pre-shared ключ заменён на верификатор на
+стороне сервера. Это требует на 64 байта больше трафика рукопожатия,
+добавляет Ed25519 зависимость с соответствующими расходами на подпись и
+проверку, PBKDF2 зависимость и вычисления на стороне клиента.
+
+A-EKE с PBKDF2 верификаторами устойчивы к атакам по словарю. Можно
+использовать легко запоминаемые человеком парольные фразы вместо
+статичных ключей. Верификаторы на стороне сервера не могут быть
+использованы для аутентификации (скомпрометированный сервер не даст
+возможность масксироваться под пользователя).
+
+@item Изменена структура транспортных сообщений: добавлена длина
+полезной нагрузки. Это увеличивает накладные расходы на два байта, но
+сообщения сердцебиения стали меньше.
+
+@item Возможность скрывать размер полезной нагрузки за счёт добавления
+шума, мусора во время передачи данных. Каждый пакет дополняется до
+максимального размера MTU.
+
+@item Возможность скрывать факты появления пакетов полезной нагрузки, за
+счёт константного по скорости трафика. Это также включает в себя
+создание шума.
+
+@item
+Опции конфигурации @option{-timeout}, @option{-noncediff}, @option{-noise},
+@option{-cpr} настраиваются по-клиентно.
+@end itemize
+
+@node Релиз 2.4
+@subsection Релиз 2.4
+@itemize
+@item Возможность запуска встроенного HTTP-сервера отвечающего JSON-ом с
+статистикой обо всех подключённых клиентах.
+@item Документация явно лицензирована под GNU FDL 1.3+.
+@end itemize
+
+@node Релиз 2.3
+@subsection Релиз 2.3
+@itemize
+@item Пакеты рукопожатия стали неотличимыми от случайных данных. Теперь
+весь GoVPN трафик это шум для человека по середине.
+
+@item Сообщения рукопожатия стали меньше (16% сокращения трафика).
+
+@item Злоумышленник не может создать обманных пакеты рукопожатия которые
+заставят сервер генерировать приватный DH ключ, предотвращая потребление
+энтропии и ресурсоёмкие вычисления.
+@end itemize
+
+@node Релиз 2.2
+@subsection Релиз 2.2
+@itemize
+@item Исправлены deadlock-и на некоторые каналы.
+@end itemize
+
+@node Релиз 2.1
+@subsection Релиз 2.1
+@itemize
+@item Восстановлена сборка под GNU/Linux системами.
+@end itemize
+
+@node Релиз 2.0
+@subsection Релиз 2.0
+@itemize
+@item Добавлена идентификация клиентов.
+@item Поддержка одновременно нескольких клиентов одним сервером.
+@item Скрипты up/down для каждого клиента.
+@end itemize
+
+@node Релиз 1.5
+@subsection Релиз 1.5
+@itemize
+@item Шифрование/обфусцирование nonce-ов.
+@end itemize
+
+@node Релиз 1.4
+@subsection Релиз 1.4
+@itemize
+@item Оптимизации производительности.
+@end itemize
+
+@node Релиз 1.3
+@subsection Релиз 1.3
+@itemize
+@item Возможность сердцебиения.
+@item Возможность пересогласования (rehandshake).
+@item Опциональные up/down скрипты.
+@end itemize
+
+@node Релиз 1.1
+@subsection Релиз 1.1
+@itemize
+@item Поддержка FreeBSD.
+@end itemize
+
+@node Релиз 1.0
+@subsection Релиз 1.0
+@itemize
+@item Первый стабильный релиз.
+@end itemize
@node News
-@cindex Releases
-@cindex News
@unnumbered News
-@table @strong
-
-@item @anchor{Release_5.4} Release 5.4
-@cindex Release 5.4
+See also this page @ref{Новости, on russian}.
+
+@menu
+* Release 5.4::
+* Release 5.3::
+* Release 5.2::
+* Release 5.1::
+* Release 5.0::
+* Release 4.2::
+* Release 4.1::
+* Release 4.0::
+* Release 3.5::
+* Release 3.4::
+* Release 3.3::
+* Release 3.2::
+* Release 3.1::
+* Release 3.0::
+* Release 2.4::
+* Release 2.3::
+* Release 2.2::
+* Release 2.1::
+* Release 2.0::
+* Release 1.5::
+* Release 1.4::
+* Release 1.3::
+* Release 1.1::
+* Release 1.0::
+@end menu
+
+@node Release 5.4
+@section Release 5.4
@itemize
@item Added optional @ref{Timesync, time synchronization} requirement.
It will add timestamps in handshake PRP authentication, disallowing to
to DPI.
@end itemize
-@item @anchor{Release_5.3} Release 5.3
-@cindex Release 5.3
+@node Release 5.3
+@section Release 5.3
@itemize
-@item Fixed minor bug with @code{newclient.sh} that caught
+@item Fixed minor bug with @command{newclient.sh} that caught
"Passphrase:" prompt and inserted it into example YAML output.
Just replaced stdout output to stderr for that prompt.
@end itemize
-@item @anchor{Release_5.2} Release 5.2
-@cindex Release 5.2
+@node Release 5.2
+@section Release 5.2
@itemize
@item Ability to read passphrases directly from the terminal (user's
-input) without using of keyfiles. @code{storekey.sh} utility removed.
+input) without using of keyfiles. @command{storekey.sh} utility removed.
@end itemize
-@item @anchor{Release_5.1} Release 5.1
-@cindex Release 5.1
+@node Release 5.1
+@section Release 5.1
@itemize
@item Server is configured using @url{http://yaml.org/, YAML} file. It
is very convenient to have comments and templates, comparing to JSON.
with @emph{BLAKE2b} in handshake code.
@end itemize
-@item @anchor{Release_5.0} Release 5.0
-@cindex Release 5.0
+@node Release 5.0
+@section Release 5.0
@itemize
@item New optional @ref{Encless, encryptionless mode} of operation.
Technically no encryption functions are applied for outgoing packets, so
@item Simplified payload padding scheme, saving one byte of data.
@item Ability to specify TAP interface name explicitly without any
up-scripts for convenience.
-@item @code{govpn-verifier} utility also can use @ref{EGD}.
+@item @command{govpn-verifier} utility also can use @ref{EGD}.
@end itemize
-@item @anchor{Release_4.2} Release 4.2
-@cindex Release 4.2
+@node Release 4.2
+@section Release 4.2
@itemize
@item Fixed non-critical bug when server may fail if up-script is not
executed successfully.
@end itemize
-@item @anchor{Release_4.1} Release 4.1
-@cindex Release 4.1
+@node Release 4.1
+@section Release 4.1
@itemize
@item @url{https://password-hashing.net/#argon2, Argon2d} is used instead
of PBKDF2 for password verifier hashing.
server-side configuration and the code.
@end itemize
-@item @anchor{Release_4.0} Release 4.0
-@cindex Release 4.0
+@node Release 4.0
+@section Release 4.0
@itemize
@item Handshake messages can be noised: their messages lengths are
hidden. Now they are indistinguishable from transport messages.
@item Single JSON file server configuration.
@end itemize
-@item @anchor{Release_3.5} Release 3.5
-@cindex Release 3.5
+@node Release 3.5
+@section Release 3.5
@itemize
@item Ability to use @ref{Network, TCP} network transport.
Server can listen on both UDP and TCP sockets.
reasons.
@end itemize
-@item @anchor{Release_3.4} Release 3.4
-@cindex Release 3.4
+@node Release 3.4
+@section Release 3.4
@itemize
@item Ability to use external @ref{EGD}-compatible PRNGs. Now you are
-able to use GoVPN even on systems with the bad @code{/dev/random},
+able to use GoVPN even on systems with the bad @file{/dev/random},
providing higher quality entropy from external sources.
-@item Removed @code{-noncediff} option. It is replaced with in-memory
+@item Removed @option{-noncediff} option. It is replaced with in-memory
storage of seen nonces, thus eliminating possible replay attacks at all
without performance degradation related to inbound packets reordering.
@end itemize
-@item @anchor{Release_3.3} Release 3.3
-@cindex Release 3.3
+@node Release 3.3
+@section Release 3.3
@itemize
@item Compatibility with an old GNU Make 3.x. Previously only BSD Make
and GNU Make 4.x were supported.
-@item /dev/urandom is used for correct client identity generation under
-GNU/Linux systems. Previously /dev/random can produce less than required
-128-bits of random.
-@item Updated user manual examples.
+@item @file{/dev/urandom} is used for correct client identity generation
+under GNU/Linux systems. Previously @file{/dev/random} can produce less
+than required 128-bits of random.
@end itemize
-@item @anchor{Release_3.2} Release 3.2
-@cindex Release 3.2
+@node Release 3.2
+@section Release 3.2
@itemize
-@item
-Deterministic building: dependent libraries source code commits are
-fixed in our makefiles.
-@item
-No Internet connection is needed for building the source code: all
+@item Deterministic building: dependent libraries source code commits
+are fixed in our makefiles.
+@item No Internet connection is needed for building the source code: all
required libraries are included in release tarballs.
-@item
-FreeBSD Make compatibility. GNU Make is not necessary anymore.
+@item FreeBSD Make compatibility. GNU Make is not necessary anymore.
@end itemize
-@item @anchor{Release_3.1} Release 3.1
-@cindex Release 3.1
+@node Release 3.1
+@section Release 3.1
@itemize
@item
Diffie-Hellman public keys are encoded with Elligator algorithm when
consume twice entropy for DH key generation in average.
@end itemize
-@item @anchor{Release_3.0} Release 3.0
-@cindex Release 3.0
+@node Release 3.0
+@section Release 3.0
@itemize
@item
EKE protocol is replaced by Augmented-EKE and static symmetric (both
Ability to hide underlying packets appearance rate, by generating
Constant Packet Rate traffic. This includes noise generation too.
@item
-Per-peer @code{-timeout}, @code{-noncediff}, @code{-noise} and
-@code{-cpr} configuration options for server.
+Per-peer @option{-timeout}, @option{-noncediff}, @option{-noise} and
+@option{-cpr} configuration options for server.
@end itemize
-@item @anchor{Release_2.4} Release 2.4
-@cindex Release 2.4
+@node Release 2.4
+@section Release 2.4
@itemize
-@item
-Added ability to optionally run built-in HTTP-server responding with
-JSON of all known connected peers information. Real-time client's
+@item Added ability to optionally run built-in HTTP-server responding
+with JSON of all known connected peers information. Real-time client's
statistics.
-
-@item
-Documentation is explicitly licenced under GNU FDL 1.3+.
+@item Documentation is explicitly licenced under GNU FDL 1.3+.
@end itemize
-@item @anchor{Release_2.3} Release 2.3
-@cindex Release 2.3
+@node Release 2.3
+@section Release 2.3
@itemize
-@item
-Handshake packets became indistinguishable from the random.
-Now all GoVPN's traffic is the noise for men in the middle.
+@item Handshake packets became indistinguishable from the random. Now
+all GoVPN's traffic is the noise for men in the middle.
-@item
-Handshake messages are smaller (16% traffic reduce).
+@item Handshake messages are smaller (16% traffic reduce).
-@item
-Adversary now can not create malicious fake handshake packets that
+@item Adversary now can not create malicious fake handshake packets that
will force server to generate private DH key, preventing entropy
consuming and resource heavy computations.
@end itemize
-@item @anchor{Release_2.2} Release 2.2
-@cindex Release 2.2
+@node Release 2.2
+@section Release 2.2
@itemize
@item Fixed several possible channel deadlocks.
@end itemize
-@item @anchor{Release_2.1} Release 2.1
-@cindex Release 2.1
+@node Release 2.1
+@section Release 2.1
@itemize
@item Fixed Linux-related building.
@end itemize
-@item @anchor{Release_2.0} Release 2.0
-@cindex Release 2.0
+@node Release 2.0
+@section Release 2.0
@itemize
@item Added clients identification.
@item Simultaneous several clients support by server.
@item Per-client up/down scripts.
@end itemize
-@item @anchor{Release_1.5} Release 1.5
-@cindex Release 1.5
+@node Release 1.5
+@section Release 1.5
@itemize
@item Nonce obfuscation/encryption.
@end itemize
-@item @anchor{Release_1.4} Release 1.4
-@cindex Release 1.4
+@node Release 1.4
+@section Release 1.4
@itemize
@item Performance optimizations.
@end itemize
-@item @anchor{Release_1.3} Release 1.3
-@cindex Release 1.3
+@node Release 1.3
+@section Release 1.3
@itemize
@item Heartbeat feature.
@item Rehandshake feature.
-@item up- and down- optinal scripts.
+@item up- and down- optional scripts.
@end itemize
-@item @anchor{Release_1.1} Release 1.1
-@cindex Release 1.1
+@node Release 1.1
+@section Release 1.1
@itemize
@item FreeBSD support.
@end itemize
-@item @anchor{Release_1.0} Release 1.0
-@cindex Release 1.0
+@node Release 1.0
+@section Release 1.0
@itemize
@item Initial stable release.
@end itemize
-
-@end table
@node Noise
-@cindex Noise
-@cindex Timestamps
@subsection Noise
So-called noise is used to hide underlying payload packets length.
Without it GoVPN provides confidentiality and authenticity of messages,
but not their timestamps of appearance and sizes.
-You may turn on @code{-noise} option, that forces to fill up all
+You may turn on @option{-noise} option, that forces to fill up all
outgoing packets to their maximum (MTU) size. As it can be applied only
to outgoing traffic, you should enable it on both sides in most cases.
@node PAKE
-@cindex Password Authenticated Key Agreement
-@cindex PAKE
@subsection Password Authenticated Key Agreement
GoVPN uses strong password authentication. That means that it uses human
@node Precautions
-@cindex Dangers
-@cindex Precautions
@unnumbered Precautions
@enumerate
@item
You must use @strong{cryptographically good} pseudo random number
generator. By default we use default @code{crypto/rand} library that
-reads @code{/dev/urandom} source. Some GNU/Linux and FreeBSD systems
+reads @file{/dev/urandom} source. Some GNU/Linux and FreeBSD systems
are rather good with this entropy source. Closed proprietary ones are
always not and you must use optional @ref{EGD} feature with them.
@end enumerate
@node Proxy
-@cindex Proxy
-@cindex HTTP proxy
-@cindex HTTP authentication
-@cindex CONNECT
-@cindex HTTP
@subsection Proxy
You can proxy your requests through HTTP using CONNECT method. This can
CONNECT method. Optionally it can be authenticated on it using
@emph{-proxy-auth} HTTP Basic method.
-@example
+@verbatim
% govpn-client [...] -proto tcp \
-remote "$REMOTE_ADDR":1194 \
-proxy 192.168.55.1:8888 \
-proxy-auth mylogin:password
-@end example
+@end verbatim
--- /dev/null
+@node Русский
+@unnumbered Информация на русском
+
+@menu
+* О демоне::
+* Часто задаваемые вопросы: ЧАВО.
+* Новости::
+@end menu
+
+@include about.ru.texi
+@include faq.ru.texi
+@include news.ru.texi
@node Server
-@cindex Server
-@cindex Server part
-@cindex Server configuration
-@cindex Server side
-@cindex govpn-server
@section Server part
-Except for common @code{-stats}, @code{-egd} options server has the
-following ones:
+Except for common @ref{Stats, -stats}, @ref{EGD, -egd} options client
+has the following ones:
-@table @code
+@table @option
@item -proto
-@ref{Network, network protocol} to use. Can be @emph{udp} (default),
+@ref{Network, Network protocol} to use. Can be @emph{udp} (default),
@emph{tcp} or @emph{all}.
@item -bind
@end table
-@cindex YAML
-@cindex YAML configuration
-@cindex Configuration file
Configuration file is YAML file with following example structure:
@verbatim
For example up-script can be just @code{echo tap10}, or more advanced
like the following one:
-@cindex up-script
-@example
+@verbatim
#!/bin/sh
$tap=$(ifconfig tap create)
ifconfig $tap inet6 fc00::1/96 mtu 1412 up
echo $tap
-@end example
+@end verbatim
Each minute server rereads and refreshes peers configuration and adds
newly appeared identities, deletes an obsolete ones.
-You can use convenient @code{utils/newclient.sh} script for new client
+You can use convenient @command{utils/newclient.sh} script for new client
creation:
@verbatim
@node Sources
-@cindex Sources
-@cindex Source code
-@cindex Development source code
-@cindex Git
-@cindex Repository
-@cindex Mirrors
@section Development source code
Development source code contains the latest version of the code. It may
@url{http://git.cypherpunks.ru/cgit.cgi/govpn.git/log/, repository}
and fetching dependent libraries source code as git submodules:
-@example
+@verbatim
% git clone git://git.cypherpunks.ru/govpn.git govpn
% cd govpn
% git checkout develop
% git submodule update --init
-@end example
+@end verbatim
Also there is mirror of dependent libraries for safety if their native
repositories will be unavailable (they are seldom updated):
@node Stats
-@cindex Stats
-@cindex Statistics
@subsection Statistics
Both client and server has ability to show statistics about known
connected peers. You retrieve them by downloading JSON from built-in
background HTTP-server. You can enable it by specifying
-@code{-stats host:port} argument.
+@option{-stats host:port} argument.
Actually it is not full-fledged HTTP-server: it just accepts connection,
reads from it (does not parse anything) and writes dummy headers with
body {
margin: auto;
max-width: 800px;
+ background-color: #AEBECE;
+}
+
+h1, h2, h3, h4 {
+ text-align: center;
+}
+
+h1, h2, h3, h4, strong {
+ color: #900090;
+}
+
+pre {
+ background-color: #CCCCCC;
}
@node Thanks
-@cindex Thanks
@unnumbered Thanks
Thanks for contributions and suggestions to:
@itemize
-@item
-@url{https://www.schneier.com/books/applied_cryptography/, Applied Cryptography}
-@copyright{} 1996 Bruce Schneier.
-@item
-@url{http://tnlandforms.us/cns05/speke.pdf, Strong Password-Only Authenticated Key Exchange}
-@copyright{} 1996 David P. Jablon.
-@item
-@url{https://www.cs.columbia.edu/~smb/papers/aeke.pdf, Augmented Encrypted Key Exchange}:
-a Password-Based Protocol Secure Against Dictionary Attacks and Password
-File Compromise @copyright{} Steven M. Belloving, Michael Merrit.
-@item @email{watsonbladd@@gmail.com, Watson Ladd} for suggestion of
- @url{http://elligator.cr.yp.to/, Elligator} encoding.
-@item @url{https://password-hashing.net/#argon2, PHC for Argon2}.
-@item Ronald L. Rivest for its
-@url{http://people.csail.mit.edu/rivest/chaffing-980701.txt, Chaffing
-and Winnowing: Confidentiality without Encryption}.
+@item @url{https://www.schneier.com/books/applied_cryptography/, Applied Cryptography} @copyright{} 1996 Bruce Schneier.
+@item @url{http://tnlandforms.us/cns05/speke.pdf, Strong Password-Only Authenticated Key Exchange} @copyright{} 1996 David P. Jablon.
+@item @url{https://www.cs.columbia.edu/~smb/papers/aeke.pdf, Augmented Encrypted Key Exchange}: a Password-Based Protocol Secure Against Dictionary Attacks and Password File Compromise @copyright{} Steven M. Belloving, Michael Merrit.
+@item @email{watsonbladd@@gmail.com, Watson Ladd} for suggestion of @url{http://elligator.cr.yp.to/, Elligator} encoding.
+@item @url{https://password-hashing.net/#argon2, Password Hashing Competition for Argon2}.
+@item @url{http://people.csail.mit.edu/rivest/chaffing-980701.txt, Chaffing and Winnowing: Confidentiality without Encryption} @copyright{} Ronald L. Rivest
@end itemize
@node Timeout
-@cindex Timeout
@subsection Timeout
Because of stateless UDP nature there is no way to reliably know if
@node Timesync
-@cindex Timesync
-@cindex Time synchronization
@subsection Time synchronization
DPI systems can be active. They could intercept first (assuming
Time synchronization requirement could be used for preventing this.
Client and server clocks must be synced together more or less. You
-enable it by specifying @code{timesync} option with allowable time
+enable it by specifying @option{-timesync} option with allowable time
accuracy (time window width) in seconds.
Each handshake's packet PRP authentication just XORed with current
-timestamp rounded to @code{timesync} number of seconds. Timesync option
+timestamp rounded to @option{timesync} number of seconds. Timesync option
is higher: less clock synchronization accuracy required, but bigger time
window of possible packet repeating.
+++ /dev/null
-@node TODO
-@cindex TODO
-@unnumbered TODO
-
-@itemize
-@item Randomize ports usage.
-@end itemize
@node Transport
-@cindex Transport
-@cindex Transport protocol
-@cindex Salsa20
-@cindex PRP
-@cindex Nonce
-@cindex Poly1305
-@cindex XTEA
-@cindex Serial
@section Transport protocol
@verbatim
@node User
-@cindex User
-@cindex User manual
@unnumbered User manual
Announcements about updates and new releases can be found in
nothing more. All you IP-related network management is not touched by
VPN at all. You can automate it using up and down shell scripts.
-@cindex Performance
What network performance can user expect? For example single
@emph{Intel i5-2450M 2.5 GHz} core on @emph{FreeBSD 10.2 amd64}
with @emph{Go 1.5.1} gives 786 Mbps (UDP transport) throughput.
@node Verifier
-@cindex Verifier
-@cindex govpn-verifier
@subsection Verifier
-Verifier is created using @code{govpn-verifier} utility.
+Verifier is created using @command{govpn-verifier} utility.
-@example
+@verbatim
% govpn-verifier
Passphrase:[hello world]
$argon2d$m=4096,t=128,p=1$bwR5VjeCYIQaa8SeaI3rqg$KCNIqfS4DGsBTtVytamAzcISgrlEWvNxan1UfBrFu10
$argon2d$m=4096,t=128,p=1$bwR5VjeCYIQaa8SeaI3rqg
-@end example
+@end verbatim
First line is the verifier for the server side. Second line is for the
client -- it lacks generated public key. However you can use server's
one on the client side too.
-You can check passphrase against verifier by specifying @code{-verifier}
+You can check passphrase against verifier by specifying @option{-verifier}
option with the path to verifier file:
-@example
+@verbatim
% govpn-verifier -verifier '$argon2d...'
Passphrase:[hello world]
true
-@end example
+@end verbatim
Optionally you can store plaintext passphrases on volatile memory
(memory disk, encrypted filesystem with restrictive permissions to the
-file) and provide @code{-key} option.
+file) and provide @option{-key} option.
@node Verifier structure
-@cindex Verifier structure
-@cindex Argon2
-@cindex Argon2d
-@cindex Salt
@section Verifier structure
Verifier is a derivative of the password. It is resistant to