]> Cypherpunks.ru repositories - govpn.git/blob - doc/overview.texi
Ability to append noise to outgoing packets
[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 Copylefted free software: licensed under
43 @url{https://www.gnu.org/licenses/gpl-3.0.html, GPLv3+}
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 payload 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 @item Optional noise-appending for concealing underlying packet's length
69 @item Optional built-in HTTP-server for retrieving information about
70 known connected peers in @url{http://json.org/, JSON} format
71 @end itemize