]> git.ozlabs.org Git - ppp.git/blob - README.MPPE
Check return code of mmap (bug reported by Nick Bane)
[ppp.git] / README.MPPE
1 PPP Support for MPPE (Microsoft Point to Point Encryption)
2 ==========================================================
3
4 Frank Cusack            frank@google.com
5 Mar 19, 2002
6
7
8 DISCUSSION
9
10 MPPE is Microsoft's encryption scheme for PPP links.  It is pretty much
11 solely intended for use with PPP over Internet links -- if you have a true
12 point to point link you have little need for encryption.  It is generally
13 used with PPTP.
14
15 MPPE is negotiated within CCP (Compression Control Protocol) as option
16 18.  In order for MPPE to work, both peers must agree to do it.  This
17 complicates things enough that I chose to implement it as strictly a binary
18 option, off by default.  If you turn it on, all other compression options
19 are disabled and MPPE *must* be negotiated successfully in both directions
20 (CCP is unidirectional) or the link will be disconnected.  I think this is
21 reasonable since, if you want encryption, you want encryption.  That is,
22 I am not convinced that optional encryption is useful.
23
24 While PPP regards MPPE as a "compressor", it actually expands every frame
25 by 4 bytes, the MPPE overhead (encapsulation).
26
27 Because of the data expansion, you'll see that ppp interfaces get their
28 mtu reduced by 4 bytes whenever MPPE is negotiated.  This is because
29 when MPPE is active, it is *required* that *every* packet be encrypted.
30 PPPD sets the mtu = MIN(peer mru, configured mtu).  To ensure that
31 MPPE frames are not larger than the peer's mru, we reduce the mtu by 4
32 bytes so that the network layer never sends ppp a packet that's too large.
33
34 There is an option to compress the data before encrypting (MPPC), however
35 the algorithm is patented and requires execution of a license with Hifn.
36 MPPC as an RFC is a complete farce.  I have no further details on MPPC.
37
38 Some recommendations:
39
40 - Use stateless mode.  Stateful mode is disabled by default.  Unfortunately,
41   stateless mode is very expensive as the peers must rekey for every packet.
42 - Use 128-bit encryption.
43 - Use MS-CHAPv2 only.
44
45 Reference documents:
46
47     <http://www.ietf.org/rfc/rfc3078.txt> MPPE
48     <http://www.ietf.org/rfc/rfc3079.txt> MPPE Key Derivation
49     <http://www.ietf.org/rfc/rfc2118.txt> MPPC
50     <http://www.ietf.org/rfc/rfc2637.txt> PPTP
51     <http://www.ietf.org/rfc/rfc2548.txt> MS RADIUS Attributes
52
53 You might be interested in PoPToP, a Linux PPTP server.  You can find it at
54 <http://www.poptop.org/>
55
56 RADIUS support for MPPE is from Ralf Hofmann, <ralf.hofmann@elvido.net>.
57
58
59 BUILDING THE PPPD
60
61 The userland component of PPPD has no additional requirements above
62 those for MS-CHAP and MS-CHAPv2.  The kernel, however, requires SHA-1
63 and ARCFOUR.  Public domain implementations of these are provided.
64
65 Until such time as MPPE support ships with kernels, you can use
66 the Linux 2.2 or 2.4 implementation that comes with PPPD.  Run the
67 ppp/linux/mppe/mppeinstall.sh script, giving it the location to your
68 kernel source.  Then add the CONFIG_PPP_MPPE option to your config and
69 rebuild the kernel.  The ppp_mppe.o module is added, and the ppp.o module
70 (2.2) or ppp_generic.o (2.4) is modified (unfortunately).  You'll need
71 the new ppp.o/ppp_generic.o since it does the right thing for the 4
72 extra bytes problem discussed above.
73
74
75 CONFIGURATION
76
77 See pppd(8) for the MPPE options.  Under Linux, if your modutils is earlier
78 than 2.4.15, you will need to add
79
80     alias ppp-compress-18 ppp_mppe
81
82 to /etc/modules.conf.  (A patch for earlier versions of modutils is included
83 with the kernel patches.)
84
85