암호 공격
더 많은 작업
- 국내 수험서마다 번역체가 달라 영어 기준으로 기술
- Plaintext: 평문
- Ciphertext: 암호문
암호 공격(cryptanalytic attack)은 키를 모르는 상태에서 암호문을 해독하거나 키를 알아내려는 시도이다. 고전적인 암호 해독은 알고리즘의 수학적 약점을 노리지만, 현대 공격의 상당수는 알고리즘보다 구현, 키 관리, 사람, 프로토콜의 약점을 노린다. CISSP 출제 개요 3.7은 무차별 대입, 암호문 단독, 기지 평문, 빈도 분석, 선택 암호문, 구현 공격, 부채널, 오류 주입, 타이밍, 중간자, 패스 더 해시, 커버로스 악용, 랜섬웨어를 나열한다.
- 해독이 어려운(공격자 입장에서 힘든 환경) 것부터 쉬운 순으로 나열
- COA; 암호문 단독 공격
- 가진 건 암호문밖에 없는 경우
- 암호문을 가지고 평문을 추론
- 다빈치코드에 나오는 고전적인 치환 암호, 전치 암호 정도라면 가능하겠지만 현대 암호학에선 현실적으로 불가능
- KPA; 기지 평문 공격; 알려진 평문 공격
- 몇 가지 암호문 - 평문 조합이 알려진 상태
- 암호화 메커니즘을 파악하기 조금 더 유리하지만 한정된 조합만을 알고 있으므로 한계 존재
- CPA; 선택 평문 공격
- 평문을 선택하면 암호문을 얻을 수 있는 경우
- 암호화 메커니즘은 모르지만 원하는대로 원하는 평문을 암호화해볼 수 있어 파악이 용이
- Bruteforce로 암호문을 역으로 해독하는 시도 가능
- CCA; 선택 암호문 공격
- 암호문을 고르면 복호화된 평문을 얻을 수 있는 경우
- 많은 공격이 가능한 상태
- 암호화된 데이터들이 있다면 해독하여 취할 수 있음
적응적 선택 평문 공격(adaptive chosen-plaintext attack)과 적응적 선택 암호문 공격(adaptive chosen-ciphertext attack)은 선택 공격의 강화판이다. 일반 선택 공격은 질문할 평문(또는 암호문)을 한꺼번에 정해 결과를 받는다. 적응적 공격에서는 앞서 받은 결과를 보고 다음에 넣을 값을 고른다. 결과에 따라 전략을 바꿀 수 있으므로 공격자에게 가장 유리한 모델이다.
현실에서 적응적 선택 암호문 공격은 복호화 서버가 "패딩이 맞다·틀리다", "형식이 맞다·틀리다"를 서로 다르게 응답할 때 일어난다. 공격자는 암호문을 조금씩 바꿔 보내고 응답 차이를 보며 평문을 한 바이트씩 알아낸다. RSA PKCS#1 v1.5에 대한 블라이헨바허(Bleichenbacher) 공격, CBC 모드 패딩 오라클 공격이 대표적이다. 대책은 오류 응답을 하나로 통일하고, 복호화 전에 무결성부터 확인하는 인증 암호(AEAD, 예: AES-GCM)를 쓰는 것이다. 현대 암호 알고리즘은 이 가장 강한 모델(적응적 선택 암호문 공격, IND-CCA2)에서도 안전하도록 설계·평가된다.
| 공격 모델 | 공격자가 가진 것 | 공격자의 능력 | 현실 예 |
|---|---|---|---|
| 암호문 단독(COA) | 암호문만 | 관찰만 가능 | 도청한 암호 트래픽 분석, 고전 암호의 빈도 분석 |
| 기지 평문(KPA) | 일부 평문-암호문 쌍 | 관찰만 가능 | 정해진 머리글이나 서명 문구가 들어간 문서, 제2차 세계대전 에니그마 해독의 크립(crib) |
| 선택 평문(CPA) | 원하는 평문의 암호문 | 암호화 오라클 사용 | 공격자가 보낸 데이터를 시스템이 암호화해 저장·전송하는 경우 |
| 선택 암호문(CCA) | 원하는 암호문의 복호 결과 | 복호화 오라클 사용 | 복호화 결과나 오류를 돌려주는 서버 |
| 적응적 선택(ACPA, ACCA) | 위와 같음 | 결과를 보고 다음 질의를 조정 | 패딩 오라클 공격, 블라이헨바허 공격 |
아래로 갈수록 공격자에게 유리하고, 그 모델에서도 안전한 알고리즘일수록 강하다.
빈도 분석(frequency analysis)은 언어마다 글자와 글자 조합이 나타나는 빈도가 일정하다는 점을 이용하는 암호문 단독 공격이다. 영어에서는 E, T, A 같은 글자가 자주 나오므로, 단일 치환 암호(카이사르 암호 등)의 암호문에서 가장 자주 나오는 글자를 E로 놓고 나머지를 맞춰 가면 풀린다. 다중 치환 암호(비즈네르 암호)는 글자 빈도를 평탄하게 만들어 이를 어렵게 하지만, 키 길이를 알아내면 다시 단일 치환 여러 개로 나눠 빈도 분석을 할 수 있다.
현대 암호는 확산(diffusion)과 혼돈(confusion)으로 통계적 특성을 감추기 때문에 빈도 분석이 직접 통하지 않는다. 다만 ECB 모드처럼 같은 평문 블록이 같은 암호문 블록이 되는 운용 방식을 쓰면 블록 단위 반복 패턴이 드러나 비슷한 분석이 가능해진다.
구현 공격(implementation attack)은 수학적으로 안전한 알고리즘이라도 구현한 소프트웨어·하드웨어의 약점을 노리는 공격이다. CISSP 개요는 부채널, 오류 주입, 타이밍 공격을 이 범주로 함께 다룬다.
| 공격 | 원리 | 대책 |
|---|---|---|
| 부채널 공격(side-channel) | 연산 중 새어 나오는 전력 소비, 전자파, 소리, 캐시 접근 패턴을 측정해 키를 추정한다. 단순 전력 분석(SPA)과 차분 전력 분석(DPA)이 대표적이다 | 마스킹, 연산 흐름 균일화, 전자파 차폐, 검증된 HSM·스마트카드 |
| 타이밍 공격(timing) | 키나 입력 값에 따라 연산 시간이 달라지는 점을 재서 비밀 값을 추정한다. 문자열을 앞에서부터 비교하다 다르면 바로 끝내는 비교 함수가 흔한 예이다 | 상수 시간(constant-time) 구현, 상수 시간 비교 함수 |
| 오류 주입 공격(fault injection) | 전압·클록 교란(글리칭), 레이저, 온도 변화로 일부러 연산 오류를 일으키고, 틀린 결과와 맞는 결과를 비교해 키를 얻는다 | 연산 결과 재검증, 변조 탐지 센서, 이상 시 키 삭제 |
| 구현 결함 | 약한 난수, 키 재사용, 논스 재사용, 패딩 오류 메시지, 검증 생략 같은 코딩 실수 | 검증된 암호 라이브러리 사용, 코드 검토, 암호 모듈 검증 |
구현 공격 대책의 기본은 직접 암호를 구현하지 않고 검증된 라이브러리와 검증된 암호 모듈을 쓰는 것이다.
| 공격 | 노리는 대상 | 핵심 대책 |
|---|---|---|
| 무차별 대입 공격(brute force) | 가능한 모든 키나 비밀번호를 대입한다 | 충분한 키 길이, 시도 횟수 제한, 느린 비밀번호 해시 |
| 사전 공격(dictionary) | 자주 쓰는 단어와 유출 비밀번호 목록을 대입한다 | 약한 비밀번호 차단 목록, 다중 인증 |
| 레인보우 테이블(rainbow table) | 해시 값을 미리 계산해 둔 표로 비밀번호 해시를 역추적한다 | 사용자마다 다른 솔트, 키 스트레칭 |
| 생일 공격(birthday) | 해시 충돌을 생일 역설로 예상보다 빨리 찾는다(출력 n비트면 약 2n/2회) | 출력이 긴 해시 함수 |
| 재전송 공격(replay) | 가로챈 인증 메시지를 그대로 다시 보낸다 | 논스, 타임스탬프, 순서 번호, 세션 키 |
| 중간자 공격(MITM) | 두 당사자 사이에서 키 교환을 가로채 각각과 따로 키를 맺는다 | 인증서 검증, 상호 인증, 인증된 키 교환 |
| 중간 만남 공격(meet-in-the-middle) | 이중 암호화의 양쪽 끝에서 계산해 가운데서 맞춘다. 2DES가 DES보다 크게 강하지 않은 이유이다 | 3중 암호화나 더 긴 키의 단일 알고리즘 |
| 패스 더 해시(pass the hash) | 평문 비밀번호 없이 탈취한 NTLM 해시로 인증한다 | 관리자 계정 분리, 로컬 관리자 비밀번호 고유화, 자격 증명 보호 기능 |
| 커버로스 악용(Kerberos exploitation) | 골든 티켓, 실버 티켓, 커버로스팅(Kerberoasting), 패스 더 티켓으로 티켓·서비스 계정 키를 악용한다 | KRBTGT 키 주기적 교체, 서비스 계정 강한 비밀번호, AES 사용 |
| 랜섬웨어(ransomware) | 피해자 데이터를 공격자 키로 암호화해 몸값을 요구한다. 암호를 공격 수단으로 쓰는 경우이다 | 오프라인·불변 백업, 복구 훈련, 최소 권한 |
| 사회공학(고무호스 암호해독, rubber-hose) | 협박이나 매수로 키를 가진 사람에게서 직접 얻는다 | 직무 분리, 키 분할(split knowledge), 이중 통제 |
- 공격 모델은 공격자가 가진 정보로 구분한다. 암호문만이면 COA, 평문-암호문 쌍이면 KPA, 원하는 평문을 암호화시킬 수 있으면 CPA, 복호화 결과를 받을 수 있으면 CCA, 결과를 보며 질의를 바꾸면 적응적 공격이다.
- 빈도 분석은 고전 치환 암호에 통하는 암호문 단독 공격이다. 현대 블록 암호에는 직접 통하지 않지만 ECB 모드의 패턴 노출은 조심한다.
- 부채널·타이밍·오류 주입은 알고리즘이 아니라 구현을 노린다. "알고리즘은 안전한데 키가 새었다"면 구현 공격을 의심하고, 대책으로 상수 시간 구현과 검증된 모듈을 고른다.
- 레인보우 테이블의 대책은 솔트이고, 재전송의 대책은 논스·타임스탬프이며, 중간자의 대책은 상호 인증이다. 대응 관계를 짝지어 외운다.
- 패스 더 해시와 커버로스 악용은 암호를 깨지 않고 자격 증명 자체를 재사용한다. 비밀번호를 바꾸어도 해시나 티켓이 유효한 동안 위험이 남는다는 점이 함정이다.