]> Cypherpunks.ru repositories - govpn.git/blob - doc/overview.texi
[DOC] Split large govpn.texi to several smaller parts
[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.
14
15 Because of stateless UDP nature, after some timeout of inactivity peers
16 forget about each other and have to retry handshake process again,
17 therefore background heartbeat process will be ran.
18
19 Handshake is used to mutually authenticate peers, exchange common secret
20 per-session encryption key and check UDP transport availability.
21
22 Because of UDP and authentication overhead: each packet grows in size
23 during transmission, so you have to lower you maximum transmission unit
24 (MTU) on virtual network interface.
25
26 High security is the goal for that daemon. It uses fast cryptography
27 algorithms with 128bit security margin, strong mutual zero-knowledge
28 authentication and perfect-forward secrecy property. An attacker can not
29 know anything about payload (except it's size and time) from captured
30 traffic, even if pre-shared key is compromised. Rehandshake is performed
31 by client every 4 GiB of transfered data.
32
33 Each client also has it's own identification key and server works with
34 all of them independently. Identification key is not secret, but it is
35 encrypted (obfuscated) during transmission.
36
37 The only platform specific requirement is TAP network interface support.
38 API to that kind of device is different, OS dependent and non portable.
39 So only a few operating systems is officially supported. Author has no
40 proprietary software to work with, so currently there is lack of either
41 popular Microsoft Windows or Apple OS X support.
42
43 @itemize @bullet
44 @item
45 Works with @url{https://en.wikipedia.org/wiki/TAP_(network_driver), TAP}
46 network interfaces on top of UDP entirely
47 @item
48 @url{https://www.gnu.org/, GNU}/Linux and
49 @url{http://www.freebsd.org/, FreeBSD} support
50 @item IPv6 compatible
51 @item Encrypted and authenticated transport
52 @item Relatively fast handshake
53 @item
54 @url{https://en.wikipedia.org/wiki/Replay_attack, Replay attack} protection
55 @item
56 @url{https://en.wikipedia.org/wiki/Forward_secrecy, Perfect forward secrecy}
57 (if long-term pre-shared keys are compromised, no captured traffic can
58 be decrypted anyway)
59 @item
60 Mutual two-side authentication (noone will send real network interface
61 data unless the other side is authenticated)
62 @item
63 @url{https://en.wikipedia.org/wiki/Zero-knowledge_password_proof, Zero knowledge}
64 authentication (pre-shared key is not transmitted in any form between
65 the peers, not even it's hash value)
66 @item Built-in rehandshake and heartbeat features
67 @item Several simultaneous clients support
68 @end itemize