VP 35: Handshake (15 pts extra)

What You Need

Any computer with Python 3. You can also use an online Python environment, such as https://colab.research.google.com

Handshake

You have a hotel room key. The room key is a small RFID card. You reach the door to your room, swipe your card, and - beep - the light turns red.

Your task is to reverse-engineer the cryptographic handshake the card does with the door and then inject your own commands into the data stream.

The handshake used by the card and the door involves an operation that transforms a subject number. To transform a subject number, start with the value 1. Then, a number of times called the loop size, perform the following steps:

The card always uses a specific, secret loop size when it transforms a subject number. The door always uses a different, secret loop size.

The cryptographic handshake works like this:

If you can use the two public keys to determine each device's loop size, you will have enough information to calculate the secret encryption key that the card and door use to communicate; this would let you send the unlock command directly to the door!

For example, suppose you know that the card's public key is 5764801. With a little trial and error, you can work out that the card's loop size must be 8, because transforming the initial subject number of 7 with a loop size of 8 produces 5764801.

Then, suppose you know that the door's public key is 17807724. By the same process, you can determine that the door's loop size is 11, because transforming the initial subject number of 7 with a loop size of 11 produces 17807724.

At this point, you can use either device's loop size with the other device's public key to calculate the encryption key. Transforming the subject number of 17807724 (the door's public key) with a loop size of 8 (the card's loop size) produces the encryption key, 14897079. (Transforming the subject number of 5764801 (the card's public key) with a loop size of 11 (the door's loop size) produces the same encryption key: 14897079.)

What encryption key is the handshake trying to establish?

VP 35.1: Handshake (15 pts extra)

Use this data:
Card's public key: 10212254
Door's public key: 12577395
What encryption key does the handshake establish?

That number is the flag.

Hint 1: The loop numbers are larger than 1 million.

Hint 2: Use the pow function.

Source

Adapted from the Advent of Code.

Posted 10-12-24