CTF | wargame

hackcenter - CBC (단순 AES, CBC 블록 암호)

nopdata 2017. 3. 7. 20:58
keyword : AES암호, CBC 블록 암호
Crypto is cool! Decrypt the secret message encrypted using cipher-block chaining (CBC) with the following parameters:

- Secret message: 9126c855e6195778bd521862485d86c267304f7d33cea48221e0b369fde7a103 (hex encoded)
- Block cipher encryption: AES
- Initialization vector: 931d82119ad8a299b2271db1fc6d2287 (hex encoded)
- Key: 49a24c2a9eab18be256bbdeaeec1c0ab (hex encoded)

AES알고리즘으로 암호화 되어 있는 암호문을 해독하면 된다. 블록 암호 방식은 CBC암호 블록이다.

[ CIpher Block Chaining mode ]

문제 지문에 친철하게 key, 초기화 벡터값, 알고리즘등을 알려주었기 때문에 그대로 사용하면 된다. 소스는 다음 주소에서 참고하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from Crypto.Cipher import AES
 
def hex_decode(message):
    try:
        result = ""
        for i in range(len(message)):
            if i%2 == 0:
                result += chr(eval("0x"+message[i:i+2]))
    except:
        print "error corrupt"
        return "false"
    return result
 
message = hex_decode("9126c855e6195778bd521862485d86c267304f7d33cea48221e0b369fde7a103")
IV = hex_decode("931d82119ad8a299b2271db1fc6d2287")
key = hex_decode("49a24c2a9eab18be256bbdeaeec1c0ab")
 
aes = AES.new(key, AES.MODE_CBC, IV)
print aes.decrypt(message)
 
### {key: 9495d8912885c961 } ###
 
cs


간단하다. 지문에 주어진 값들을 초기화 시켜주고 AES 디코딩을 해주면 된다.