Skip to main content

사이드 채널 공격: 소리 없는 해킹

암호 알고리즘이 수학적으로 완벽해도 구현체는 뚫린다. 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

  1. clflush로 공유 메모리 캐시 무효화
  2. 피해자 프로세스가 해당 주소에 접근하도록 유도
  3. 재접근 시간을 측정 → 캐시 히트면 피해자가 접근한 것

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) 활용

"수학은 완벽해도 실리콘은 거짓말을 한다."