타이밍 공격: 실행 시간에서 키 추출하기
상수 시간으로 동작하지 않는 구현에 캐시 타이밍 공격을 수행합니다.
타이밍 공격: 실행 시간에서 키 추출하기은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
타이밍 공격이란 무엇인가
타이밍 공격은 암호 연산에 걸리는 시간을 측정하여 비밀 데이터를 추론하는 부채널 공격입니다. 나노초 단위의 차이만으로도 키 비트가 유출될 수 있습니다.
실행 시간이 비밀을 유출하는 이유
암호 코드 내부의 분기와 메모리 접근은 비밀 값에 따라 달라지는 경우가 많습니다. 0비트에서 일찍 종료되는 반복문은 더 빠르게 실행되므로 공격자는 그 차이를 측정할 수 있습니다.
AES에 대한 캐시 타이밍 공격
고전적인 AES 표 조회는 주소가 키 바이트에 따라 달라지는 CPU 캐시 라인에 적중합니다. Flush+Reload와 같은 도구를 사용하면 공격자가 어떤 캐시 라인에 접근했는지 관찰할 수 있습니다.
Bleichenbacher RSA 타이밍 오라클
Bleichenbacher의 1998년 공격은 PKCS#1 v1.5 패딩 검증에서 발생하는 타이밍 차이를 악용했습니다. 선택한 암호문을 수백만 개 사용하면 1024비트 RSA 개인 키를 복구할 수 있었습니다.
원격 타이밍 공격
네트워크를 통해서도 충분한 표본을 사용하면 밀리초 미만의 시간 차이를 측정할 수 있습니다. Lucky13은 인터넷을 통한 TLS의 CBC 모드 MAC 타이밍을 악용했습니다.
Python에서 시간 측정
나노초 단위의 해상도에는 time.perf_counter_ns()를 사용하십시오. 취약한 비교를 시연하려면 다음과 같이 하십시오.
import time
def vulnerable_compare(a, b):
for x, y in zip(a, b):
if x != y:
return False
return len(a) == len(b)
start = time.perf_counter_ns()
vulnerable_compare(b"secret_key_here", b"wrong_key_xxxxx")
elapsed = time.perf_counter_ns() - start
print(f"Elapsed: {elapsed} ns")타이밍 오라클 시뮬레이션
타이밍 오라클은 추측이 올바른지 반환하고 AND 타이밍 정보도 유출합니다. 거짓을 반환하기 전에 어떤 추측에 가장 오래 걸리는지 측정하면 비밀을 한 바이트씩 복구할 수 있습니다.
타이밍 데이터의 통계 분석
단일 측정은 잡음이 많습니다. 공격자는 후보마다 수천 개의 표본을 수집하고 통계적 검정(t 검정, Welch 검정)을 사용하여 신호와 잡음을 구별합니다.
OAEP에 대한 Manger 공격
2001년 Manger는 OAEP로 패딩한 RSA도 구현이 "첫 번째 바이트가 0인지" 여부를 다른 오류와 서로 다른 타이밍으로 구별하면 정보를 유출한다는 것을 보였습니다.
실제 사례
OpenSSL, GnuTLS, NSS에는 모두 타이밍 공격 관련 CVE가 발생한 적이 있습니다. Lucky13 TLS 공격(CVE-2013-0169)은 공개 당시 사실상 모든 TLS 라이브러리에 영향을 주었습니다.
이해도 확인
공격자가 타이밍 신호와 측정 잡음을 구별하는 데 도움이 되는 통계 기법은 무엇입니까?
학습 내용 복습
타이밍 공격은 실행 시간의 차이를 측정하여 암호 비밀을 추출합니다. 이러한 공격은 로컬 환경에서는 캐시를 통해, 원격 환경에서는 네트워크를 통해 작동합니다. 통계 분석은 신호와 잡음을 분리합니다. 해결 방법은 상수 시간 코드이며, 대응책 학습 내용에서 다룹니다.
자주 묻는 질문
“타이밍 공격: 실행 시간에서 키 추출하기” 강의는 무료인가요?
네 — “타이밍 공격: 실행 시간에서 키 추출하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“타이밍 공격: 실행 시간에서 키 추출하기”에서 뭘 배우나요?
상수 시간으로 동작하지 않는 구현에 캐시 타이밍 공격을 수행합니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“타이밍 공격: 실행 시간에서 키 추출하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 타이밍 공격: 실행 시간에서 키 추출하기
- 전력 분석: SPA 및 DPA
- 전자기 및 음향 부채널
- 대응책: 마스킹, 블라인딩 및 상수 시간 코드