아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
레딧 favicon레딧

C64(Commodore 64)로 에니그마(Enigma) 암호 해독, 82시간의 도전!

by DD
2026-03-31
3개월 전
조회수 22

지표 일치(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 공격의 효율성을 높이는 데 기여할 수 있다.

Breaking Enigma with Index of Coincidence on a Commodore 64
중급
아키텍처
C/C++
BASIC
Backend
원문 읽기
원문 읽기

관련 추천 글

CodeQL 점진적 분석으로 C/C++, Go 코드 분석 속도 UP!

깃헙 로고

C/C++ 의존성 관리, 원격 include 기술 등장?

레딧 로고

C/C++ 의존성 관리, 이대로 괜찮은가?

랍스타즈 로고

C/C++ 빌드, 이제 Craft로 간편하게!

해커뉴스 로고

C/C++ asin() 함수, Estrin's Scheme 적용으로 최대 1.88배 성능 향상!

레딧 로고

C/C++ 코드, CPU 아키텍처에 맞춰 속도 2배 빠르게!

레딧 로고
레딧 favicon레딧
중급
아키텍처
C/C++
BASIC
Backend

관련 추천 글

CodeQL 점진적 분석으로 C/C++, Go 코드 분석 속도 UP!

깃헙 로고

C/C++ 의존성 관리, 원격 include 기술 등장?

레딧 로고

C/C++ 의존성 관리, 이대로 괜찮은가?

랍스타즈 로고

댓글 0

첫 번째 댓글을 남겨보세요!