1. 암호의 3대 구성 요소
암호 시스템은 크게 대칭키, 공개키, 해시 세 가지 요소로 구성된다.
1) 대칭키 암호
- 하나의 키를 송신자와 수신자가 함께 사용
- 매우 빠름
- 대용량 데이터 암호화에 사용
- 대표 알고리즘
- AES
- ChaCha20
단점
- 키를 안전하게 전달하기 어렵다.
2) 공개키 암호
- 공개키와 개인키를 사용
- 속도는 느리지만 키를 미리 공유할 필요가 없음
- 대표 알고리즘
- RSA
- ECC(ECDH, ECDSA)
주요 용도
- 키 교환
- 전자서명
3) 해시
- 키가 없음
- 같은 입력이면 항상 같은 출력
- 복원이 불가능한 일방향 함수
대표 알고리즘
- SHA-256
- SHA-3
- BLAKE2
사용 목적
- 무결성 검증
- 파일 지문 생성
→ 해시는 인증 기능이 없으므로 MAC/HMAC와 구분해야 한다.
2. TLS에서 암호가 동작하는 과정
TLS는 세 가지 암호 기술을 함께 사용한다.
1) 공개키
→ 세션 키 교환
2) 대칭키
→ 실제 데이터 암호화
3) 해시
→ 데이터 변조 여부 확인
즉, 공개키 + 대칭키 + 해시가 하나의 시스템에서 함께 동작한다.
3. 블록 암호 운용 모드
AES 자체보다 어떤 모드를 사용하는지가 더 중요하다.
1) ECB
특징
- 같은 평문
- 같은 암호문
결과 : 이미지의 윤곽이 그대로 남는다. 즉, 패턴이 노출되어 실무에서는 사용하지 않는다.
2) CBC
특징
- 이전 암호문과 XOR하여 암호화
장점
- 패턴이 사라진다.
단점
- 패딩 오라클 공격 가능
3) CTR
특징
- 스트림 암호처럼 동작
장점
- 빠름
- 병렬 처리 가능
단점
- Nonce 재사용 금지(같은 nonce 사용 시 C1 ⊕ C2 = P1 ⊕ P2 → 평문 정보가 노출된다.)
4) GCM
CTR + 인증(GHASH)
장점
- 기밀성
- 무결성
둘 다 제공(AEAD), 하지만 Nonce를 재사용하면 매우 위험하다.
4. 공개키 암호
1) RSA
안전성의 근거
→ 큰 수의 인수분해 문제(IFP)
공개 정보(n, e), 공격자는 n = p × q를 인수분해해야 개인키를 구할 수 있다.
2) ECC
안전성의 근거
타원곡선 이산로그 문제(ECDLP)
Q = dG (여기서 Q는 공개키, d는 개인키, 공개키만 보고 개인키를 구하기는 매우 어렵다.)
양자컴퓨터 영향
Grover
→ 대칭키는 키 길이를 늘리면 대응 가능
Shor
→ RSA와 ECC를 모두 깨뜨릴 수 있다.
그래서 PQC(Post Quantum Cryptography)가 필요하다.
5. MAC, HMAC, AEAD
1) MAC
비밀키를 이용해 메시지가 변조되지 않았음을 확인
2) HMAC
해시 기반 MAC, Length Extension Attack을 막는다.
3) AEAD
암호화와 인증을 동시에 수행
대표
- AES-GCM
- ChaCha20-Poly1305
현재 가장 많이 사용되는 방식이다.
6. 위협 모델과 오라클
1) IND-CPA
- 선택 평문 공격
- 암호문만 보고 원문을 구별하지 못해야 한다.
2) IND-CCA
- 선택 암호문 공격
- 복호화 오라클까지 허용하는 더 강한 모델이다.
- 실제 보안에서는 IND-CCA 수준을 목표로 한다.
3) Oracle
- 공격자가 질문할 수 있는 시스템
예를 들어 패딩 맞음, 패딩 틀림처럼 단 1비트 정보만 알려줘도 공격이 가능하다.
7. 패딩 오라클 공격
CBC에서 발생하는 대표 공격이다.
- 복호화 식 : P = D(C) ⊕ Cprev
→ 공격자는 이전 블록(Cprev)을 마음대로 바꿀 수 있다.
- 서버는 패딩 OK, 패딩 FAIL 만 알려준다.
→ 그러면 256번 정도의 시도로 평문 1바이트를 복원할 수 있다. 이 과정을 반복하면 평문 전체를 복원한다.
방어
- AEAD 사용
- Encrypt-then-MAC
- 동일한 오류 메시지 반환
- 동일한 응답 시간 유지
8. Bleichenbacher 공격
- RSA PKCS#1 v1.5 공격이다.
- 패딩 형식 : 00 02 PS 00 M
- 서버가 패딩 맞음, 패딩 틀림만 알려줘도 공격자는 곱셈 성질 c' = c × s^e 를 이용하여 평문의 가능한 구간을 계속 좁혀 최종적으로 평문을 복원한다.
실제 사례
- Bleichenbacher (1998)
- ROBOT (2017)
TLS 1.3에서는 RSA Key Exchange 자체를 제거하였다.
9. ECDSA Nonce 재사용 공격
- ECDSA에서는 매 서명마다 새로운 nonce(k)를 사용해야 한다.
- 서명식 : s = k⁻¹(z + rd)
같은 k를 두 번 사용하면 같은 r이 생성된다. 그러면 두 식을 빼서 k를 구할 수 있고, 다시 대입하면 개인키 d를 계산할 수 있다. 즉, Nonce 재사용 = 개인키 유출
실제 사례
- Sony PS3
- Android Bitcoin
- PuTTY
해결 방법
RFC6979
→ 메시지마다 결정론적으로 nonce 생성
10. 타이밍 공격
- 암호를 깨는 것이 아니라 실행 시간의 차이를 이용하는 공격이다.
대표 사례 : memcmp(), strcmp()
첫 번째 다른 바이트가 나오면 즉시 종료한다. 따라서 맞은 바이트가 많을수록 실행 시간이 조금 더 길어진다. 공격자는 이를 반복 측정하여 비밀 값을 한 글자씩 복원할 수 있다.
방어
- 상수 시간(Constant-Time) 비교 사용
예시 : diff |= a[i] ^ b[i];
모든 바이트를 끝까지 비교하므로 시간 차이가 발생하지 않는다.
'보안 세미나' 카테고리의 다른 글
| 6. 보안적합성 검사 (1) | 2026.07.11 |
|---|---|
| 5. 시큐어코딩 (1) | 2026.07.11 |
| 4. 자동차 사이버보안 (0) | 2026.07.11 |
| 3. PQC II (0) | 2026.07.11 |
| 2. 양자시대의공개키암호 (0) | 2026.07.11 |