Releasing 1.0.35.
[oweals/tinc.git] / README
diff --git a/README b/README
index 46deda8e50d2c71fa9b45961a1fee801cb4f3672..f47cc299484bc10bd42504f3ea01e1f2adb830a8 100644 (file)
--- a/README
+++ b/README
-This is the README file for tinc version 1.0.
-Installation instructions may be found in the INSTALL file.
+This is the README file for tinc version 1.0.35. Installation
+instructions may be found in the INSTALL file.
 
-tinc is Copyright (C) 1998,1999,2000 Ivo Timmermans
-<itimmermans@bigfoot.com>, Guus Sliepen <guus@sliepen.warande.net> and
-others. For a complete list of authors see the AUTHORS file.
-This product includes software developed by Eric Young (eay@mincom.oz.au)
+tinc is Copyright (C) 1998-2018 by:
+
+Ivo Timmermans,
+Guus Sliepen <guus@tinc-vpn.org>,
+and others.
+
+For a complete list of authors see the AUTHORS file.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or (at
 your option) any later version. See the file COPYING for more details.
 
-This version of tinc relies on the GNU Multi-Precision Library
-(gmp). This library is available from your nearest GNU mirror. Please
-install this first even before trying to run configure. If you don't
-do this, configure will (hopefully) mention it to you.
+
+Security statement
+------------------
+
+In August 2000, we discovered the existence of a security hole in all versions
+of tinc up to and including 1.0pre2. This had to do with the way we exchanged
+keys. Since then, we have been working on a new authentication scheme to make
+tinc as secure as possible. The current version uses the OpenSSL library and
+uses strong authentication with RSA keys.
+
+On the 29th of December 2001, Jerome Etienne posted a security analysis of tinc
+1.0pre4. Due to a lack of sequence numbers and a message authentication code
+for each packet, an attacker could possibly disrupt certain network services or
+launch a denial of service attack by replaying intercepted packets. The current
+version adds sequence numbers and message authentication codes to prevent such
+attacks.
+
+On September the 15th of 2003, Peter Gutmann contacted us and showed us a
+writeup describing various security issues in several VPN daemons. He showed
+that tinc lacks perfect forward security, the connection authentication could
+be done more properly, that the sequence number we use as an IV is not the best
+practice and that the default length of the HMAC for packets is too short in
+his opinion. We do not know of a way to exploit these weaknesses, but these
+issues are being addressed in the tinc 1.1 branch.
+
+The Sweet32 attack affects versions of tinc prior to 1.0.30.
+
+On September 6th, 2018, Michael Yonly contacted us and provided
+proof-of-concept code that allowed a remote attacker to create an
+authenticated, one-way connection with a node, and also that there was a
+possibility for a man-in-the-middle to force UDP packets from a node to be sent
+in plaintext. The first issue was trivial to exploit on tinc versions prior to
+1.0.30, but the changes in 1.0.30 to mitigate the Sweet32 attack made this
+weakness much harder to exploit. These issues have been fixed in tinc 1.0.35.
+The new protocol in the tinc 1.1 branch is not susceptible to these issues.
+
+Cryptography is a hard thing to get right. We cannot make any
+guarantees. Time, review and feedback are the only things that can
+prove the security of any cryptographic product. If you wish to review
+tinc or give us feedback, you are strongly encouraged to do so.
+
+
+Compatibility
+-------------
+
+Version 1.0.35 is compatible with 1.0pre8, 1.0 and later, but not with older
+versions of tinc. Note that since version 1.0.30, tinc requires all nodes in
+the VPN to be compiled with a version of LibreSSL or OpenSSL that supports the
+AES256 and SHA256 algorithms.
+
+
+Requirements
+------------
+
+The OpenSSL library is used for all cryptographic functions. You can find it at
+https://www.openssl.org/. You will need version 1.0.1 or later with support for
+AES256 and SHA256 enabled. If this library is not installed on your system, the
+configure script will fail.  The manual in doc/tinc.texi contains more detailed
+information on how to install this library. Alternatively, you may also use the
+LibreSSL library.
+
+The zlib library is used for optional compression. You can
+find it at https://zlib.net/. Because of a possible exploit in
+earlier versions we recommend that you download version 1.1.4 or later.
+
+The LZO library is also used for optional compression. You can
+find it at https://www.oberhumer.com/opensource/lzo/.
+
+In order to compile tinc, you will need a C99 compliant compiler.
+
+
+Features
+--------
 
 This version of tinc supports multiple virtual networks at once. To
 use this feature, you may supply a netname via the -n or --net
 options. The standard locations for the config files will then be
-/etc/tinc/<net>/. Because of this feature, tinc will send packets
-directly to their destinations, instead of to the uplink. If this
-behaviour is undesirable (for instance because of firewalls or
-other restrictions), please use an older version of tinc (I would
-recommend tinc-0.2.19).
-
-In this version, MAC addresses are stripped off before encoding and
-sending a packet. When the packet reaches its destination, the MAC
-addresses are rebuilt again. They then have the form
-FE:FD:aa:bb:cc:dd. aa, bb, cc and dd are taken from the destination
-and source IP address.
+/etc/tinc/<net>/.
 
 tincd regenerates its encryption key pairs. It does this on the first
 activity after the keys have expired. This period is adjustable in the
-configuration file, and the default time is 3600 seconds (one
-hour). If you send a USR2 signal to the daemon, it'll regenerate
-immediately.
+configuration file, and the default time is 3600 seconds (one hour).
+
+This version supports multiple subnets at once. They are also sorted
+on subnet mask size. This means that it is possible to have
+overlapping subnets on the VPN, as long as their subnet mask sizes
+differ.
+
+Since pre5, tinc can operate in several routing modes. The default mode,
+"router", works exactly like the older version, and uses Subnet lines to
+determine the destination of packets. The other two modes, "switch" and "hub",
+allow the tinc daemons to work together like a single network switch or hub.
+This is useful for bridging networks. The latter modes only work properly on
+Linux, FreeBSD and Windows.
+
+The algorithms used for encryption and generating message authentication codes
+can now be changed in the configuration files. All cipher and digest algorithms
+supported by OpenSSL can be used. Useful ciphers are "blowfish" (default),
+"bf-ofb", "des", "des3", et cetera. Useful digests are "sha1" (default), "md5",
+et cetera.
+
+Support for routing IPv6 packets has been added. Just add Subnet lines with
+IPv6 addresses (without using :: abbreviations) and use ifconfig or ip (from
+the iproute package) to give the virtual network interface corresponding IPv6
+addresses. tinc does not provide autoconfiguration for IPv6 hosts. Consider
+using radvd or zebra if you need it.
+
+It is also possible to make tunnels to other tinc daemons over IPv6 networks,
+if the operating system supports IPv6.  tinc will automatically use both IPv6
+and IPv4 when available, but this can be changed by adding the option
+"AddressFamily = ipv4" or "AddressFamily = ipv6" to the tinc.conf file.
+
+Normally, when started tinc will detach and run in the background. In a native
+Windows environment this means tinc will install itself as a service, which will
+restart after reboots.  To prevent tinc from detaching or running as a service,
+use the -D option.
+