aes 양방향 암호화 알고리즘에는, ECB (electronic code book) 모드가 있습니다. 공식 문서를 보면 떡하니 경고. 절대 쓰지 마세요. 라고 되어 있습니다. weakest라고 쓰여져 있는 것은 덤입니다. 왜 그런지 이것도 간단하게 실습으로 때워보도록 하겠습니다. 모르면 직접 부딪치는 것은 나쁜 전략이 아닙니다.

 


 먼저, Crypto.Util에는 pad와 unpad가 있습니다. ECB 모드를 이용하기 위해, 적당히 pad 함수를 이용하겠습니다.

 

 

 먼저, 원본인 "a"가 64개 이어 붙여져 있는 문자열이 있습니다. block_size는 16입니다. 이 함수는 style에 아무것도 없을 때, pkcs7을 이용한다고 되어 있습니다. padding 된 결과를 보도록 하겠습니다. 먼저 "a"가 64개 있을 때입니다.

 

 \x10이 16개가 text 뒤에 붙었음을 확인할 수 있습니다. 만약에 "a"가 49개 있으면 어떤가요?

 

 \x0f가 15개 붙어 있습니다. 49+15 = 64이니, 16의 배수가 되네요. 적당히 사이즈를 맞추기 위해서 뒤에 적당히 추가하는 작업을 padding 메서드로 하고, unpadding으로 패딩된 데이터를 제거하게 됩니다.

 

 다음에, MODE_ECB로 aes 암호화를 할 겁니다. 10번째 줄에 암호화된 텍스트인 cipher_text를 출력합니다.

 

 다시, 암호화된 텍스트를 복호화 합니다. 복호화 된 결과에서 unpad를 하면 원래 문자가 나올 겁니다. 이 결과를 출력합니다.

 


 프로그램 실행 결과입니다. 다른 것은 볼 필요가 없고, \x84\x8e=...\x84가 반복됨을 알 수 있습니다. 특정한 길이마다 반복해서 같은 패턴의 무언가가 반복됨을 알 수 있습니다.

 

 

 이것이 "a"가 반복되는 패턴에서만 나오면 좋은데 "bc"가 반복되는 message에서도 똑같이 나옵니다.

 

 이를 그림으로 단순화 시키면 요래 됩니다. 패턴을 잘 숨기지 못한다는 것은 명확해 보입니다. 일정 길이로 쪼개서 같은 키로 독립적으로 암호화 시키고 있는 것을 볼 수 있었습니다. 고로 하나가 유출되면, 다른 블록까지 영향을 끼칠 수 있게 됩니다.