1. 대칭키 암호 모델(Symmetric/Private Cipher)
대칭키 암호(Symmetric/Private Cipher)
송신자와 수신자가 동일한 비밀키를 공유하여 암호화와 복호화에 사용하는 암호 방식이다
기본 용어
| 용어 | 의미 |
|---|---|
| 평문(Plaintext, Message, P) | 암호화하기 전의 원본 메시지 |
| 암호문(Ciphertext, C) | 평문을 암호화하여 변환한 메시지 |
| 암호화(Encipher, Encrypt, E) | 평문을 암호문으로 변환하는 과정 |
| 복호화(Decipher, Decrypt, D) | 암호문을 원래의 평문으로 복원하는 과정 |
| 키(Key, K) | 암호화와 복호화에 사용하는 입력값으로, 대칭키 암호에서는 비밀로 유지해야 한다. |
1.1 동작 과정
- 송신자가 평문과 비밀키를 암호화 알고리즘에 입력한다
- 암호화 알고리즘이 평문을 암호문으로 변환한다
- 생성된 암호문을 수신자에게 전송한다
- 수신자가 암호문과 공유한 비밀키를 복호화 알고리즘에 입력한다
- 복호화 알고리즘이 암호문에 원래의 평문으로 복원한다
수식으로 표현하면 다음과 같다
| 구분 | 수식 |
|---|---|
| 암호화 | |
| 복호화 |
여기서 와 는 각각 키 를 사용하는 암호화 연산과 복호화 연산이다
1.2 대칭키 암호의 두 가지 요구사항
1.2.1 강력한 암호화 알고리즘
암호화 알고리즘은 공격자가 암호문을 확보하고 알고리즘을 알고 있더라도, 평문을 복원하거나 키를 알아내기 어려워야 한다
- 암호화 방식이 알려졌다는 이유만으로 암호가 쉽게 해독되어서는 안 된다
- 따라서 암호화 알고리즘 자체는 비밀로 유지할 필요가 없다
- 알고리즘을 공개하면 여러 사용자와 시스템이 이를 검토하고 널리 활용할 수 있다
알고리즘의 공개와 안전성
암호의 안전성은 알고리즘을 숨기는 데 의존하지 않아야 하며, 알고리즘이 공개되어도 비밀키 없이는 해독하기 어려워야 한다
1.2.2 비밀키의 보호
비밀키는 송신자와 수신자가 안전하게 공유하고 비밀로 유지해야 한다
- 공유한 키가 외부에 노출되지 않도록 보호해야 한다
- 공격자가 키를 확보하면 해당 키로 암호화된 메시지를 복호화할 수 있다
- 따라서 강력한 알고리즘을 사용하더라도 비밀키가 유출되면 메시지의 기밀성을 보장할 수 없다
1.3 암호 시스템의 분류
암호 시스템은 암호화 연산의 종류와 평문을 처리하는 방식에 따라 분류할 수 있다
1.3.1 암호화 연산에 따른 분류
치환
치환(Substitution)
평문을 구성하는 각 요소를 다른 요소로 바꾸는 암호화 기법이다
- 평문의 문자나 비트 등을 다른 문자나 비트 등으로 대응시킨다
- 핵심은 요소 자체를 변경하는 것이다
- 예를 들어, 각 알파벳을 세 칸 뒤의 알파벳으로 바꾸면
ABC는DEF가 된다
전치
전치(Transpotion)
평문을 구성하는 요소의 위치나 순서를 재배열하는 암호화 기법이다
- 요소 자체는 유지하면서 배치 순서를 바꾼다
- 핵심은 요소의 위치를 변경하는 것이다
- 예를 들어, 문자의 순서를 뒤집으면
ABC → CBA가 된다
1.3.2 평문 처리 방식에 따른 분류
블럭 암호
블럭 암호(Block Cipher)
평문을 일정한 크기의 블록 단위로 묶어 한 번에 처리하는 암호 방식이다
- 입력을 한 번에 한 블록씩 처리한다
- 각 입력 블록에 대응하는 출력 블록을 생성한다
스트림 암호
스트림 암호(Stream Cipher)
평문을 구성하는 요소를 연속적으로 하나씩 처리하는 암호 방식이다
- 입력 요소를 연속적으로 처리한다
- 한 번에 하나의 요소에 해당하는 출력을 생성한다
- 처리 요소는 1비트 또는 1문자 등이 될 수 있다
1.4 암호해독 공격의 유형
암호해독 공격은 공격자가 알고 있는 정보와 이용할 수 있는 기능에 따라 구분한다. 모든 유형에서 공격자가 알고리즘을 알고 있다고 가정한다
1.4.1 암호문 단독 공격
암호문 단독 공격(Ciphertext-only Attack)
공격자가 암호화 알고리즘과 암호문만 알고 있는 상태에서 평문이나 키를 알아내려는 공격이다
공격자가 알고 있는 정보
- 암호화 알고리즘
- 암호문
암호문에 대응하는 평문을 모르는 상태에서 암호문의 통계적 특성 등을 분석한다
1.4.2 기지 평문 공격
기지 평문 공격(Known-plaintext Attack)
공격자가 하나 이상의 평문과 그에 대응하는 암호문 쌍을 알고 있는 상태에서 수행하는 공격이다
공격자가 알고 있는 정보
- 암호화 알고리즘
- 암호문
- 하나 이상의 평문-암호문 쌍
이미 알려진 평문과 암호문의 관계를 분석하여 키를 추정하거나 다른 암호문을 해독하려고 한다
1.4.3 선택 평문 공격
선택 평문 공격(Chosen-plaintext Attack)
공격자가 원하는 평문을 직접 선택하고, 그 평문에 대응하는 암호문을 얻을 수 있는 상태에서 수행하는 공격이다
공격자가 알고 있거나 얻을 수 있는 정보
- 암호화 알고리즘
- 암호문
- 공격자가 선택한 평문과 그에 대응하는 암호문 쌍
기지 평문 공격과 달리, 공격자가 분석에 유리한 평문을 직접 선택하여 암호화를 요청할 수 있다
1.4.4 선택 암호문 공격
선택 암호문 공격(Chosen-ciphertext Attack)
공격자가 원하는 암호문을 직접 선택하고, 그 암호문에 대응하는 복호화 결과를 얻을 수 있는 상태에서 수행하는 공격이다
공격자가 알고 있거나 얻을 수 있는 정보
- 암호화 알고리즘
- 암호문
- 공격자가 선택한 암호문과 그에 대응하는 평문 쌍
선택한 암호문의 복호화 결과를 분석하여 다른 암호문을 해독하거나 키에 관한 정보를 얻으려고 한다. 해독하려는 목표 암호문 자체를 그대로 복호화해 달라고 요청하는 것은 허용되지 않는 것으로 본다
1.5 암호의 안전성
암호의 안전성은 무조건적 안전성과 계산적 안전성으로 구분할 수 있다
1.5.1 무조건적 안전성
무조건적 안전성(Unconditional Security)
공격자가 무제한의 계산 능력과 시간을 가지고 있더라도, 암호문을 통해 평문에 관한 추가 정보를 얻을 수 없는 안전성이다
- 암호문을 관찰해도 어떤 평문이 사용되었는지에 관한 불확실성이 줄어들지 않는다.
- 가능한 모든 키를 조사하더라도 암호문만으로 실제 평문을 확정할 수 없다.
- 안전성이 공격자의 계산 능력이나 해독에 필요한 시간에 의존하지 않는다
대표적인 예로 필요한 조건을 충족한 일회용 패드가 있다
1.5.2 계산적 안전성
계산적 안전성(Computational Security)
암호의 해독이 이론적으로 가능하더라도, 필요한 비용이나 시간이 너무 커서 현실적으로 해독하기 어려운 안전성이다
해독 비용이 정보의 가치를 초과하는 경우
- 암호를 해독하는 데 드는 비용이 암호화된 정보의 가치보다 크다
- 해독에 성공하더라도 얻는 이익보다 지출이 커서 경제적 실익이 없다
해독 시간이 정보의 유효기간을 초과하는 경우
- 암호를 해독하는 데 필요한 시간이 정보가 가치를 유지하는 기간보다 길다
- 해독이 성공한 시점에는 해당 정보가 더 이상 유용하지 않다
1.6 전수조사 공격
전수조사 공격(Brute-force Attack)
올바른 평문을 얻을 때까지 가능한 모든 키를 하나씩 시도하는 공격이다. 무차별 대입 공격이라고도 한
1.6.1 공격 방식
- 가능한 키 중 하나를 선택한다
- 해당 키로 암호문을 복호화한다
- 복호화 결과가 의미 있는 평문인지 확인한다
- 올바른 결과를 얻을 때까지 다른 키로 반복한다
이 방식으로 성공 여부를 판단하려면 평문의 언어, 형식이나 알려진 평문 등의 확인 단서가 필요하다
1.6.2 키의 개수와 평균 시도 횟수
키의 길이가 비트이고 모든 비트 조합을 키로 사용할 수 있다면, 가능한 키의 개수는 다음과 같다
올바른 키가 같은 확률로 선택되고 중복 없이 탐색한다면, 평균적으로 전체 키의 약 절반을 시도해야 한다
초당 개의 키를 시험할 수 있을 때 평균 해독 시간은 다음과 같다
같은 탐색 속도를 가정하면, 키 길이가 1비트 늘어날 때마다 가능한 키의 개수와 평균 탐색 시간은 두 배가 된다. 다만 키 공간이 크다는 사실만으로 암호의 안전성이 보장되는 것은 아니다. 전수조사보다 효율적인 분석 공격이 가능한지도 고려해야 한다
2. 고전 암호
고전 암호의 대표적인 기법에는 치환과 전치가 있다
2.1 치환 기법
2.1.1 이동 암호
이동 암호(Shift Cipher)
평문의 각 문자를 알파벳 순서에 따라 일정한 칸 수만큼 순환 이동시켜 치환하는 암호 방식이다. 시저 암호(Caesar Cipher)라고도 한다
암호화 규칙
- 각 문자를 알파벳 순서에서 오른쪽으로 칸 이동시킨다
- 이동 칸 수인 가 암호키이다
Z를 넘어가면 다시A부터 이어서 이동한다
평문 baby를 로 암호화하면 다음과 같다
| 평문 문자 | 이동 | 암호문 문자 |
|---|---|---|
| b | 오른쪽으로 4칸 | f |
| a | 오른쪽으로 4칸 | e |
| b | 오른쪽으로 4칸 | f |
| y | 오른쪽으로 4칸, 끝에서 순환 | c |
따라서 baby → fefc가 된다 |
복호화 규칙
- 암호문의 각 문자를 왼쪽으로 칸 이동시킨다.
A보다 앞쪽으로 이동하면Z부터 이어서 이동한다
알파벳을 A=0, B=1, …, Z=25로 나타내면 다음과 같다
| 구분 | 수식 |
|---|---|
| 암호화 | |
| 복호화 |
- k: 이동 칸 수인 키
- : 26으로 나눈 나머지를 구하는 연산으로, 알파벳의 순환 이동을 구현한다
이동 암호의 해독
이동 암호는 가능한 키의 수가 매우 적어 전수조사 공격으로 쉽게 해독할 수 있다
- 가능한 이동 칸 수를 하나씩 선택한다
- 각 키로 암호문을 복호화한다
- 결과가 의미 있는 문장인지 확인하다
- 올바른 평문과 키를 찾는다
2.1.2 단일 알파벳 암호
단일 알파벳 암호(Monoalphabetic Cipher)
하나의 고정된 치환표를 사용하여 평문의 각 문자를 암호문 문자로 일대일 대응시키는 암호 방식이다
- 알파벳을 재배열한 순열(Permutation)을 치환표로 사용한다
- 같은 키를 사용하는 동안 동일한 평문 문자는 항상 동일한 암호문 문자로 변환된다
- 치환표가 암호키에 해당한다
- 이동 암호는 단일 알파벳 암호의 특수한 경우이다
암호화와 복호화
평문의 각 문자를 치환표에 대응하는 암호문 문자로 바꾼다
| 평문 | a | b | c | d | e | f | g | h | i | j | k | l | m |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 암호문 | X | N | Y | A | H | P | O | G | Z | Q | W | B | T |
| 평문 | n | o | p | q | r | s | t | u | v | w | x | y | z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 암호문 | S | F | L | R | C | V | M | U | E | K | J | D | I |
이 표에서 b → N, a → X, y → D이므로 baby → NXND가 된다
복호화는 역순열을 적용한다. 즉, 치환표를 거꾸로 찾아 N → b, X → a, D → y로 복원한다
역순열(Inverse Permutation)
암호화에 사용한 대응 관계를 거꾸로 적용하여 암호문 문자를 원래의 평문 문자로 복원하는 것이다
키 공간
26개 알파벳을 일대일로 대응시키는 치환표의 개수는 다음과 같다
키 공간이 매우 커서 모든 치환표를 시도하는 단순 전수조사는 현실적으로 어렵다. 그러나 이것만으로 안전한 암호가 되는 것은 아니다
빈도 분석
빈도 분석(Frequency Analysis)
암호문에 나타나는 문자나 문자 조합의 출현 빈도를 평문 언어의 일반적인 빈도와 비교하여 치환 관계를 추정하는 공격이다
- 영어의 각 알파벳은 같은 빈도로 나타나지 않는다
- 단일 알파벳 암호는 문자 이름을 바꾸지만 각 문자의 출현 횟수와 반복 패턴은 유지한다
- 따라서 공격자는 문자 빈도, 문자 조합, 단어 패턴과 문맥을 함께 분석할 수 있다
문자의 상대 빈도는 다음과 같이 구한다
분석 예시는 다음과 같다
- 암호문에서 자주 등장하는 문자들을 영어에서 흔한 문자와 비교한다
- 자주 등장하는 두 문자 조합
ZW를th로 추정한다 - 세 문자 조합
ZWP를the로 추정하여P → e를 얻는다 ZWSZ가th_t가 되므로that으로 추정하여S → a를 얻는다- 다른 단어와 문맥을 이용해 나머지 치환 관계를 복원한다
빈도는 추정의 단서이며, 가장 많이 등장하는 문자가 반드시 e에 대응하는 것은 아니다
2.1.3 플레이페어 암호(Playfair Cipher)
평문의 언어 구조가 암호문에 남는 정도를 줄이는 방법에는 다음 두 가지가 있다
- 여러 문자를 묶어서 암호화
- 여러 치환 알파벳 사용
플레이페어 암호는 여러 문자를 묶어서 암호화하는 방식에 해당한다
플레이페어 암호(Playfair Cipher)
평문을 두 문자씩 묶고, 키로 구성한 문자표를 이용하여 암호화하는 치환 암호이다
두 문자 조합인 다이그램을 하나의 단위로 처리한다. 같은 평문 문자라도 함께 묶인 문자에 따라 다른 암호문 문자로 변환될 수 있다
키를 이용한 문자표 구성
- 키워드에서 중복되는 문자를 제거한다
- 키워드의 문자를 왼쪽에서 오른쪽으로, 위에서 아래로 채운다
- 남은 칸에는 키워드에 사용하지 않은 알파벳을 알파벳 순서대로 채운다
- 26개 알파벳을 25칸에 넣기 위해 I와 J는 하나의 문자로 취급한다
키워드 MONARCHY로 구성한 문자표는 다음과 같다
| 열 1 | 열 2 | 열 3 | 열 4 | 열 5 |
|---|---|---|---|---|
| M | O | N | A | R |
| C | H | Y | B | D |
| E | F | G | I/J | K |
| L | P | Q | S | T |
| U | V | W | X | Z |
평문을 두 문자씩 나누기
평문을 앞에서부터 두 문자씩 묶는다
- 같은 쌍에 동일한 문자가 들어가면 사이에 채움 문자(Filler)를 넣어 분리한다
- 마지막에 한 문자만 남으면 채움 문자를 붙인다
- 채움 문자로는 보통
X를 사용한다
예를 들어 다음과 같이 나눈다.
연속된 같은 문자를 모두 분리하는 것이 아니라, 같은 쌍에 들어가는 경우에 분리한다
암호화 규칙
| 두 문자의 위치 | 암호화 규칙 | 예시 |
|---|---|---|
| 같은 행 | 각 문자를 오른쪽 문자로 치환한다. 마지막에서는 같은 행의 처음으로 순환한다 | AR → RM |
| 같은 열 | 각 문자를 아래 문자로 치환한다. 마지막에서는 같은 열의 처음으로 순환한다 | MU → CM |
| 행과 열이 모두 다름 | 각 문자를 자신의 행과 상대 문자의 열이 만나는 문자로 치환한다 | HS → BP |
직사각형 규칙에서는 다음 순서로 출력한다
- 첫 번째 출력: 첫 번째 문자의 행 + 두 번째 문자의 열
- 두 번째 출력: 두 번째 문자의 행 + 첫 번째 문자의 열
복호화 규칙
복호화는 암호화 규칙을 반대로 적용한다
| 두 문자의 위치 | 복호화 규칙 |
|---|---|
| 같은 행 | 각각 왼쪽으로 한 칸 이동하며, 끝에서는 순환한다. |
| 같은 열 | 각각 위로 한 칸 이동하며, 끝에서는 순환한다. |
| 행과 열이 모두 다름 | 암호화와 동일하게 자신의 행과 상대 문자의 열을 이용한다. |
복호화 후에는 문맥에 따라 삽입된 채움 문자를 제거하고 I/J를 구분한다. 원래 평문에 있던 X까지 무조건 제거해서는 안 된다
안전성과 한계
- 개별 문자 대신 두 문자 조합을 처리하므로 단순한 단일 알파벳 암호보다 빈도 분석이 어렵다
- 하지만 평문 언어의 구조를 완전히 감추지는 못한다
- 충분한 암호문이 있으면 통계적 특징을 이용하여 분석할 수 있다
- 일반적으로 수백 자 정도의 암호문이 분석에 충분할 수 있다
2.1.4 힐 암호
힐 암호(Hill Cipher)
여러 평문 문자를 하나의 단위로 묶고, 행렬 연산을 이용하여 암호화하는 치환 암호이다
암호화 방식
- 연속된 개의 평문 문자를 개의 암호문 문자로 변환한다
- 각 문자를 숫자로 나타내고, 키 행렬과의 연산을 통해 암호화한다
- 각 암호문 문자는 묶음 안에 있는 여러 평문 문자의 영향을 받는다
예를 들어, 키 행렬을 사용하면 평문을 세 문자씩 묶어 처리한다. 이를 통해 개별 문자와 두 문자 조합의 빈도 정보를 감출 수 있다고 설명한다
안전성과 한계
| 공격 유형 | 특징 |
|---|---|
| 암호문 단독 공격 | 문자 빈도를 직접 이용하는 공격에 상대적으로 강하다 |
| 기지 평문 공격 | 충분한 평문·암호문 쌍을 확보하면 키 행렬을 구할 수 있어 취약하다 |
힐 암호는 선형적인 행렬 연산을 사용한다. 따라서 조건을 만족하는 충분한 평문·암호문 쌍을 확보하면 연립방정식을 구성하여 키를 구할 수 있다
2.1.5 비즈네르 암호
비즈네르 암호(Vigenere Cipher)
키워드의 각 문자에 따라 서로 다른 이동 암호를 적용하는 다중 알파벳 치환 암호이다
- 이동 칸 수가 0부터 25까지인 26개의 시저 암호를 이용한다
- 각 키 문자가 해당 위치에 적용할 이동 칸 수를 결정한다
- 평문의 위치에 따라 서로 다른 치환 규칙을 적용한다
키 문자와 이동 칸 수
| 키 문자 | A | B | C | D | … | Z |
|---|---|---|---|---|---|---|
| 이동 칸 수 | 0 | 1 | 2 | 3 | … | 25 |
예를 들어, 평문 b에 키 문자 d를 적용하면 3칸 이동하므로 E가 된다
키워드 반복
각 평문 문자에 대응하는 키 문자가 필요하므로 메시지 길이에 맞게 키워드를 반복한다
- 마지막 반복에서 남는 부분은 잘라낸다
- 키워드 자체가 메시지만큼 길어야 하는 것은 아니다
- 짧은 키워드를 반복하여 메시지 길이의 키 수열을 만든다
예시는 다음과 같다
- 키 수열:
deceptivedeceptivedeceptive - 평문:
wearediscoveredsaveyourself - 암호문:
ZICVTWQNGRZGVTWAVZHCQYGLMGJ
암호화와 복호화 수식
알파벳을 A=0, B=1, …, Z=25로 나타내면 다음과 같다
| 구분 | 수식 |
|---|---|
| 암호화 | |
| 복호화 |
- 번째 평문 문자의 숫자 값
- 번째 키 문자의 숫자 값
- 번째 암호문 문자의 숫자 값
암호화할 때는 키 값만큼 더하고, 복호화할 때는 키 값만큼 뺀다
안전성과 한계
- 같은 평문 문자라도 위치에 따라 다른 암호문 문자로 변환될 수 있다
- 문자 빈도가 여러 암호문 문자로 분산되어 단일 알파벳 암호처럼 직접 대응시키기 어렵다
- 그러나 키워드가 반복되므로 같은 치환 규칙이 일정한 주기로 다시 적용된다
- 따라서 평문의 통계적 구조를 완전히 감추지는 못한다
2.1.6 반복되는 키의 한계와 개선 방향
짧은 키를 반복하면 암호문에 주기적인 구조가 나타날 수 있다. 이를 개선하려면 다음을 고려해야 한다
- 평문만큼 긴 키를 사용하여 짧은 키워드의 반복을 없앤다
- 키는 평문과 통계적으로 독립적이어야 한다
- 키 자체에도 공격자가 이용할 수 있는 규칙성이 없어야 한다
다만 키가 길다는 사실만으로 안전성이 보장되는 것은 아니다. 키 생성 방식과 재사용 여부도 중요하다
2.1.7 버넘 암호
버넘 암호(Vernam Cipher)
평문의 각 비트와 키의 각 비트를 XOR하여 암호화하는 방식이다
- 알파벳 문자에 이동 규칙을 적용하는 대신 이진 데이터에 연산을 적용한다
- 평문 비트와 같은 위치의 키 비트를 하나씩 대응시켜 처리한다
- 암호화와 복호화에 모두 XOR 연산을 사용한다
암호화와 복호화
- : 평문의 번째 비트
- : 키의 번째 비트
- : 암호문의 번째 비트
- : XOR 연산
같은 값을 두 번 XOR하면 원래 값으로 돌아오므로, 암호화와 복호화에 동일한 키와 XOR 연산을 사용한다
반복 테이프 방식의 한계
키를 기록한 테이프를 고리 형태로 순환시킨다
- 테이브가 한 바퀴 돌면 같은 키 수열이 다시 사용된다
- 키가 반복되므로, 충분한 암호문을 확보하면 반복 구조를 분석할 수 있다
- 이미 알려진 평문이나 추정 가능한 평문을 이용하여 해독할 수도 있다
특정 위치의 평문과 암호문을 알고 있다면 해당 키 비트는 다음과 같이 계산된다
이 키 구간이 다른 위치에서도 반복되면, 알아낸 키로 다른 구간까지 복호화할 수 있다
2.1.8 일회용 패드
일회용 패드(One-Time Pad, OTP)
평문과 독립적으로 생성한 완전한 무작위 키를 평문 길이만큼 사용하고, 사용한 키를 다시 사용하지 않는 암호 방식이다. 키는 비밀로 유지해야 한다
이진 데이터에 대한 일회용 패드는 버넘 방식과 동일하게 XOR 연산을 사용한다. 그러나 XOR를 사용한다는 사실만으로 일회용 패드가 되는 것은 아니다
일회용 패드의 조건
| 조건 | 설명 |
|---|---|
| 완전한 무작위성 | 각 키 비트가 독립적으로 생성되고, 0과 1이 같은 확률로 선택되어야 한다. |
| 평문과의 독립성 | 키가 평문의 내용과 통계적으로 관련되어서는 안 된다. |
| 충분한 키 길이 | 암호화할 평문 길이만큼의 키가 필요하다. |
| 일회 사용 | 사용한 키나 키 구간을 다시 사용해서는 안 된다. |
| 키의 비밀성 | 키가 공격자에게 알려져서는 안 된다. |
이 조건을 만족하면 무조건적 안전성을 얻을 수 있다. 다만 평문만큼 긴 무작위 키를 안전하게 생성·배포·보관해야 하므로 실제 운용에는 부담이 크다
2.2 전치 기법
전치 기법은 평문의 요소 자체를 바꾸지 않고 위치나 순서를 재배열한다. 따라서 문자들의 출현 횟수는 유지된다
2.2.1 레일 펜스 암호
레일 펜스 암호(Rail Fence Cipher)
평문을 여러 행에 걸쳐 지그재그로 배치한 뒤, 행 단위로 읽어 암호문을 만드는 전치 암호이다
- 가장 단순한 전치 기법 중 하나이다
- 사용하는 행의 수를 깊이(Depth)라고 한다
암호화 과정
- 평문:
meet me after the toga party - 깊이: 2
공백을 제거하면 다음과 같다
meetmeafterthetogaparty
깊이가 2이므로 문자를 두 행에 번갈아 배치한다
| 행 | 배치되는 문자 |
|---|---|
| 첫 번째 행: 홀수 번째 문자 | m e m a t r h t g p r y |
| 두 번째 행: 짝수 번째 문자 | e t e f e t e o a a t |
첫 번째 행을 읽은 뒤 두 번째 행을 이어서 읽는다.
| 구분 | 결과 |
|---|---|
| 첫 번째 행 | mematrhtgpry |
| 두 번째 행 | etefeteoaat |
| 최종 암호문 | mematrhtgpryetefeteoaat |
복호화 과정
암호화에 사용한 깊이와 배치 규칙을 아용하여 원래 순서를 복원한다
- 암호문의 전체 길이를 확인한다
- 각 행에 들어갈 문자 수에 맞게 암호문을 나눈다
- 나눈 문자열을 각 행에 배치한다
- 암호화할 때의 지그재그 순서대로 문자를 읽는다
2.3 회전자 암호기(Rotor Machine)
회전자 암호기
회전하는 여러 원통의 전기적 연결을 이용하여 문자를 치환하고, 회전자 위치를 바꾸어 치환 규칙을 변화시키는 암호 장치이다
대표적인 장치로 제2차 세계대전 당시 독일이 사용한 에니그마가 있다
2.3.1 기본 구조
- 독립적으로 회전할 수 있는 여러 원통형 회전자로 구성된다
- 각 회전자에는 26개의 입력 접점과 26개의 출력 접점이 있다
- 각 접점을 알파벳 A-Z에 대응시킨다
- 내부 배선이 입력 접점과 출력 접점을 연결한다
- 한 회전자의 출력은 다음 회전자의 입력으로 연결된다
| 구성 요소 | 역할 |
|---|---|
| 입력 접점 | 입력된 문자에 해당하는 전기 신호를 받음 |
| 내부 배선 | 입력 신호를 정해진 출력 접점으로 연결 |
| 출력 접점 | 치환된 문자에 해당하는 신호를 전달 |
| 회전 장치 | 접점과 배선의 상대적 위치를 바꾸어 치환 규칙을 변경 |
| 입력 신호가 여러 회전자를 차례로 통과하면서 치환된다. 전체 치환 규칙은 각 회전자의 배선과 현재 회전 위치를 조합한 결과이다 |
2.3.2 회전자 위치와 치환 규칙
고정된 회전자: 회전자의 위치가 고정되어 있으면, 각 입력 문자는 정해진 출력 문자에 대응한다
- 하나의 고정된 회전자는 단일 알파벳 치환표를 정의한다
- 같은 위치에서 같은 문자를 입력하면 같은 출력이 나온다
회전자가 움직이는 경우: 키를 누를 때 회전자가 한 칸씩 회전한다
- 회전에 따라 외부 접점과 내부 배선의 상대적 위치가 달라진다
- 그 결과 새로운 단일 알파벳 치환표가 적용된다
- 내부 배선 자체를 새로 연결하는 것은 아니다
여러 치환표가 순서대로 적용되므로, 전체적으로 다중 알파벳 치환 암호가 된다
2.3.3 여러 회전자의 동작과 주기
회전자에는 26개 위치가 있으므로, 매번 한 칸씩 이동하면 26번 입력한 뒤 처음 위치로 돌아온다
- 26개 위치에 따른 치환 규칙을 차례로 사용한다
- 이후에는 같은 위치 변화가 반복된다
- 주기를 늘리기 위해 여러 회전자를 연결한다
| 회전자 | 회전 조건 |
|---|---|
| 빠른 회전자(Fast Rotor) | 문자를 입력할 때마다 한 칸 회전 |
| 중간 회전자(Medium Rotor) | 빠른 회전자가 한 바퀴 돌 때마다 한 칸 회전 |
| 느린 회전자(Slow Rotor) | 중간 회전자가 한 바퀴 돌 때마다 한 칸 회전 |
따라서 다음과 같이 동작한다
- 1회 입력마다 빠른 회전자가 한 칸 이동한다
- 26회 입력마다 중간 회전자가 한 칸 이동한다
- 회 입력마다 느린 회전자가 한 칸 이동한다
| 회전자 수 | 위치 조합 수와 전체 위치의 반복 주기 |
|---|---|
| 1개 | |
| 2개 | |
| 3개 |
이 모델에서는 회전자 3개가 17,576회 입력 후 처음 위치로 돌아온다
2.3.4 같은 문자를 입력해도 결과가 달라지는 이유
문자를 입력하면 빠른 회전자의 위치가 바뀌고, 이에 따라 전체 신호 경로도 달라진다
따라서 같은 문자를 연속으로 입력하더라도 서로 다른 암호문 문자가 나올 수 있다. 회전자 암호기는 치환 규칙의 변경을 기계적으로 자동화한다
3. 스테가노그래피(Steganography)
스테가노그래피
일반적인 문서, 이미지 등의 매체 안에 비밀 메시지를 숨겨 메시지의 존재 자체를 알아차리기 어렵게 만드는 기법이다
3.1 암호화와의 차이
| 구분 | 암호화(Encryption) | 스테가노그래피(Steganography) |
|---|---|---|
| 목적 | 메시지의 내용을 이해하지 못하게 한다. | 메시지의 존재 자체를 숨긴다 |
| 방법 | 평문을 알아볼 수 없는 암호문으로 변환한다. | 일반적인 매체 안에 비밀 메시지를 삽입한다 |
| 외부에서 보이는 모습 | 암호문이 존재한다는 사실은 드러날 수 있다. | 평범한 문서나 이미지처럼 보인다 |
암호화는 내용의 기밀성을 보호하고, 스테가노그래피는 비밀 메시지를 주고받는다는 사실을 감추는 데 초점을 둔다
3.2 문장을 이용한 간단한 방법
평범한 글 안에 정해진 규칙에 따라 메시지를 숨길 수 있다
- 각 단어의 첫 글자를 순서대로 모으면 비밀 메시지가 되도록 작성한다
- 전체 글에서 특정 단어들만 선택하여 읽으면 비밀 메시지가 되도록 작성한다
예를 들어, 다음 문장의 각 단어에서 첫 글자만 선택하면 다음과 같다
| 겉으로 보이는 문장 | 추출 규칙 | 숨겨진 메시지 |
|---|---|---|
| Hope Everyone Likes Pizza | 각 단어의 첫 글자 | HELP |
| 수신자는 미리 알고 있는 규칙을 이용해 숨겨진 메시지를 추출한다 |
3.3 전통적인 스테가노그래피 기법
| 기법 | 방법 | 확인 방식 |
|---|---|---|
| 문자 표시(Character Marking) | 인쇄하거나 타이핑한 글에서 선택한 문자 위에 연필로 희미하게 표시 | 빛을 비추어 표시된 문자를 확인 |
| 보이지 않는 잉크(Invisible Ink) | 평소에는 보이지 않는 잉크로 메시지를 작성 | 잉크에 맞는 열, 빛, 약품 등의 조건으로 확인 |
| 핀 구멍(Pin Punctures) | 선택한 문자에 작은 핀 구멍을 냄 | 빛에 비추어 구멍의 위치를 확인 |
| 타자기 수정 리본(Typewriter Correction Ribbon) | 검은 리본으로 작성한 글의 줄 사이에 수정 리본으로 메시지를 타이핑 | 강한 빛 아래에서 숨겨진 글자를 확인 |
이 기법들은 겉으로는 평범한 문서처럼 보이지만, 특정 방식으로 관찰하면 메시지를 읽을 수 있도록 한다
3.4 현대적인 기법: LSB를 이용한 정보 은닉
최하위 비트(Least Significant Bit, LSB)
이진수에서 가장 낮은 자릿값을 갖는 비트이다. 이 비트를 반전시키면 숫자 값이 1만큼 증가하거나 감소한다
이미지의 색상 정보에서 LSB를 변경하면 눈에 띄는 변화는 작게 유지하면서 비밀 정보를 삽입할 수 있다
3.4.1 이미지에 정보를 숨기는 원리
24비트 RGB 이미지를 예시로 사용한다
- 각 픽셀은 빨강(R), 초록(G), 파랑(B)의 색상 정보로 구성된다
- 각 색상 채널에 8비트씩 사용하므로 픽셀 하나는 총 24비트이다
- 각 색상 채널의 LSB를 메시지 비트로 바꾸면 픽셀당 3비트를 숨길 수 있다
| 구성 | 비트 수 | 숨길 수 있는 정보 |
|---|---|---|
| 빨강(R) | 8비트 | LSB 1비트 |
| 초록(G) | 8비트 | LSB 1비트 |
| 파랑(B) | 8비트 | LSB 1비트 |
| 픽셀 전체 | 24비트 | 3비트 |
3.4.2 LSB 변경 예시
한 색상 채널의 값이 다음과 같다고 가정한다
원래 값: 11001010 = 202
변경 값: 11001011 = 203
- 마지막 비트를
0에서1로 바꾸어 메시지 비트 1을 삽입한다 - 색상 값은 202에서 203으로 1만큼만 변한다
- 따라서 이미지의 외관에 미치는 영향이 작다
수신자는 약속된 위치의 LSB를 순서대로 읽어 메시지를 복원한다
3.4.3 숨길 수 있는 정보량
해상도가 인 이미지에서 각 RGB 채널의 LSB를 하나씩 사용하면 다음과 같은 양을 숨길 수 있다
이를 바이트로 변환하면 다음과 같다
즉, 약 2.36MB의 정보를 숨길 수 있다. 이는 모든 픽셀의 RGB 채널에서 각각 1비트를 사용하고, 별도의 관리 정보는 제외한 계산이다
3.5 스테가노그래피의 장점과 한계
3.5.1 장점
비밀 통신의 존재를 숨김
- 메시지의 내용뿐 아니라 비밀 메시지를 주고받는다는 사실 자체를 감출 수 있다
- 외부 관찰자에게는 평범한 문서나 이미지의 전달처럼 보일 수 있다
- 따라서 통신 당사자가 비밀 통신을 한다는 사실이 드러날 가능성을 줄인다
3.5.2 한계
큰 부가 용량
상대적으로 적은 정보를 숨기기 위해 큰 크기의 매체가 필요할 수 있다
- 비밀 메시지 외에 문서, 이미지 등 숨김용 매체를 함께 저장하거나 전송해야 한다
- 이 때문에 숨기는 정보량에 비해 부가적인 저장, 전송 부담인 오버헤드가 크다
은닉 방식이 밝혀지는 경우
- 숨겨진 위치와 추출 방법이 밝혀지면 메시지가 드러날 수 있다
- 메시지 자체를 암호화하지 않았다면, 추출된 내용을 그대로 읽을 수 있다
- 따라서 단순히 굼겨 두었다는 사실만으로 내용의 기밀성까지 보장할 수는 없다
3.5.3 보안 방법
암호화 후 은닉: 메시지를 먼저 암호화한 다음 스테가노그래피로 숨기는 방법이다
- 원본 메시지를 암호화한다
- 생성된 암호문을 문서나 이미지 등에 숨긴다
- 수신자는 숨겨진 암호문을 추출한다
- 키를 사용하여 암호문을 복호화한다