]> Cypherpunks.ru repositories - govpn.git/blob - doc/faq.texi
Fix docstring splitted lines
[govpn.git] / doc / faq.texi
1 @node FAQ
2 @unnumbered Frequently Asked Questions
3
4 See also this page @ref{ЧАВО, on russian}.
5
6 @menu
7 * Why do not you use TLS?: Why not TLS.
8 * Why do not you use SSH?: Why not SSH.
9 * Why do not you use IPsec?: Why not IPsec.
10 * Why GoVPN is written on Go?: Why Go.
11 * Why do you authenticate with passphrases?: Why passphrases.
12 * Why all network configuration must be done manually?: Why manual network configuration.
13 * Why there is no either OS X or Windows support?: Why no proprietary OS support.
14 * What do you mean by perfect forward secrecy?: What is perfect forward secrecy.
15 * What do you mean by saying that clients are anonymous?: What is anonymity.
16 * What do you mean by censorship resistance?: What is censorship resistance.
17 * When should I use encryptionless mode?: When encryptionless mode.
18 * When should I use noise option?: When noise option.
19 * When should I use time synchronization option?: When timesync option.
20 * Can I DoS (denial of service) the daemon?: Can I DoS daemon.
21 * Why YAML for configuration?: Why YAML.
22 @end menu
23
24 @node Why not TLS
25 @section Why do not you use TLS?
26
27 @itemize
28 @item It is complicated badly designed protocol.
29 @item It uses Authenticate-then-Encrypt ordering of algorithms.
30 @item Its libraries are huge and hard to read, review and analyze.
31 @end itemize
32
33 @node Why not SSH
34 @section Why do not you use SSH?
35
36 @itemize
37 @item Its first protocol versions used A-a-E ordering, however later
38 ones supports even ChaCha20-Poly1305 algorithms.
39 @item OpenSSH does not support strong zero-knowledge password
40 authentication.
41 @end itemize
42
43 @node Why not IPsec
44 @section Why do not you use IPsec?
45
46 It lacks strong zero-knowledge password authentication and, again,
47 its code is hard to read.
48
49 @node Why Go
50 @section Why GoVPN is written on Go?
51
52 Go is very easy to read, review and support. It makes complex code
53 writing a harder task. It provides everything needed to the C language:
54 array bounds checking, garbage collection and concurrency primitives. It
55 provides lesser performance (however my setup on the notebook gives more
56 than 750 Mbps of throughput), but higher reliability and much fewer
57 lines of code.
58
59 @node Why passphrases
60 @section Why do you authenticate with passphrases?
61
62 Human is capable of memorizing rather long passphrases (not passwords):
63 100-200 characters, that gives ability to use it as a high-entropy key.
64 You need to trust only yourself, neither hardware token nor some other
65 storage device. It is convenient.
66
67 @node Why manual network configuration
68 @section Why all network configuration must be done manually?
69
70 Because there are so many use-cases and setups, so many various
71 protocols, that either I support all of them, or use complicated
72 protocol setups like PPP, or just give right of the choice to the
73 administrator. VPN is only just a layer, just like Ethernet cable.
74
75 @node Why no proprietary OS support
76 @section Why there is no either OS X or Windows support?
77
78 Any closed source proprietary systems do not give ability to control the
79 computer. You can not securely use cryptography-related stuff without
80 controlling the underlying computing device. Choose another operating
81 system.
82
83 @node What is perfect forward secrecy
84 @section What do you mean by perfect forward secrecy?
85
86 You can not decrypt previously saved traffic by compromising long-lived
87 keys. PFS property is per-session level: it won't protect from leaking
88 the session key from the memory.
89
90 @node What is anonymity
91 @section What do you mean by saying that clients are anonymous?
92
93 That third-party can not differentiate one client from another looking
94 at the traffic (transport and handshake).
95
96 @node What is censorship resistance
97 @section What do you mean by censorship resistance?
98
99 Unability to distinguish either is it GoVPN-traffic is passing by, or
100 just @code{cat /dev/urandom | nc somehost}. If you can not differentiate
101 one kind of traffic from another, then your only option is to forbid all
102 kinds of it.
103
104 @node When encryptionless mode
105 @section When should I use @ref{Encless, encryptionless mode}?
106
107 If you are operating under jurisdiction where courts can either sue you
108 for encryption usage or force you to somehow reveal you encryption
109 keys (however new session encryption keys are generated each session).
110 Those courts can not demand for authentication and signing keys in most
111 cases.
112
113 @strong{Do not} let mode's name to confuse you: it still provides
114 confidentiality and authenticity of transmitted data! But pay attention that
115 this mode is traffic and resource hungry and currently operate only in TCP
116 mode.
117
118 If anything that can not be read by anyone is considered encryption,
119 then encryptionless mode won't help you. Imagine that either you are
120 talking on another foreign language, or just use another date encoding
121 scheme.
122
123 @node When noise option
124 @section When should I use @ref{Noise, noise} option?
125
126 In most cases you won't need it without @ref{CPR, constant packer rate}
127 turned on. Without CPR and noise options GoVPN traffic (like TLS, IPsec,
128 SSH and other VPN protocols) leaks underlying interface's packets
129 timestamps and sizes. You can run traffic analysis and predict what is
130 going on in the network. With CPR option enabled you can tell either
131 somebody is online, or not -- nothing less, nothing more.
132
133 @node When timesync option
134 @section When should I use @ref{Timesync, time synchronization} option?
135
136 Without that option, if someone captured initial handshake packet from
137 the valid client, then it could repeat it and receive a handshake packet
138 as an answer from server. This can be used to detect if some user's
139 identity is known to server and that it is exactly GoVPN server.
140 Timesync option forces adding timestamps to each handshake packet
141 allowing only specified time window of packet validness. If you have got
142 more or less synchronized clocks between your clients and server, then
143 you can always use this option.
144
145 @node Can I DoS daemon
146 @section Can I DoS (denial of service) the daemon?
147
148 Each transport packet is authenticated first with the very fast UMAC
149 algorithm -- in most cases resource consumption of TCP/UDP layers will
150 be higher then UMAC verifying. Each handshake message is processed only
151 when an encrypted client's @ref{Identity, identity} is found: it uses
152 fast PRP without any entropy usage.
153
154 @node Why YAML
155 @section Why YAML for configuration?
156
157 There are not so many well-known formats that allow commenting, easy
158 editing by human (XML is not human friendly at all, JSON is more or
159 less). Probably the most useful feature is YAML's templates: it is very
160 convenient for storing many clients sharing the same options in the
161 configuration file.