]> Cypherpunks.ru repositories - govpn.git/blobdiff - doc/faq.texi
[DOC] Refactoring and more russian translation
[govpn.git] / doc / faq.texi
index 021cc552163f25bc90a09f49d0c716f308682d0a..3574f452ebbfb6cd027b009c9a4d9b258d5766de 100644 (file)
@@ -1,37 +1,54 @@
 @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
@@ -39,66 +56,73 @@ provides lesser performance (however my setup on the notebook gives more
 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
@@ -106,7 +130,9 @@ timestamps and sizes. You can run traffic analysis and predict what is
 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
@@ -116,20 +142,20 @@ allowing only specified time window of packet validness. If you have got
 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