Default Telegram Desktop uses a static ClientHello with a fixed fingerprint, making it easy for DPI systems to detect and block MTProto traffic.
Changes:
- Random selection between Chrome-like and Firefox-like fingerprint on each connection instead of a single static rule set
- Dynamic cipher suites: a small set of essential suites are always present, a random subset is picked from the remaining ones, then everything is shuffled
- Randomized TLS extensions: besides mandatory SNI, randomly add a few valid extensions from a predefined list, also shuffled
- Chunked ClientHello sending with random delays between chunks and random initial delay, forced flush after each chunk
- Disabled Nagle's algorithm via LowDelayOption for immediate packet sending
- Added random jitter to timestamp to avoid perfect precision
Each new connection generates a unique ClientHello with different fingerprint, different cipher suites, different extensions and different sending pattern, making MTProto traffic detection by signature impossible.
- Increase ClientHello size via padding
- Fragment outgoing packets with randomized chunk sizes
- Remove extension shuffling for stable fingerprint
- Add support for new TLS block schema types
- Add random jitter to timestamp generation
* Hacky implementation, needs review.