Crypto2 [Crypto] 2019 CTFZONE agents : OFB 모드에서 값을 조작해야하는 문제 먼저 문제에 대해 설명을 하자면, 1번을 누를 경우, 요원이름과 장문의 랜덤한 암호문을 준다. 이후 이 암호문을 가지고 2번을 눌러 에이전트에게 이름과 암호문을 전달하면 믿을만한 요원이 아니기때문에 시크릿 메시지를 줄 수 없다고 한다. 이에 분석을 해서 알게된 것을 아래와 같이 추렸다. 알고있는 것: 1. AES-OFB모드로 암호화된 암호문 2. 세어보니 암호문은 자릿수는 337자리 (ECB와 OFB모드처럼 길이가 블럭단위가 아니다) 3. 한번 사용된 요원의 암호문은 재사용불가 4. 암호문은 JSON이다. (337자리에서 특정 바이트들을 깨서 보내보았는데 정상동작을 할때도 있고, "JSON Corrupted" 메시지가 뜰때도 있었음) 그래서 나는 JSON 값에 "{trust : 0}" 와 같은 필드가 존.. 2019. 12. 2. [Python] AES 예제 import base64 from Crypto.Cipher import AES from Crypto import Random pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) unpad = lambda s : s[:-ord(s[len(s)-1:])] class AESCipher: def __init__( self, key ): self.key = key def encrypt( self, raw ): raw = pad(raw) iv = Random.new().read( AES.block_size ) cipher = AES.new( self.key, AES.MODE_CBC, iv ) return base64.b64encode( iv + ciphe.. 2018. 2. 6. 이전 1 다음 반응형