The Internet of Broken Protocols: Showcase #1

(complete list of showcases: https://www.hyundaihatinh3s.com/search/label/The%20Internet%20of%20Broken%20Protocols)

Updated: scroll down for solutions.

Alice and Bob have a pre-shared secret PSS. They want to build a secure channel. Someone designed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following protocol for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. Your task is to analyze this protocol and find all weaknesses. You might email me at thaidn@gmail.com if you want some privacy. I'll update this post with my solution in 48 hours.

The protocol consists of two sub protocols: key exchange and data encryption.

# Aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated key exchange

1/ Remind: Alice and Bob have a pre-shared secret PSS.

2/ They perform an unaucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated Curve25519 key exchange. Let K denote cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 raw 32-byte shared key.

3/ Alice generates and sends 32-byte random alice_nonce. Bob generates and sends 32-byte random bob_nonce.

4/ Alice sends alice_proof = HMAC-SHA256(K, alice_nonce + PSS). Bob verifies and closes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection if alice_proof is invalid.

5/ Bob sends bob_proof = HMAC-SHA256(K, bob_nonce + PSS). Alice verifies and closes cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection if bob_proof is invalid.

At this point cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated key exchange is considered successful.

# Data encryption

1/ Alice derives two 32-byte keys:

K_read = HMAC-SHA256(K , "Alice")
K_write = HMAC-SHA256(K , "Bob")

2/ Alice uses K_read to decrypt data sent by Bob and K_write to encrypt data sent to Bob. All data encryption is done using AES-GCM with a random 96-bit IV.

---

I got answers from three people. Two persons identified cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most critical issue. The best part is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 readers also identified a vulnerability that I didn't know. This is really fun and inspiring :). Thanks everyone for participating!

The winner is Andrew L. He wrote:

Problem 1: if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DH algorithm chosen doesn't guarantee contributory behavior, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 algorithm fails completely.  M can simultaneously aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticate with A and B, forcing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same key K in both exchanges and relaying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication messages.

This attack could end up being trivial: just edit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DH shares on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wire to make cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m both be cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 identity.

Problem 2: Chuck convinces Alice to initiate a connection to him and claims to be Bob.  He sets bob_nonce = alice_nonce.  Now he can aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticate without knowing PSS.  (This only works if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 nonce exchange allows this.)

Problem 3: This use of HMAC is backwards.  An attacker pretending to be Alice or Bob (doing DH normally) knows K.  That means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker can search for collisions to generate a nonce that internally collides with Alice or Bob's nonce.  If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 underlying hash is strong, this isn't so bad, but if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 hash allows first preimages to be found, this allows a harder-to-detect version of #2.  (Under normal use where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key is unknown to an attacker, HMAC prevents this type of attack.)

Problem #1 is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 issue that I had in mind. I explicitly used Curve25519 to demonstrate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fact that in some badly designed protocols one really needs to verify Curve25519 public keys, contrary to popular belief. The issue is less severed if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 protocol uses a NIST curve because as far as I can tell most libraries don't have a valid encoding for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 identity point which is also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point at infinity. Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r reader, Thắng N., also identified this issue.

Problem 2 is just mind blowing. I saw attacks like this before, if I remember correctly cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are called "reflection attack" in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 literature, but I failed to recognize it when I first looked at this protocol. To be fair to myself, it was because I focused on decrypting data sent in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second phase. This attacks allows bypassing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication phase, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attacker won't know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shared secret. Anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r reader, Carl M. also identified this issue.

Problem 3: I don't really think this is a problem, as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 search space is huge and most hash functions, even badly broken MD5, are safe against pre-image attacks. Anyway it's really cool that Andrew thinks of issues like this and shares his thought with us.

Thanks everyone!

Comments

Unknown said…
I thought cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contributory problem didn't really make sense in your first post. But this illustration brings this to life. I still think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 contributory thing is not such a problem in general. Here cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 big mistake is that no side is aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365nticated. Only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PSS was almost stopping cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 MITM. But if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y already have a PSS, I'm sure we have better protocola to take advantage of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m