블로그

Enigma

Table of Contents

Enigma Machine이란 제2차 세계대전 당시 독일에서 주로 사용되었던 타자기와 유사한 형태의 암호 및 복호화를 하는 기계이다. 사용시 주기적으로 키가 바뀌는 성질 때문에 해독하기 많이 어려웠다. 1918년 독일에서 고안되어 상업적으로 사용되던 것이 전쟁과 함께 군사적 비밀을 주고 받기 위한 용도로 사용되었다. 독일은 에니그마 기계를 사용해 군사적으로 중요한 내용을 암호화해 주고 받았다. 연합국은 독일이 에니그마 기계로 만든 암호문을 빠르게 해독하고자 했으나, 쉽지 않았다. 전쟁의 중반기에서 후반기에 Alan Turing이 개발한 Turing Machine으로 해독에 성공했다. 에니그마 기계의 암호해독을 위해 앨런 튜링이 만든 튜링 머신은 지금 우리들이 사용하는 컴퓨터의 시초가 되었다.

help

작동 원리 #

회전자들이 잘 일정하게 회전해서 잘 치환하는 다중 치환 암호(Polyalphabetic Substitution Cipher) 이다. 전기가 통하며 잘 암호화 된다.

다중 치환 암호란 여러번 치환하는 암호이며 치환 키가 여려 개이며 거듭하여 치환한다. 다중 치환 암호의 간단한 구현을 해 보았습니다.

// 2025 (c) 박라준

fn simple_substitution(text: &str, shift: u8) -> String {
    let shift = shift % 26;
    text.chars()
        .map(|c| {
            if c.is_ascii_alphabetic() {
                let base = if c.is_ascii_uppercase() { b'A' } else { b'a' };
                let shifted = ((c as u8 - base + shift) % 26) + base;
                shifted as char
            } else {
                c
            }
        })
        .collect()
}

fn main() {
    let input = "MEET ME AT NINE";
    let rotor1 = 5;
    let rotor2 = 3;
    let rotor3 = 9;
    // encryption
    let cipher = simple_substitution(&simple_substitution(&simple_substitution(input, rotor3), rotor2), rotor1);
    println!("{}", cipher);
    // decryption
    println!("{}", simple_substitution(&simple_substitution(&simple_substitution(&cipher, 26 - rotor1), 26 - rotor2), 26 - rotor3));
}

코드분석 #

구조 #

  1. simple_substitution함수는 간단한 치환암호를 구현한 것이다. 아스키코드를 사용하여 치환을 했다.
  2. main함수는 사용 예시로 다중 치환 암호의 간단한 구조를 볼 수 있다. 본 예시에는 3개의 치환 알파벳을 사용한다.

흐름도 #

flowchart

해독 방법 #

eee (Bombe Machine, 앨런 튜링이 영국에서 개발한 해독기)

영국의 Bombe Machine은 제2차 세계 대전 중에 독일 Enigma Machine의 암호를 해독하기 위해 개발되었다. 이 기계는 블레츨리 파크에서 Alan Turing과 Gordon Welchman이 Bomba Machine이라는 폴란드의 초기 장치를 기반으로 설계되었다. 이 기계는 회전 드럼 시스템을 사용하여 가능한 에니그마 설정을 빠르게 테스트했다. 여러 에니그마 기계를 시뮬레이션하여 독일군이 사용한 올바른 암호화 키를 식별할 수 있었다. Bombe는 연합군 정보에 크게 기여하여 적의 통신을 해독하는 데 도움이 되었다. 특히, 이미 알고 있는 해독된 구문 (Crib)를 사용하여 더 빠르게 해독 할 수 있었다.

애니그마 개선 방안 #

당시에 애니그마 코드를 사용한다면

  1. 인사와 같은 알려진 해독 구문(인사말 등)을 최대한 생략하여 키 누설을 줄인다.
  2. 암호 설정을 메시지 중간에도 바꿔 해독하기 배로 어렵게 한다.

Bletchley Park (Bletchley Park, 영국의 Enigma 코드 해독의 주 장소)

특히, 애니그마의 치명적 단점은 암호보다 사용 방법에 더 많다. 키 사용 방침 등을 강화하며 반복하는 문구를 최소화하는 것을 목표로 삼아야만 한다.