🤔 기본 정의
- 평문(Plaintext): 원본 메시지
- 암호화(Encryption/Enciphering): 평문을 암호문으로 변환하는 과정
- 암호 시스템/암호(Cryptographic System/Cipher): 암호화에 사용되는 체계나 알고리즘
- 키(Key):
- 암호에 사용되는 정보로, 송신자와 수신자만 알고 있음
- 공격을 했을 경우에 얻고 싶어하는 정보
- 암호문(Ciphertext): 암호화된 메시지
- 복호화(Decryption/Deciphering): 암호문을 평문으로 복원하는 과정
- 암호 분석(Cryptanalysis): 암호화 세부 정보 없이 메시지를 해독하는 기술
🔒 대칭 암호화(Symmetric Encryption)
- 기존/비공개 키/단일 키 암호화라고도 불림
- 송신자와 수신자가 공통 키를 공유함
- 모든 고전적 암호화 알고리즘은 비공개 키 방식임
- 대칭 암호화 요구사항:
- 강력한 암호화 알고리즘
- 송신자/수신자만 아는 비밀 키
수학적 표현:
-
암호화: Y=EK(X) 또는 Y=E(K,X)
-
복호화: X=DK(Y) 또는 X=D(K,Y)
🤔 안전하게 공통 키를 공유하는 방법?
-
secure channel을 통해서 key를 공유함
-
secure channel에 대한 key를 어떻게 공유할까?
→ asymmetric encryption 방식을 통해 공유함
🧑🔧 암호 시스템 분류
암호 시스템은 세 가지 독립적인 차원으로 특징지을 수 있습니다:
- 연산 유형:
- 치환(Substitution): 혼돈(Confusion) - 평문 요소를 다른 요소로 대체
- 전치(Transposition): 확산(Diffusion) - 평문 요소의 순서를 재배열
- 사용되는 키의 수:
- 대칭(Symmetric): 단일 키 사용
- 비대칭(Asymmetric): 두 개의 키 사용
- 평문 처리 방식:
- 블록 암호(Block Cipher): 평문을 블록 단위로 처리
- 스트림 암호(Stream Cipher): 평문을 연속적으로 처리
🔫 공격 유형
- 암호 분석(Cryptanalysis):
- 알고리즘의 특성과 평문의 특징에 의존하는 공격
- 알고리즘의 특성을 이용하여 특정 평문이나 키를 추론하는 시도
- 무차별 대입 공격(Brute-Force Attack):
- 가능한 모든 키를 시도하여 의미 있는 평문을 얻을 때까지 진행
- 평균적으로 가능한 키의 절반을 시도해야 성공 가능함
- 가장 비효율적인 공격 방식
🧐 암호 분석 유형
암호 분석가가 알고 있는 정보에 따라 다음과 같이 분류됩니다:
- 암호문 단독(Ciphertext Only): 암호화 알고리즘과 암호문만 알고 있음
- 알려진 평문(Known Plaintext): 암호화 알고리즘, 암호문, 비밀 키로 생성된 하나 이상의 평문-암호문 쌍을 알고 있음
- 선택 평문(Chosen Plaintext): 암호 분석가가 선택한 평문 메시지와 비밀 키로 생성된 해당 암호문을 알고 있음
- 선택 암호문(Chosen Ciphertext): 암호 분석가가 선택한 암호문과 비밀 키로 복호화된 해당 평문을 알고 있음
- 선택 텍스트(Chosen Text): 암호 분석가가 평문과 암호문 모두 선택 가능
| Type of Attack | Known to Cryptanalyst |
|---|
| Ciphertext Only | - Encryption algorithm - Ciphertext |
| Known Plaintext | - Encryption algorithm - Ciphertext - One or more plaintext-ciphertext pairs formed with the secret key |
| Chosen Plaintext | - Encryption algorithm - Ciphertext - Plaintext message chosen by cryptanalyst, together with its corresponding ciphertext generated with the secret key |
| Chosen Ciphertext | - Encryption algorithm - Ciphertext - Ciphertext chosen by cryptanalyst, together with its corresponding decrypted plaintext generated with the secret key |
| Chosen Text | - Encryption algorithm - Ciphertext - Plaintext message chosen by cryptanalyst, together with its corresponding ciphertext generated with the secret key - Ciphertext chosen by cryptanalyst, together with its corresponding decrypted plaintext generated with the secret key |
🔐 암호화 체계 보안
- 무조건적 보안(Unconditionally Secure):
- 공격자가 아무리 많은 시간을 가져도 필요한 정보가 없어 암호문을 복호화할 수 없음
- 이론적으로 존재하긴 하지만 현실에서 사용하기엔 어려움
- 계산적 보안(Computationally Secure):
- 암호를 깨는 비용이 암호화된 정보의 가치를 초과함
- 암호를 깨는 데 필요한 시간이 정보의 유용한 수명을 초과함
💪 강력한 암호화(Strong Encryption)
강력한 암호화란 권한이 없는 사람이나 시스템이 암호화된 평문에 접근하기 어렵게 만드는 암호화 체계를 의미합니다. 다음과 같은 특성이 필요합니다:
🪨 고전적 치환 암호(Classical Substitution Ciphers)
1. 카이사르 암호(Caesar Cipher)
- 가장 단순하고 오래된 치환 암호
- 알파벳의 각 글자를 일정한 수(전통적으로 3)만큼 이동시킴
- e.g.) X → A, Y → B, A → D, …
- 수학적 표현:
- 암호화: C=E(k,P)=(P+k)mod26 C=E(k,P)=(P+k)mod 26
- 복호화: P=D(k,C)=(C−k)mod26 P=D(k,C)=(C−k)mod 26
- 예시: "meet me after the toga party" → "PHHW PH DIWHU WKH WRJD SDUWB"
- 가능한 키가 25개뿐이므로 무차별 대입 공격에 취약함
2. 단일 알파벳 암호(Monoalphabetic Cipher)
- 각 평문 글자가 다른 무작위 암호문 글자로 매핑됨 e.g.
- Plain: abcdefghijklmnopqrstuvwxyz
- Cipher: DKVQFIBJWPESCXHTMYAUOLRGZN
- Plaintext: ifwewishtoreplaceletters
- Ciphertext: WIRFRWAJUHYFTSDVFSFUUFYA
- 키는 26글자 길이(알파벳 순열)
- 26! > 4 × 10²⁶개의 가능한 키
- 많은 키 공간에도 불구하고 언어의 특성(글자 빈도)으로 인해 취약함
언어 중복성(Language Redundancy):
- 인간 언어는 중복성이 있음
- 글자들이 동일한 빈도로 사용되지 않음(영어에서 'e'가 가장 흔함)
- 'z', 'j', 'x'와 같은 글자는 드물게 사용됨
- 이중 글자(digram) 중 "th"가 가장 흔하고, 삼중 글자(trigram) 중 "the"가 가장 흔함
- 이러한 특성을 이용한 빈도 분석으로 암호 해독 가능
- 예시
- UZQSOVUOHXMOPVGPOZPEVSGZWSZOPFPESXUDBMETSXAIZ
VUEPHZHMDZSHZOWSFPAPPDTSVPQUZWYMXUZUHSX
EPYEPOPDZSZUFPOMBZWPFUPZHMDJUDTMOHMQ
- 위의 문장의 경우 P와 Z가 제일 많이 사용되므로 p → e, z → t 로 변경해보면 좀 더 쉽게 원래 문장을 유추하기 쉬움
3. 플레이페어 암호(Playfair Cipher)
4. 다중 알파벳 암호(Polyalphabetic Cipher)
- 평문 메시지를 진행하면서 다른 단일 알파벳 대체를 사용
- 연관된 단일 알파벳 대체 규칙 세트를 사용
- 키가 특정 변환에 사용될 규칙 결정
비제네르 암호(Vigenère Cipher):
- 가장 잘 알려진 다중 알파벳 대체 암호
- 키는 여러 글자 길이(K = k₁k₂...kₓ)
- i번째 글자는 i번째 알파벳 지정
- 각 알파벳을 차례로 사용하고, d글자 후 처음부터 반복
- 예시(키워드 "deceptive"):
- 키: deceptivedeceptivedeceptive
- 평문: wearediscoveredsaveyourself
- 암호문: ZICVTWQNGRZGVTWAVZHCQYGLMGJ
비제네르 자동키 시스템(Vigenère Autokey System):
- 키워드를 평문 자체와 연결하여 실행 키 제공
- 예시(키워드 "deceptive"):
- 키: deceptivewearediscoveredsav
- 평문: wearediscoveredsaveyourself
- 암호문: ZICVTWQNGKZEIIGASXSTSLVVWLA
일회용 패드(One-Time Pad, OTP):
- 메시지만큼 긴 무작위 키를 사용하여 키를 반복할 필요가 없음
- 키는 단일 메시지 암호화/복호화에 사용된 후 폐기됨
- 새 메시지마다 새 메시지 길이의 새 키 필요
- 평문과 통계적 관계가 없는 무작위 출력 생성
- 이론적으로는 해독 불가능하나, 대량의 무작위 키 생성과 키 배포 문제라는 실질적인 한계 존재
- 전달해야 하는 데이터의 양이 적거나 안정성이 강할 필요가 있을 경우에는 유리함
🪨 고전적 전치 암호(Classical Transposition Ciphers)
1. 레일 펜스 암호(Rail Fence Cipher)
2. 행 전치 암호(Row Transposition Cipher)
결론
고전적 암호화 기법은 현대 암호학의 기초를 형성합니다. 이러한 기법들은 단순한 치환에서 복잡한 다중 알파벳 시스템까지 발전해왔으며, 각각의 기법은 고유한 강점과 약점을 가지고 있습니다. 이러한 고전적 기법을 이해하는 것은 현대 암호화 방법의 발전과 그 기본 원리를 이해하는 데 도움이 됩니다.