This episode dissects MPPE, the only encryption PPTP has: the RC4 cipher with its key length variants, the key derivation process from the MS-CHAPv2 password, stateless and stateful modes, and weaknesses such as the absence of integrity checks and forward secrecy.

Encryption is PPTP's last line of defense, and that line is very thin. PPTP's data security layer is called MPPE (Microsoft Point-to-Point Encryption), and every detail inside it carries weaknesses that make PPTP unsuitable for sensitive data.
Episode 6 dissects MPPE from its roots: the RC4 cipher it uses, how the key is derived from the MS-CHAPv2 password, how to enable it in pppd, and the fundamental weaknesses that leave it without integrity or forward secrecy.
MPPE is an encryption protocol defined in RFC 3078. It uses RC4, a stream cipher designed by Ron Rivest in 1987. MPPE is available in 40-bit, 56-bit, and 128-bit variants, with 128-bit RC4 as the recommended standard.
RC4 is a stream cipher, meaning it encrypts data bit by bit with a keystream. As a consequence, any error in the header makes the data impossible to decrypt correctly — one reason MPPE needs sequence numbers.
It is important to distinguish the roles: MS-CHAPv2 authenticates the user, while MPPE encrypts the data. They work in sequence — authentication happens first over the control channel, then MPPE protects the data channel.
Combining both in one protocol is not a problem by itself, but PPTP derives them from the same secret material, namely the password. In modern protocols, authentication and encryption key exchange use separate, independent mechanisms, so the failure of one layer does not immediately bring down the other.
The most critical moment in MPPE's architecture is how the key is created. The MPPE encryption key is derived directly from the user's password through the MS-CHAPv2 session key — not from an independent key exchange mechanism.
This means PPTP's encryption security is exactly as strong as the user's password. There is no perfect forward secrecy: if the password leaks or is cracked, every session that ever used it can be retroactively decrypted as long as its traffic was recorded.
Deriving the key from the password also means the effective key length is only as strong as the password itself. A short password means a weak key, regardless of the nominal 128-bit size used. This combination makes MPPE's "128-bit" security claim very misleading.
The flow can be summarized like this: when MS-CHAPv2 authentication completes, both sides generate the same session key from the password and the challenge. From that session key, MPPE derives RC4 keys for data encryption, with separate directions for upload and download.
Because both sides compute the key from the same material, there is no public key exchange inside MPPE. This contrasts with modern protocols that use Diffie-Hellman or elliptic curves. Without a strong shared secret, the whole key hierarchy collapses — and that secret is precisely a password that can be cracked offline.
MPPE is enabled by adding the require-mppe-128 directive to the PPP options file:
name pptpd
require-mschap-v2
require-mppe-128require-mppe-128 forces all clients to use 128-bit MPPE encryption. The combination of require-mschap-v2 and require-mppe-128 is the most secure configuration PPTP can achieve — and even then it is not secure enough for sensitive data.
MPPE has two operating modes:
Most modern implementations use stateless mode because it is more tolerant of unstable networks.
RC4 has a number of long-known statistical biases, and attacks such as Bar Mitzvah and other RC4 bias attacks further reinforce the conclusion that RC4 can no longer be considered secure. Several standards (for example TLS) formally ban RC4 for this reason.
MPPE inherits all of RC4's weaknesses. Although the 128-bit key is nominally large, RC4's keystream bias reduces its effective security level.
MPPE provides no message authentication code (MAC). This means MPPE encryption does not guarantee data integrity: the receiver cannot verify that a packet was not modified in transit. Unauthenticated ciphers are highly vulnerable to tampering attacks.
The sequence number in the GRE header provides limited replay protection in stateful mode, but in stateless mode ordering is not truly enforced. The combination of no MAC and weak replay protection puts MPPE far below modern encryption standards.
The combination of weaknesses above is not a theoretical problem. Because MPPE is unauthenticated, an attacker can alter data bits undetected, and because RC4 has statistical biases, analyzing large volumes of traffic can leak some information. For organizations processing sensitive data, this is not an acceptable level of security.
Modern VPNs like WireGuard use authenticated ciphers such as ChaCha20-Poly1305, which simultaneously guarantee confidentiality and integrity, plus a key exchange that provides forward secrecy. None of these properties are available in MPPE.
The only contexts where MPPE can be tolerated are labs and security testing, or legacy environments with non-critical traffic and strict monitoring. Outside of those, MPPE should be avoided.
Before accepting a PPTP server, verify that MPPE is genuinely active on every session. pppd logs the negotiated options; if a client connects without MPPE, that is a security finding that must be addressed immediately.
sudo grep -i mppe /var/log/syslogUse grep -i mppe /var/log/syslog to see the log lines confirming that MPPE was successfully negotiated, including the key length used.
Episode 6 took apart MPPE: the RC4 stream cipher, key derivation from the MS-CHAPv2 password, the require-mppe-128 configuration, and weaknesses consisting of RC4 bias, no integrity check, and no forward secrecy.
Key takeaways:
require-mppe-128 is the standard MPPE configuration in pppd.In the next episode, episode 7, we will discuss routing and IP forwarding — configuring localip and remoteip, enabling IP forwarding, NAT MASQUERADE, proxy ARP, and the split tunneling concept on the client side.