🔐 암호 기초
- Kerckhoffs의 원칙
- 공격자가 시스템(암/복호화 방법)을 다 알고 있음.
- 오직 key만 안전하게 보관하면 됨. = 암호 안전성과 연결
- 즉, 암호 알고리즘은 비밀이 아님.
- 현대는 컴퓨터 사양이 좋아져 키 공간이 매우 커짐
- Shannon Theory
- 강력한 암호: 혼돈(Confusion) + 확산(Diffusion)
- 블록 암호 SPN 구조의 기반
| 의미 | 예시 | 주요 연산 | 주요 연산 예시 |
|---|
| 혼돈(Confusion) | 평문-암호문의 상관관계를 숨김 | 단순 치환 암호와 일회성 암호 (평문 1비트 변화가 암호문에 미치는 영향 예측 어려움) | 대치(Substitution) : 위치는 그대로 값이 바뀜 | 선형성 : 덧셈, 곱셈 선형성X : affine(곱셈+덧셈), 역, … |
| 확산(Diffusion) | 평문의 통계를 암호문 전반에 확산시켜서 숨김 | 이중 전위 암호 (평문 각 비트의 변화는 다수의 암호문 bits에 영향을 미침) | 치환(Transposition/permutation) : 값의 위치가 바뀜 | shift(이동하는 값을 버림), rotation, bit 섞기, 행렬 곱, … |
⛺ 고전 암호
단순 치환 암호
: 2000년 이상 된 가장 오래된 암호체계
고전 암호들
- “시저 (Caesar) 암호” : 세 칸씩 이동하는 것처럼 단순하게 암호화하고 복호화하는 방법
- 암호화된 문장을 복호화하려면 암호문에 있는 문자와 평문에 있는 문자를 비교해서 치환하거나, 암호화된 문자 각각을 알파벳 순서상 세 번째 뒤에 위치한 문자로 치환
- 생각보다 오랫동안 사용됨(완죤완죤 비밀해야하는 거 아니면)
- 문제 : key 모르면 복호화 못함.
- 이 시스템이 공개된다면 암호화의 의미가 없어짐 → 옛날에는 이러한 시스템 자체가 비밀~><
- 얘를 그냥 알파벳 순이아니라 임의의 순열로 하면 -> 키 공간 26! ~= 2^88
- 옴총옴총 많아짐

시저 암호의 공격
- 공격법 1 : 전수 조사 (Brute force attack)
: 알파벳 = 26개, key 값은 26개 = 26개 경우 다 해보기~
- 1~26 까지 key가 가지는 범위 : 키 공간
- 공격 가능한 시간 내에 빠르게 해야함
- 공격법 2: 영문자 빈도 분석
- 알파벳의 사용 빈도는 일정하지 않음. E(13%), T(9%), A(8%), …
- 두 글자씩 붙은거 th → 찾아서 이것저것 해봄
- = 전수조사 안해봐도 예측 가능
이중 전위 암호
: 현대 암호에서 사용되는 중요한 개념
- 평문을 주어진 크기의 행렬 형태로 배열하고 행과 열을 기술된 순서에 따라 바꾼다
- 여기서 키는 행렬의 크기와 열/행의 순열
- 문자 자체를 숨기진 않지만 평문 속에 포함된 통계적 정보에 의존하는 공격 방어 가능

일회성 암호 (One-time Pad)
: 키를 한번만 사용하기에 실제 암호체계에서 유일하게 이론적으로 안전하다고 여겨지는 것
- 암호화 및 복호화(평문(𝑥𝑖), 암호문(𝑦𝑖), 키(𝑘𝑖) ∈ 0, 1 )
- 암호화: E𝑘𝑖(𝑥𝑖)= 𝑥𝑖⨁𝑘𝑖
- 복호화: D𝑘𝑖(𝑦𝑖) = 𝑦𝑖⨁𝑘i
- 보통 : key전달이 힘들기 때문에 한번 안전하게 전달하면 이 key값을 중복사용함 (주기적으로 바꾸긴함)
- 장점
- 같은 문자라도 key에 따라 달라짐 -> key 모르면 절대 불가
- 무조건적으로 안전: 무한대의 계산 자원이 있어도 해독 불가능
- 단점
- key의 길이가 평문 길이와 같음 = key의 길이가 일정하지 않음 → 좋지않음
- 키 줫나 길면서 한번 쓰고 버려짐 → 별로 좋지 않음
코드북 암호
: 고전 암호로, 수많은 현대 암호들은 거대한 전자 코드북
- 말 그대로, "코드워드"로 가득 찬 책
- 암호화를 하려면 코드북에서 해당 암호를 찾아 코드 단어를 입력하고 복호화를 하려면 역코드북으로 간단하게 암호를 풀 수 있음
- 코드북 암호가 사용된 ex) 코드북을 통해 암호화된 짐머맨 텔레그램
- 아래처럼 코드와 text가 대치된 것, 사전과 같음
Februar - 13605
fest - 13732
finanzielle - 13850
folgender - 13918
Frieden - 17142
Friedenschluss - 17149
:
- 현대의 블록 암호는 코드북처럼 보임
🌃 암호 알고리즘(현대~)
간단히 보쟈 나중에 자세히 볼거임 ㅋㅋ
현대 암호의 역사
- 클로드 새넌
- 컴퓨터 개발
- DES : 현대 암호의 처음 (표준)
- 공개키 암호학 (RSA)
- 암호학 연구 진행
- AES(DES 개선
- 양자 컴퓨터
🌠 암호학 분류
1세대 : password
2세대 : 대칭키(symmetric-/private-/single-/secret-key) 암호
- 암호화 키 = 암호 해독 키
- 기밀성 문제 : key의 전달
- 스트림 암호, 블록 암호의 두 가지 유형
- 종류 : DES, AES 등 ~
3세대 : 비대칭키(asymmetric-/public-key) 암호
- 암호화 키 != 암호 해독 키
- 사용자는 두 개의 키를 가짐(암호화용(공개키) 및 암호 해독용(비밀키))
- 개인키는 서명용(디지털 서명)으로도 사용 가능
- 기밀성 문제 : 공개키의 전달
- 무결성 문제 : 공개키의 중간자 공격(A와 C가 소통하는데 중간에 공격자 B가 껴들어도 알아채지 못함 A<-> {C} <->B)
- 종류 : RSA, ECC
해쉬 알고리즘
메시지 인증 코드(Message Authentication Code, MAC)
- 메시지를 압축하는 과정(해싱)에서 key를 섞음 : MAC
- ㄴ= 해싱 받은 MAC이랑 수신자가 생성한 MAC이랑 달라졌으면 무결성의 문제가 생김
- 똑같이 키 전달 문제 → 공개키(비대칭키)를 사용하여 Key 전달 → 이후부터 메시지 전달할 때 마다 공용키(대칭키)를 사용하여 MAC 생성하여 무결성 보장
- 부인문제를 방지 못함
- 사용자 A가 보내고 MAC 사실 내가안보냄!! 하면 답없음
- MAC을 만드는 사람 2명이여서(제3자는 MAC못만듬) 그냥 A : "내가안함 B 너가해짜나" 우기기 가능, 수신측에서 송신측 위조, 송신측에서 수신측 위조 가능 → 부인 방지 못함
- ⇒ 디지털 서명 필요함
- 대칭키와 같은 성능 메세지 무결성만을 위해
전자서명
- 메시지 → 해싱 (키정보 없이 그냥 압축) → 동일한 길이의 짧은 값 digest 생성 → 자신의 개인키를 이용해서 암호화(RSA) 해서 전송 , 수신측은 송신자의 공개키를 활용하여 디지털 서명 검증
- 중간자 (무결성) 문제 : 수신자의 공개키로 검증할때 발생, 송신자가 수신자의의 공개키를 가져야하는데 중간자 공격들어오면 문제생김
- = 비밀키를 섞는 해싱
- 연상량 많음 → 부인방지, 신원파악을 위해서는 전자서명 사용
공인인증서를 이용한 공개키 전달
- 송신자는 공인인증기관에 공개키를 전달하고, 인증기관으로부터 인증서를 수신자로 전달하는 과정.
- 수신자는 인증기관의 공개키로 인증서를 검증하고, 인증서 내의송신자 공개키로 서명을 검증함