Dreamhack에서 암호학 문제 풀기 !
description
Alice와 Bob의 통신을 중간자 드림이가 엿보고 있습니다. 둘의 키교환 과정을 공격해 플래그를 획득해주세요 !
challenge.py 파일 확인
def __init__(self, p):
self.p = p
self.g = 2
self.x = random.randint(2, self.p - 1)
인자로 받은 p 초기화, g는 2로 설정, x는 2와 p-1 사이의 값
def calc_key(self):
self.k = pow(self.g, self.x, self.p)
return self.k
k = g^x (mod p) = 2^x mod p로 초기화, k값 반환
self.sk = pow(k, self.x, self.p)
aes_key = hashlib.md5(str(self.sk).encode()).digest()
self.cipher = AES.new(aes_key, AES.MODE_ECB)
shared key = k^x (mod p), ciperdms ECB모드로 동작고 키값은 aes_key
* encrypt
```python
def encrypt(self, pt):
return self.cipher.encrypt(pad(pt, 16)).hex()
암호화, 평문 pt를 암호화한 값으로 반환
def decrypt(self, ct):
return unpad(self.cipher.decrypt(bytes.fromhex(ct)), 16)
복호화, 암호문 ct를 복호환한 값으로 반환
alice_k = int(input("Key From Alice:"),16)
-> 중간자의 입력값을 전달하여 Alice의 공유키로 저장
bob_k = int(input("Key From Bob:"),16)
-> 중간자의 입력값 전달하여 Bob의 공유키로 저장
이런식으로 Alice, Bob의 키를 사용자가 입력한 값으로 조작한다.
a_pt의 복호값과 b_pt의 복호화값 더해서 flag 구하기 !