사이드 채널 공격: 소리 없는 해킹
암호 알고리즘이 수학적으로 완벽해도 구현체는 뚫린다. Side-Channel Attack이 바로 그 빈틈을 노린다.
핵심 개념
코드 자체를 분석하는 대신, 실행 중 새어나오는 부산물 정보를 활용한다.
- 타이밍(Timing): 연산 시간 차이로 비밀 값 추론
- 전력(Power): 소비 전력 파형 분석 (SPA / DPA)
- 전자기(EM): 방출 전자기파 측정
- 캐시(Cache): CPU 캐시 히트/미스 패턴 (Flush+Reload 등)
Timing Attack 예시
# 취약한 비교 — 문자 하나씩 비교해서 타이밍 누출
def bad_compare(a, b):
for x, y in zip(a, b):
if x != y:
return False
return True
# 안전한 비교 — 항상 동일한 시간 소요
import hmac
def safe_compare(a, b):
return hmac.compare_digest(a, b)
early-return 방식은 일치하는 글자 수에 따라 응답 시간이 달라진다. 수천 번 요청을 보내 평균을 내면 토큰 1바이트씩 복구 가능하다.
Cache Timing: Flush+Reload
clflush로 공유 메모리 캐시 무효화- 피해자 프로세스가 해당 주소에 접근하도록 유도
- 재접근 시간을 측정 → 캐시 히트면 피해자가 접근한 것
AES T-table 구현에서 키 바이트를 복구하는 고전적 공격 경로다.
CTF 적용
Power analysis 없이도 remote timing만으로 풀 수 있는 문제들이 많다.
# 간단한 타이밍 측정 스크립트
for i in $(seq 0 255); do
python3 -c "
import socket, time
s = socket.create_connection(('target', 9999))
payload = bytes([${i}]) + b'A'*15
start = time.perf_counter()
s.sendall(payload)
s.recv(1024)
print(${i}, time.perf_counter()-start)
"
done
방어
- 상수 시간(constant-time) 구현 필수
hmac.compare_digest같은 검증된 라이브러리 사용- 하드웨어 노이즈 삽입, 랜덤 지연 추가
- 민감 연산엔 전용 보안 칩(HSM, SE) 활용
"수학은 완벽해도 실리콘은 거짓말을 한다."