
개념: 데이터를 비트(Bit) 단위로 하나씩 암호화하는 방식입니다.
원리: 평문(xi)과 키 스트림(si)을 XOR(Modular 2 addition) 연산하여 암호문(yi)을 생성합니다.
수식:
특징:

- XOR 연산의 3가지 마법 같은 성질
스트림 암호의 핵심인 XOR(Exclusive OR)은 다음 성질을 가집니다.
성질 1: 자기 자신과 XOR하면 0이 된다. ()
성질 2: 어떤 수에 0을 XOR하면 변하지 않는다. ()
성질 3: 순서를 바꿔도 결과가 같다. ()
[과정 1: 암호화 (Alice)]
- 평문(Message): M
- 키(Key): K
- 암호문(Ciphertext) C = M ⊕ K
[과정 2: 복호화 (Bob)]
- 암호문 C를 받은 Bob은 다시 똑같은 키 K를 XOR합니다.
- 복호화 식: C ⊕ K
- 식 전개: (M ⊕ K) ⊕ K <-- C 자리에 (M ⊕ K)를 대입
- 결합 법칙: M ⊕ (K ⊕ K)
- 성질 1 적용: M ⊕ 0 <-- 같은 키 K끼리 만나서 0이 됨
- 성질 2 적용: M <-- 원래 메시지 복구!
왜 더하기/빼기가 아니고 XOR인가?(Modular 2)
교수님이 수업 시간에 Modular 2 (2로 나눈 나머지) 이야기를 하셨을 거예요. 이진수(0과 1) 세계에서는 더하기와 빼기가 사실상 똑같습니다.
더하기:
빼기:
즉, 에 을 더하나 빼나 결과는 똑같이 이 됩니다. 이 "더해도 0, 빼도 0"이 되는 논리가 바로 XOR 연산이며, 이 덕분에 "암호화할 때 키를 한 번 섞고(XOR), 복호화할 때 똑같은키를 한 번 더 섞으면(XOR) 원래대로 돌아오는" 구조가 만들어지는 것입니다.
[스트림 암호의 암/복호화가 동일한 이유]
1. XOR 연산의 가역성(Invertibility):
- 특정 값에 똑같은 값을 두 번 XOR하면 원래 자기 자신으로 돌아옵니다.
- 공식: (Data ⊕ Key) ⊕ Key = Data
2. 이진 연산(Modular 2)의 특성:
- 0과 1만 사용하는 체계에서는 '더하기'와 '빼기' 연산 결과가 동일합니다.
- 따라서 암호화 시 적용한 연산을 복호화 시 한 번 더 반복하는 것만으로
원래 데이터를 추출할 수 있습니다.
3. 하드웨어적 이점:
- 암호화 칩과 복호화 칩을 따로 만들 필요가 없습니다.
- 동일한 XOR 게이트 회로를 공유하므로 설계가 매우 경제적입니다.
TRNG (True Random Number Generator)
PRNG (Pseudo Random Number Generator)
CSPRNG (Cryptographically Secure Pseudo Random Number Generator)
이름 그대로 "딱 한 번만 사용하는 메모장(Pad)"이라는 뜻입니다. 암호화하려는 메시지(평문)와 완벽하게 동일한 길이의 무작위 키를 생성하여 딱 한 번만 쓰고 버리는 방식입니다.
작동 원리
키 생성: 메시지가 100글자라면, 키도 100글자의 완전한 난수(TRNG)로 만듭니다.
암호화: 평문 키 = 암호문.
복호화: 암호문 키 = 평문.
파기: 사용한 키는 즉시 세상에서 삭제합니다.
암호학에서는 이를 Unconditional Security(무조건적 안전성)라고 부릅니다. 공격자가 무한한 컴퓨팅 파워를 가져도 못 푼다는 뜻인데, 이유는 다음과 같습니다.
완전 무작위성: 키 자체가 물리적 현상(TRNG)으로 만든 완전한 난수라 수학적 패턴이 아예 없습니다.
모든 가능성 존재: 암호문 LJQZ를 해독하려고 할 때, 키가 무엇이냐에 따라 평문은 LOVE가 될 수도, HATE가 될 수도, KILL이 될 수도 있습니다. 즉, 공격자가 모든 키를 다 대입해 봐도 어떤 게 진짜 메시지인지 구별할 방법이 물리적으로 존재하지 않습니다.
교수님이 스크립트에서 "Not practical"이라고 강조하신 부분입니다.
LCG(Linear Congruential Generator)**는 아주 오래된 난수 생성 방식입니다. 수학 공식 하나로 "난수처럼 보이는 숫자"들을 계속 만들어내는 공장이라고 생각하면 쉬워요.
왜 LCG는 암호학에서 "나쁜" 방식인가?
교수님이 수업에서 "LCG는 안전하지 않다"고 강조하신 이유입니다. 보안 시스템은 공격자가 다음에 뭐가 나올지 절대 몰라야 하는데, LCG는 수학적으로 너무 단순해서 금방 들통나기 때문입니다.
공격 방법 (기지 평문 공격, Known Plaintext Attack):
