Editing Protocol obfuscation
From EMule Wiki
Warning: The database has been locked for maintenance, so you will not be able to save your edits right now. You may wish to cut-n-paste the text into a text file and save it for later.
The administrator who locked it offered this explanation: site maintenance
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | Some providers are throttling eMule traffic (decreasing the allowed bandwidth). They do this by detecting the eMule protocol and allowing a very limited amount of the total bandwidth to be used by eMule. | + | Some providers are throttling eMule traffic (decreasing the allowed bandwidth). They do this by detecting the eMule protocol and allowing a very limited amount of the total bandwidth to be used by eMule. The best reaction against this is to change ISP. |
− | + | * Before you are changing your ISP, please verify on the eMule under Options-> Security-> Protocol Obfuscation, that Enable Protocol Obfusaction is checked, otherwise you are unable to work with the Protocol Obfusaction on eMule. | |
− | + | However, by encrypting the eMule protocol, the provider cannot detect eMule easy and might allow more bandwidth to be used by encrypted traffic. | |
− | * | + | * Encryption (obfuscation) is only possible if both sides use encryption. |
− | * | + | * It only protects (limited) against man-in-the-middle attacks. |
− | * | + | * It does not increase your privacy since your data is still visible to other eMule clients that use the same encryption. |
− | == | + | === neomule === |
− | + | Neomule supported a different kind of obfuscation before official supported obfuscation. THis has become mostly obsolete since official emule supportes it. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | Neomule supported a different kind of obfuscation before official supported obfuscation. | + | |
== Technical implementation == | == Technical implementation == | ||
− | + | <verse> | |
+ | encrypted UDP | ||
Basic Obfusicated Handshake Protocol UDP: | Basic Obfusicated Handshake Protocol UDP: | ||
see EncryptedStreamSocket.h | see EncryptedStreamSocket.h | ||
− | + | ||
-Keycreation Client <-> Client: | -Keycreation Client <-> Client: | ||
- Client A (Outgoing connection): | - Client A (Outgoing connection): | ||
Line 33: | Line 27: | ||
Receivekey: Md5(<UserHashClientB 16><IPClientA 4><MagicValue91 1><RandomKeyPartClientA 2>) 23 | Receivekey: Md5(<UserHashClientB 16><IPClientA 4><MagicValue91 1><RandomKeyPartClientA 2>) 23 | ||
- Note: The first 1024 Bytes will be _NOT_ discarded for UDP keys to save CPU time | - Note: The first 1024 Bytes will be _NOT_ discarded for UDP keys to save CPU time | ||
− | + | ||
-Keycreation Client <-> Server: | -Keycreation Client <-> Server: | ||
- Client A (Outgoing connection client -> server): | - Client A (Outgoing connection client -> server): | ||
Line 40: | Line 34: | ||
Receivekey: Md5(<BaseKey 4><MagicValueServerClient 1><RandomKeyPartClientA 2>) 7 | Receivekey: Md5(<BaseKey 4><MagicValueServerClient 1><RandomKeyPartClientA 2>) 7 | ||
- Note: The first 1024 Bytes will be _NOT_ discarded for UDP keys to save CPU time | - Note: The first 1024 Bytes will be _NOT_ discarded for UDP keys to save CPU time | ||
− | + | ||
- Handshake | - Handshake | ||
-> The handshake is encrypted - except otherwise noted - by the Keys created above | -> The handshake is encrypted - except otherwise noted - by the Keys created above | ||
-> Padding is cucrently not used for UDP meaning that PaddingLen will be 0, using PaddingLens up to 16 Bytes is acceptable however | -> Padding is cucrently not used for UDP meaning that PaddingLen will be 0, using PaddingLens up to 16 Bytes is acceptable however | ||
Client A: <SemiRandomNotProtocolMarker 1[Unencrypted]><RandomKeyPart 2[Unencrypted]><MagicValue 4><PaddingLen 1><RandomBytes PaddingLen%16> | Client A: <SemiRandomNotProtocolMarker 1[Unencrypted]><RandomKeyPart 2[Unencrypted]><MagicValue 4><PaddingLen 1><RandomBytes PaddingLen%16> | ||
− | + | ||
- Overhead: 8 Bytes per UDP Packet | - Overhead: 8 Bytes per UDP Packet | ||
− | + | ||
- Security for Basic Obfuscation: | - Security for Basic Obfuscation: | ||
- Random looking packets, very limited protection against passive eavesdropping single packets | - Random looking packets, very limited protection against passive eavesdropping single packets | ||
− | + | ||
- Additional Comments: | - Additional Comments: | ||
- For obvious reasons the UDP handshake is actually no handshake. If a different Encryption method (or better a different Key) is to be used this has to be negotiated in a TCP connection | - For obvious reasons the UDP handshake is actually no handshake. If a different Encryption method (or better a different Key) is to be used this has to be negotiated in a TCP connection | ||
Line 56: | Line 50: | ||
a lower CPU usage | a lower CPU usage | ||
− | + | Encrypted tcp | |
Basic Obfuscated Handshake Protocol Client <-> Client: | Basic Obfuscated Handshake Protocol Client <-> Client: | ||
Line 67: | Line 61: | ||
Receivekey: Md5(<UserHashClientB 16><MagicValue34 1><RandomKeyPartClientA 4>) 21 | Receivekey: Md5(<UserHashClientB 16><MagicValue34 1><RandomKeyPartClientA 4>) 21 | ||
NOTE: First 1024 Bytes are discarded | NOTE: First 1024 Bytes are discarded | ||
− | + | ||
- Handshake | - Handshake | ||
-> The handshake is encrypted - except otherwise noted - by the Keys created above | -> The handshake is encrypted - except otherwise noted - by the Keys created above | ||
Line 78: | Line 72: | ||
- Security for Basic Obfusication: | - Security for Basic Obfusication: | ||
- Random looking stream, very limited protection against passive eavesdropping single connections | - Random looking stream, very limited protection against passive eavesdropping single connections | ||
− | + | ||
- Additional Comments: | - Additional Comments: | ||
- RandomKeyPart is needed to make multiple connections between two clients look different (but still random), since otherwise the same key | - RandomKeyPart is needed to make multiple connections between two clients look different (but still random), since otherwise the same key | ||
Line 94: | Line 88: | ||
<nowiki>Sendkey: Md5(<S 96><MagicValue203 1>) 97</nowiki> | <nowiki>Sendkey: Md5(<S 96><MagicValue203 1>) 97</nowiki> | ||
<nowiki>Receivekey: Md5(<S 96><MagicValue34 1>) 97</nowiki> | <nowiki>Receivekey: Md5(<S 96><MagicValue34 1>) 97</nowiki> | ||
− | + | ||
NOTE: First 1024 Bytes are discarded | NOTE: First 1024 Bytes are discarded | ||
− | + | ||
- Handshake | - Handshake | ||
-> The handshake is encrypted - except otherwise noted - by the Keys created above | -> The handshake is encrypted - except otherwise noted - by the Keys created above | ||
-> Handshake is blocking - do not start sending an answer before the request is completly received (this includes the random bytes) | -> Handshake is blocking - do not start sending an answer before the request is completly received (this includes the random bytes) | ||
-> EncryptionMethod = 0 is Obfusication and the only supported right now | -> EncryptionMethod = 0 is Obfusication and the only supported right now | ||
− | + | ||
Client: <SemiRandomNotProtocolMarker 1[Unencrypted]><G^A 96 [Unencrypted]><RandomBytes 0-15 [Unencrypted]> | Client: <SemiRandomNotProtocolMarker 1[Unencrypted]><G^A 96 [Unencrypted]><RandomBytes 0-15 [Unencrypted]> | ||
Server: \<G^B 96 [Unencrypted]><MagicValue 4><EncryptionMethodsSupported 1><EncryptionMethodPreferred 1><PaddingLen 1><RandomBytes PaddingLen> | Server: \<G^B 96 [Unencrypted]><MagicValue 4><EncryptionMethodsSupported 1><EncryptionMethodPreferred 1><PaddingLen 1><RandomBytes PaddingLen> | ||
Client: <MagicValue 4><EncryptionMethodsSelected 1><PaddingLen 1><RandomBytes PaddingLen> (Answer delayed till first payload to save a frame) | Client: <MagicValue 4><EncryptionMethodsSelected 1><PaddingLen 1><RandomBytes PaddingLen> (Answer delayed till first payload to save a frame) | ||
− | + | ||
+ | |||
-> The basic handshake is finished here, if an additional/different EncryptionMethod was selected it may continue negotiating details for this one | -> The basic handshake is finished here, if an additional/different EncryptionMethod was selected it may continue negotiating details for this one | ||
− | + | ||
- Overhead: 206-251 (~229) Bytes + 2 * IP/TCP Headers Headers per Connectionon | - Overhead: 206-251 (~229) Bytes + 2 * IP/TCP Headers Headers per Connectionon | ||
− | + | ||
- DH Agreement Specifics: sizeof(a) and sizeof(b) = 128 Bits, g = 2, p = dh768_p (see below), sizeof p, s, etc. = 768 bits | - DH Agreement Specifics: sizeof(a) and sizeof(b) = 128 Bits, g = 2, p = dh768_p (see below), sizeof p, s, etc. = 768 bits | ||
− | + | </verse> | |
− | == | + | == see also == |
− | *[http://www.azureuswiki.com/index.php/Bad_ISPs List of | + | *[[http://www.azureuswiki.com/index.php/Bad_ISPs List of throttling bittorrent isp]] |
− | *[http://www.emule-project.net/home/perl/help.cgi?l=1&rm=show_topic&topic_id=848 Obfuscation | + | *[[http://www.emule-project.net/home/perl/help.cgi?l=1&rm=show_topic&topic_id=848 Obfuscation of emule docs]] |
− | + | ||
− | + | ||
− | + |