song.3_3
하계 보안 세미나 1회차 - 깨지는 암호의 해부학 본문
암호 알고리즘 자체가 약해서 깨지는게 아니라 쓰는 방식이 잘못되면 깨진다
대칭키: 같은 키 하나로 암호화와 복호화 (빠른 본문 암호화)
- AES, ChaCha20
- 빠르지만, 그 키를 어떻게 안전하게 나눠갖느냐가 문제
비대칭키: 공개키와 개인키가 따로 (키 교환/ 서명)
- RSA, ECC, ECDSA
- 느리지만, 서로 미리 키를 공유하지 않아도 통신을 시작할 수 있음
해시: 키가 없고, 데이터를 고정된 길이의 값으로 바꿈 (무결성 확인)
- SHA-256
- 무결성 확인에는 쓰지만, 인증은 아님
- 내용이 바뀌었나? 는 볼 수 있지만, 누가 보냈는지는 모름
TLS는 이 세 개가 같이 쓰임 (ex: HTTPS)
- 처음 연결할 때 비대칭키로 세션키를 안전하게 합의
- 실제 데이터 전송은 빠른 대칭키
- 중간에 변조됐는지는 해시 / MAC / AEAD 태그로 확인
AES는 블록하나를 암호화하는 기계
실제 데이터는 길다. 여러 블록을 어떻게 이어서 암호화할지 정해야함
→ 운영모드
ECB (평문 블록)
- 항상 같은 암호문 블록
- 이미지를 암호화해도 윤곽이 남아 실무x
CBC
- 이전 암호문 블록과 XOR해서 다음 블록을 암호화
- 패턴은 잘 숨기지만, 패딩 검사를 잘못하면 패딩 오라클 공격 가능
CTR
- 카운터 값을 암호화해서 키스트림을 만들고, 평문과 XOR
- 빠르고 편하지만, nonce를 재사용하면 큰일남
GCM
- CTR 방식에 인증 태그까지 붙인 방식
- 요즘 많이 쓰지만, nonce 재사용에 매우 취약
nonce 재사용이 왜 위험하냐?
CTR/GCM에서는 이런 식
암호문 C = 평문 P ⊕ 키스트림 KS
그런데 nonce를 재사용하면 같은 키스트림 KS가 또 나옴
그러면
C1 = P1 ⊕ KS
C2 = P2 ⊕ KS
둘을 XOR하면
C1 ⊕ C2 = P1 ⊕ P2
왜냐하면 KS가 두 번 XOR돼서 사라짐
즉 키를 몰라도 두 평문의 관계가 드러남 그래서 사용금지
오라클은 서버가 실수로 알려주는 작은 힌트 (1비트 응답)
예를 들어 서버가 암호문을 복호화했을 때
“패딩 맞음”
“패딩 틀림”
이렇게 다르게 반응하면, 공격자는 그 차이를 이용
처음에는 겨우 1비트 정보 같지만, 이걸 수백 번, 수천 번 반복하면 평문이나 키를 알아낼 수 있음
핵심
오라클 = 서버가 흘리는 yes/no 힌트
이 1비트가 반복되면 비밀이 풀린다
패딩 오라클
CBC 복호화 공식이 핵심
Pᵢ = Dₖ(Cᵢ) ⊕ Cᵢ₋₁
여기서
- Pᵢ = 알고 싶은 평문 블록
- Cᵢ = 현재 암호문 블록
- Dₖ(Cᵢ) = AES 복호화 결과, 공격자는 모름
- Cᵢ₋₁ = 직전 암호문 블록, 공격자가 조작 가능
중요한 건
공격자는 AES 키를 모른다.
그런데 직전 암호문 블록 Cᵢ₋₁은 바꿀 수 있다.
그리고 서버가 패딩 맞는지 틀리는지 알려준다.
그래서 공격자가 Cᵢ₋₁을 한 바이트씩 바꿔가며 서버에 보냄
서버가 “패딩 OK”라고 하는 순간, 공격자는 그 바이트에 대한 정보를 얻음
결국 평문을 한 바이트씩 복원 가능
'하계 보안 세미나' 카테고리의 다른 글
| 하계 보안 세미나 6일차 - 보안적합성 검사 (0) | 2026.07.10 |
|---|---|
| 하계 보안 세미나 5일차 - 시큐어코딩 (임베디드·자동차 코딩 표준) (0) | 2026.07.10 |
| 하계 보안 세미나 4일차 - 자동차 보안 이해 (0) | 2026.07.06 |
| 하계 보안 세미나 3일차 - ML-KEM·ML-DSA(Module-LWE에서 크기·속도·하이브리드 PQC까지) (0) | 2026.07.06 |
| 하계 보안 세미나 2일차 - 격자 기반 암호 (SIS · LWE부터 Kyber와 ML-KEM) (0) | 2026.07.06 |