708. 재생 공격 (Replay Attack) - 타임스탬프와 Nonce를 활용한 방어
핵심 인사이트: 앨리스가 은행에 암호화된
[송금 버튼]패킷을 보냈다. 해커는 튼튼한 암호(AES)를 풀지 못했다. 하지만 영악한 해커는 그 암호화된 패킷 덩어리를 캡처해서 복사해 둔 뒤, 다음 날 그대로 은행 서버에 다시 던졌다(재생 공격). 은행 서버는 암호를 풀어보니 어제처럼 똑같이 정상적인 서명이 되어있어, 앨리스의 통장에서 돈을 두 번 빼갔다. 암호를 풀 필요도 없이 "복붙"만으로 서버를 농락하는 재전송 공격을 막으려면 패킷에 유통기한(타임스탬프)과 일회용 번호표(Nonce)를 달아야 한다.
Ⅰ. 재생 공격 (Replay Attack)의 개념
- 개념: 공격자가 네트워크상에서 암호화되어 날아가는 정상적인 인증 트래픽이나 제어 데이터(예: 도어락 열기 패킷, 송금 패킷)를 가로채어 보관해 두었다가, 암호를 풀지 않고 그대로 나중에 다시(Replay) 시스템에 똑같이 전송하여 부당한 접근 권한이나 이득을 챙기는 공격입니다.
- 위험성: 아무리 강력한 AES나 RSA 암호화를 걸어두어도, 패킷 덩어리 전체를 '녹음'했다가 다시 트는 공격이므로 암호화 자체만으로는 절대 방어할 수 없는 무서운 기만전술입니다. (과거 무선 자동차 키 해킹이 이 방식으로 뚫렸습니다.)
Ⅱ. 재생 공격을 막는 3대 방어 핵심 원리 🌟
이 공격을 막으려면 서버가 "어? 이거 예전에 이미 한 번 처리했던 패킷이잖아? 또 왔네?" 하고 알아채게 만들어야 합니다. 패킷의 '신선도'를 확인하는 3가지 조미료를 첨가합니다.
1. 타임스탬프 (Timestamp, 시간 기록)
- 앨리스가 송금 패킷을 만들 때, 패킷 안에 **"2024년 10월 1일 오후 2시 00분 00초에 씀"**이라는 정확한 시간 도장을 같이 넣고 꽁꽁 암호화해서 보냅니다.
- 방어 원리: 해커가 이 패킷을 훔쳐서 다음 날 은행 서버로 보냅니다. 은행 서버는 암호를 풀고 타임스탬프를 봅니다. "어라? 지금 10월 2일인데 패킷에 적힌 시간은 어제 날짜네? 유통기한 지났어! 넌 폐기야!" 라며 가차 없이 버립니다. (앞선 커버로스(Kerberos) 시스템의 주력 방어법입니다.)
2. Nonce (논스, Number Used Once, 비표) 🌟
- 시간에 의존하면 서버 간의 시계가 1초만 안 맞아도 정상 패킷이 버려지는 문제가 생깁니다. 이를 막기 위해 쓰는 '일회용 랜덤 숫자표'입니다.
- 방어 원리:
- 앨리스가 접속하려 할 때, 서버가 앨리스에게 "자, 이번 거래에는
7A9F3이라는 난수(Nonce)를 꼭 끼워 넣어!"라고 일회용 미션을 줍니다. - 앨리스는 패킷 안에
7A9F3를 넣고 암호화해서 쏩니다. 서버는 확인 후 문을 열어주고, 방금 쓴7A9F3번호를 영원히 폐기합니다. - 해커가 패킷을 복사해서 내일 쏘면? 서버는 "지금 우리 거래 번호는
B82X1인데 왜 옛날 번호표를 들이밀어? 가짜 놈!" 하고 막아버립니다.
- 앨리스가 접속하려 할 때, 서버가 앨리스에게 "자, 이번 거래에는
3. 일련번호 (Sequence Number)
- 통신이 계속 길어질 때 유용합니다. 첫 번째 패킷엔 1번, 두 번째엔 2번 순서표를 붙여서 암호화합니다. 해커가 1번 패킷을 복사해서 나중에 던지면 서버는 "나 이미 1번 패킷 아까 받았는데 또 1번이 오네? 중복이다!"라며 폐기합니다. (IPsec이나 TLS 레코드 프로토콜의 주력 방어법입니다.)
Ⅲ. 현대 보안 시스템의 적용
- 오늘날의 TLS(HTTPS 핸드셰이크)나 WPA3 무선랜 보안 인증 과정에는 반드시 Random 값(Nonce)을 주고받는 과정이 강제적으로 포함되어 있어, 재생 공격이 발붙일 틈이 구조적으로 100% 차단되어 있습니다.
📢 섹션 요약 비유: 재생 공격은 콘서트장의 암표 팔이입니다. 정상 관객이 제출한 진짜 티켓(암호화된 패킷)을 몰래 복사기에서 스캔하여 여러 장의 복사본을 만들어 나중에 다른 친구들을 들여보내려는 수작입니다. 이를 완벽히 막으려면 티켓 귀퉁이에 입장 당일의 '오늘 날짜 도장(타임스탬프)'을 찍어 유통기한을 주거나, 매번 관객이 입장할 때 찢어버리는 '1회용 바코드 번호표(Nonce)'를 발급하여, 누군가 똑같은 번호의 티켓을 들고 2번 나타나면 즉시 경찰에 넘기는 검문 시스템을 만들어야 합니다.