Notice
Recent Posts
Recent Comments
Link
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

song.3_3

하계 보안 세미나 1회차 - 깨지는 암호의 해부학 본문

하계 보안 세미나

하계 보안 세미나 1회차 - 깨지는 암호의 해부학

song.3_3 2026. 7. 6. 10:11

 

 

암호 알고리즘 자체가 약해서 깨지는게 아니라 쓰는 방식이 잘못되면 깨진다

 

 

 

 

대칭키: 같은 키 하나로 암호화와 복호화 (빠른 본문 암호화)

  • 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”라고 하는 순간, 공격자는 그 바이트에 대한 정보를 얻음

결국 평문을 한 바이트씩 복원 가능