NPST 11. Informasjonsdeling: multiple AES-GCM keys
Task description
NISSENS verksted har mottatt en mystisk melding og litt kode for å dekryptere meldingen. Noen alver i førstelinjen har sett på det, og blir ikke helt kloke. De mistenker at kun denne ene hemmeligheten ikke er nok. Kanskje er det andre som sitter på mer info?
- Mellomleder
Notes
Unzipping gives us dekrypter_melding.py and melding.enc. Here’s the python file:
from Crypto.Cipher import AES
from base64 import b64decode
import json
key = "???"
with open("melding.enc", "rb") as f:
try:
data = json.loads(f.read())
nonce = b64decode(data["nonce"])
ciphertext = b64decode(data["ciphertext"])
tag = b64decode(data["tag"])
cipher = AES.new(key, AES.MODE_GCM, nonce = nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
print("Dekryptert melding: " + plaintext.decode('utf-8'))
except (ValueError, KeyError):
print("Oisann, noe gikk galt!")Solution
from Crypto.Cipher import AES
from Crypto.Util.number import long_to_bytes, bytes_to_long
from base64 import b64decode
import json
keys = [
bytes.fromhex("980daad49738f76b80c8fafb0673ff1b"),
bytes.fromhex("a3c5a5a81ebc62c6144a9dc1ae5cce11"),
bytes.fromhex("fc78e6fee2138b798e1e51ed15e0a109")
]
key = long_to_bytes(bytes_to_long(keys[0]) ^ bytes_to_long(keys[1]) ^ bytes_to_long(keys[2]))
with open("melding.enc", "rb") as f:
data = json.loads(f.read())
nonce = b64decode(data["nonce"])
ciphertext = b64decode(data["ciphertext"])
tag = b64decode(data["tag"])
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
print("Dekryptert melding: " + plaintext.decode('utf-8'))Flag: NSM{9c7cac722d55da1dbfa13025d85efeed45e9ddea2796c0e5ea2fda81ea4de17d}