본문 바로가기
  • 適者生存
WorkOut/Dreamhack

Cryptography | 현대 암호 (대칭키 & 비대칭키 암호, 기밀성/무결성/인증/부인방지)

by lcrvvxln 2024. 7. 15.

 

⚠️ 고전 암호의 문제점
송신자와 수신자 간 키 공유 문제
▶ 카이사르(알파벳을 미는 칸의 수), 비제네르(키워드) ...

대칭키 암호 시스템(Symmetric key cryptosystem)
- 송신자와 수신자가 같은 키를 공유하는 암호 시스템
- 사전 키 공유 과정 필요

▶ 네트워크 도청 문제로 키 공유 알고리즘(Key exchange algorithm) 연구
→ 1970년 중반 Diffie-Hellman 키 교환 알고리즘 등장

공개키 암호 시스템(Public key cryptosystem) 등장
- 송신자와 수신자가 서로 다른 키 사용하는 암호 시스템
- 대칭키와 대비하여 비대칭키 암호 시스템(Asymmetric cryptography) 으로도 불림

 

대칭키와 비대칭키 암호화

 

현대 암호

 

🔎 케르크호프스의 원리 (Kerchhoffs' principle)
 키를 제외한 시스템의 다른 모든 내용이 알려지더라도 암호체계는 안전해야 한다
▶ 알고리즘이 노출되더라도 키가 공개되지 않으면 안전하다는 의미

 

 

✅  안전한 암호 시스템의 성질

  • 혼돈(Confusion) : 암호문에서 평문의 특성을 알아내기 힘든 성질

예시)

단일 치환 암호 사용 시, 동일 평문 2번 암호화하면 출력 암호문 2개 동일

암호문으로 평문이 무엇인지 유추하지 못해도 2개의 평문이 동일하다는 사실 알 수 있음

∴ 혼돈 성질 불만족

동일한 암호문

 

  • 확산(Diffusion) : 평문작은 변화가 암호문큰 변화로 이어지는 성질

예시)

카이사르 암호 사용하여 평문 한 글자 변경 시, 암호문 해당 위치 한 글자만 변화

∴ 확산 성질 불만족

 

확산 성질 만족 예시

 

 

📌 대칭키 암호 시스템

암호화와 복호화에 동일 키 사용하는 암호 시스템

블록 암호 & 스트림 암호로 구분

 

 

블록 암호 (Block cipher)

 

평문을 정해진 크기의 블록 단위로 암호화하는 방식

 

예시)

블록 크기 : 4 Byte

평문 4바이트 블록으로 쪼개 각 블록마다 암호화 진행

 

블록 암호

 

대표 예시 : DES / AES

 

평문 크기가 블록 크기의 배수가 아닐 경우
균등하게 쪼갤 수 없기 때문에 평문 뒤 임의의 데이터를 추가하는 패딩(Padding) 수행
→ 평문이 블록 크기 배수가 될 때까지 추가

 

 

스트림 암호(Stream cipher)

 

송신자와 수신자가 공유하는 데이터 스트림 생성 후, 평문연산 수행하여 암호문 생성하는 방식

복호화 과정은 암호화 방식 역연산 진행

 

 대부분 암호화 & 복호화 과정에 XOR 연산(Exclusive OR) 사용

▶ 비트 단위 연산

 

🔎 XOR 연산
a b a$\oplus$b
0 0 0
0 1 1
1 0 1
1 1 0
XOR 연산의 특징 
- a$\oplus$b 값으로부터 a에 대한 정보를 알아낼 수 X
- $a = (a\oplus b)\oplus b$ 성립으로 역연산동일하며, 정보 손실이 없음

 

 

평문 $P$, 암호문 $C$, 스트림 $X$ 일 때, $C = P \oplus X$

$X \oplus X = 0$ 이므로 수신자가 $C \oplus X = P \oplus X \oplus X = P$암호문 복호화 가능

 

 

예시)'AB' $\oplus$ 'qu' = [65,66] $\oplus$ [113, 117]▶ [01000001, 01000010] $\oplus$ [01110001, 01110101] = [00110000, 00110111]

▶ [48, 55] = '07'

 

 

💡 스트림 공유 문제
송신자와 수신자가 평문 길이만큼의 스트림을 매번 공유 = 스트림 모르는 공격자는 암호문 복호화 불가
 평문 길이의 스트림 안전 공유 = 스트림 공유 채널로 평문 공유 = 암호화 필요 없음

▶스트림 대신, 시드(Seed) 값 공유
사전에 합의된 함수의 인자로 넣어 스트림 개별 생성 

단순 연산 구현으로 속도가 빨라 연산 능력이 부족한 임베디드 기기나 속도 중요 환경에서 사용

 

 

 

 

 대칭키 암호 시스템 장단점

 

장점

  • 공개키 암호 시스템 대비 빠른 속도

 

 단점

  • 송신자와 수신자 간 사전 키 교환 필요 
  • 통신마다 개별 키 생성 필요
  • N명의 사람이 있을 경우, $_n\mathrm{C}_2 = N(N-1)/2$ 개 키 필요

 

 

 

📌 공개키 암호 시스템

송신자가 수신자 공개키(Public Key)로 데이터 암호화 후, 수신자 전송 

수신자는 자신의 비밀키(Private Key)로 암호문 복호화

 

▶공개키와 비밀키 쌍으로 이루어짐

 

공개키 : 모두에게 공개되어 있는 키로 누구나 수신자에게 암호문 전송 가능

개인키 : 수신자만 알고 있는 키로 공격자가 암호문을 도청해도 복호화 불가

 

 

대칭키 암호의 경우, 송신자와 수신자가 같은 사용

공개키 암호 시스템의 경우, 서로 다른 사용 = 비대칭키 암호 시스템

 

 

 

 공개키 암호 시스템 장단점

 

✅ 장점

  • 그룹 내 인원 각자 공개키와 비밀키 생성 후, 공개키만 공개
  • N명의 사람이 있을 경우, N개 키 쌍만 필요 (대칭키 암호보다 적은 키 개수)
  • 키 생성 후, 재생성 필요 X

단점

  • 대칭키 암호 시스템 대비 복잡한 연산으로 느린 속도
  • 대칭키 암호와 동일 안전성 제공 시, 대칭키 암호보다 긴 키 사용 필요 

ex.

AES(대칭키) 192비트 이상 필요

RSA(공개키) 2048비트 이상 필요

 

 

 

 

📌 암호의 기능

1. 기밀성 (Confidentiality)

허가된 사람만 정보를 열람할 수 있게 하는 기능 (= 키를 가지고 있는 사람)

 

2. 무결성 (Integrity)

송신자가 보낸 정보가 변조되지 않게 보증하는 기능

 

ex. 송신자가 전송한 데이터를 누군가 가로채어 조작한 후, 수신자에 전달 혹은 네트워크 문제로 전송 중 일부 변경

 

3. 인증 (Authentication)

정보를 주고 받는 상대방의 신원확인하는 기능

 

ex. 공인인증서, ID/PW를 이용한 로그인 

 

4. 부인방지 (Non-repudiation)

정보 교환 이후, 교환 사실부인할 수 없게 하는 기능