C64(Commodore 64)로 에니그마(Enigma) 암호 해독, 82시간의 도전!
지표 일치(Index of Coincidence, IC) 공격은 암호 해독에 알려진 평문(Known Plaintext) 없이 통계적 특성을 활용하는 방법임
C64(Commodore 64) 어셈블리 및 BASIC 코드를 활용하여 IC 공격을 구현하고, 82시간의 실행 시간을 기록함
플러그보드(Plugboard)의 영향을 받지 않고 로터 설정(Rotor Settings)만으로 공격 가능하며, 다수의 후보군(Candidates)을 생성함
IC 공격의 장단점(Trade-offs)을 분석하고, 실제 운용에서의 한계와 개선 방안(Improvement)을 제시함
지표 일치(IC) 공격의 핵심 원리
본질적으로 지표 일치(Index of Coincidence, IC)는 텍스트 내에서 임의로 선택된 두 문자가 동일할 확률을 측정한다. 영어 텍스트(English Text)의 경우 약 0.0667의 값을 가지며, 무작위 텍스트(Random Text)에서는 0.0385로 떨어진다. 에니그마(Enigma) 암호 해독 시, 올바른 설정을 사용하면 해독된 텍스트가 언어의 통계적 특성을 나타내지만, 잘못된 설정에서는 무작위 텍스트처럼 보이기 때문에 IC 값을 통해 올바른 설정을 식별할 수 있다.
C64(Commodore 64) 환경에서의 구현
C64(Commodore 64)에서 IC 공격은 어셈블리(Assembly) 및 BASIC 언어로 구현되었다. 어셈블리 버전(Assembly Version)은 336가지 로터 순서(Rotor Orderings)와 각 순서에 대한 17,576가지 위치 설정을 모두 검색하며, 총 590만 개 이상의 후보(Candidates)를 검사한다. BASIC 버전(BASIC Version)은 단일 로터 순서에 대한 모든 위치를 검색하며, 60자 암호문을 해독하고 각 후보에 대한 IC 값을 계산한다. 구현 코드는 본문에 포함되어 있다.
플러그보드(Plugboard)의 무관성
IC 공격은 플러그보드(Plugboard)의 설정을 알 필요 없이 로터(Rotor) 설정만으로 공격할 수 있다는 장점이 있다. 플러그보드는 단순히 문자를 다른 문자로 대체하는 단일 문자 치환(Monoalphabetic Substitution)을 수행하므로, 빈도수의 상대적 분포는 변하지 않는다. 따라서 IC는 플러그보드에 의해 변경되지 않는 로터 설정(Rotor Settings)에만 의존하며, 플러그보드는 별도로 주파수 분석(Frequency Analysis)을 통해 해결할 수 있다.
성능 및 트레이드오프(Trade-offs)
C64(Commodore 64)에서 IC 공격은 계산 비용(Computational Cost)이 높다. 각 후보에 대해 60번의 암호화(Encryption) 연산과 빈도수 계산, IC 합 계산을 수행해야 한다. 어셈블리 버전은 82시간(3.4일)이 소요되며, 194 이상의 IC 합을 가진 18,165개의 후보를 생성한다. 브루트 포스 공격(Brute-force Cracker)에 비해 속도가 느리지만, 알려진 평문(Known Plaintext)이 필요 없다는 장점이 있다. 구체적인 트레이드오프(Trade-offs)는 다음과 같다.
장점: 알려진 평문(Known Plaintext) 불필요
단점: 높은 계산 비용, 다수의 후보 생성
개선 및 확장 가능성
IC 공격의 성능을 향상시키기 위한 몇 가지 방법이 제시되었다. IC를 이용한 사전 필터링(Pre-filter with IC)을 통해 로터 순서를 줄이고, 빅그램 빈도 분석(Bigram Scoring)을 통해 정확도를 높일 수 있다. 또한, 플러그보드 해결(Solve the plugboard)을 위한 주파수 분석, 메시지 길이에 따른 임계값 조정(Variable threshold) 등의 기법을 활용할 수 있다. 이러한 개선 사항들은 IC 공격의 효율성을 높이는 데 기여할 수 있다.