]> Cypherpunks.ru repositories - govpn.git/blob - doc/overview.texi
[DOC] Some refactoring, rewording
[govpn.git] / doc / overview.texi
1 @node Overview
2 @unnumbered Overview
3
4 GoVPN is simple secure virtual private network daemon. It uses
5 @url{https://en.wikipedia.org/wiki/Encrypted_key_exchange, Diffie-Hellman Encrypted Key Exchange}
6 (DH-EKE) for mutual zero-knowledge peers authentication and
7 authenticated encrypted data transport. It is written entirely on
8 @url{http://golang.org/, Go programming language}.
9
10 All packets captured on network interface are encrypted, authenticated
11 and sent to remote server, that writes them to his interface, and vice
12 versa. Client and server use pre-shared authentication key (PSK) and
13 128-bit identification key. There are heartbeat packets used to prevent
14 session termination because of peers inactivity.
15
16 Handshake is used to mutually authenticate peers, exchange common secret
17 per-session encryption key and check UDP transport availability.
18
19 Because of UDP and authentication overhead: each packet grows in size
20 during transmission, so you have to lower you maximum transmission unit
21 (MTU) on virtual network interface.
22
23 High security is the goal for that daemon. It uses fast cryptography
24 algorithms with 128bit security margin, strong mutual zero-knowledge
25 authentication and perfect-forward secrecy property. An attacker can not
26 know anything about payload (except it's size and time) from captured
27 traffic, even if pre-shared key is compromised. Rehandshake is performed
28 by client every 4 GiB of transfered data.
29
30 Each client also has it's own identification key and server works with
31 all of them independently. Identification key is not secret, but it is
32 encrypted (obfuscated) during transmission.
33
34 The only platform specific requirement is TAP network interface support.
35 API to that kind of device is different, OS dependent and non portable.
36 So only a few operating systems is officially supported. Author has no
37 proprietary software to work with, so currently there is lack of either
38 popular Microsoft Windows or Apple OS X support.
39
40 @itemize @bullet
41 @item
42 Works with @url{https://en.wikipedia.org/wiki/TAP_(network_driver), TAP}
43 network interfaces on top of UDP entirely
44 @item
45 @url{https://www.gnu.org/, GNU}/Linux and
46 @url{http://www.freebsd.org/, FreeBSD} support
47 @item IPv6 compatible
48 @item Encrypted and authenticated transport
49 @item Relatively fast handshake
50 @item
51 @url{https://en.wikipedia.org/wiki/Replay_attack, Replay attack} protection
52 @item
53 @url{https://en.wikipedia.org/wiki/Forward_secrecy, Perfect forward secrecy}
54 (if long-term pre-shared keys are compromised, no captured traffic can
55 be decrypted anyway)
56 @item
57 Mutual two-side authentication (noone will send real network interface
58 data unless the other side is authenticated)
59 @item
60 @url{https://en.wikipedia.org/wiki/Zero-knowledge_password_proof, Zero knowledge}
61 authentication (pre-shared key is not transmitted in any form between
62 the peers, not even it's hash value)
63 @item Built-in rehandshake and heartbeat features
64 @item Several simultaneous clients support
65 @end itemize