VPN의 nonce란 무엇이며 재사용이 터널을 깨뜨리는 이유
nonce는 하나의 키 아래에서 절대 반복되어서는 안 되는 메시지별 값이며, 보통 평문으로 이동합니다. 이를 손으로 편집하는 것이 피해야 할 실수입니다.
대부분의 사람들은 VPN 프로필에서 nonce라는 단어를 만나고 피어 간에 복사하는 또 하나의 공유 비밀이라고 생각합니다. 그렇지 않습니다. nonce는 같은 키 아래에서 절대 반복되어서는 안 되는 값이며, nonce 기반 암호화의 대부분에서 평문으로 이동합니다. 혼동은 누군가 손으로 편집하기 전까지 무해하게 남고, 바로 그곳에서 실제 손상이 시작됩니다.
nonce는 실제로 어디에서 오는가
인증된 암호화는 키 아래에서 암호화되는 각 메시지에 서로 다른 nonce를 요구합니다. 프로토콜은 이 요구를 단조 증가 카운터, 패킷 식별자와 결합된 솔트, 또는 충분히 긴 무작위 값 등 여러 방식으로 충족합니다. IKEv2는 초기 교환에서 nonce를 교환하며, 이는 비밀이 아니라 키 유도에 대한 공개 입력입니다.
고유성은 구조적일 수도 확률적일 수도 있습니다. 카운터는 감싸 돌기 전까지 반복될 수 없으므로 프로토콜은 그보다 훨씬 앞서 키 갱신 지점을 정의합니다. 무작위 값은 메시지 한도 내에서 충돌이 일어나기 어려울 만큼 충분한 비트에 의존하며, 이는 실패 방식이 다른 또 다른 논거입니다. 프로토콜 문서는 어느 방식이 적용되는지 밝히며, 둘 다 명시된 한도가 지켜지는 동안에만 안전합니다.
| Design | Where uniqueness comes from | Exhaustion is handled by |
|---|---|---|
| AES-GCM records | An IV, typically a counter | Rekey before the counter wraps |
| ChaCha20-Poly1305 | A 96-bit nonce from a counter or generator | A message limit per key |
| WireGuard | A per-key 64-bit counter | Rekey at a message cap |
| OpenVPN AEAD | Packet identifier plus implicit key material | Rekey on the packet-id limit |
| IKEv2 | Fresh nonces per exchange | A new security association |
재사용이 실제로 치르는 비용
하나의 키 아래에서 nonce를 재사용하는 것은 작은 효율성 문제가 아닙니다. GCM에서는 IV를 공유하는 두 메시지로 인해 관찰자가 인증 키를 복구하고 두 평문의 배타적 논리합을 계산할 수 있습니다. 스트림 기반 구성도 같은 방식으로 키스트림을 재사용하므로, 암호문이 비밀이 아니라 수수께끼가 됩니다.
그래서 구현들은 카운터가 감싸 돌기 전에 키를 갱신하며, 상태가 불확실할 때 계속하지 않고 멈춥니다. 피어가 아직 이전 키를 보유한 상태에서 카운터를 재설정하는 재부팅, 또는 세션 중간에 찍은 스냅숏에서 복원된 가상 머신은 바로 한도가 방지하려고 존재하는 상황입니다. 공격자는 필요 없으며, 일상적인 운영만으로 충분합니다.
손으로 편집하는 것이 잘못된 해결책인 이유
카운터, 솔트, 패킷 식별자는 양 끝이 공유하는 상태 기계입니다. 한쪽을 바꾸면 다른 쪽의 동기화가 깨지고, 터널은 라우팅 문제처럼 보이는 방식으로 실패합니다. 지원되는 수단은 양 끝의 상태를 한 번에 재설정하는 새로운 키 교환입니다.
비밀번호와 nonce도 서로 다른 역할을 합니다. 비밀번호는 키 유도를 위한 비밀 입력이고, nonce는 메시지별 공개 입력입니다. 긴 비밀을 요구하는 nonce 레이블의 프로필 필드는 보통 다른 이름의 정적 키나 사전 공유 비밀이므로, 추측하지 말고 그 필드의 문서를 읽으십시오.
권고가 nonce 처리에 관한 것이라면, 수정은 유지 관리자의 수정 버전이며 다른 암호나 더 짧은 키가 아닙니다. nonce라는 단어를 피하려고 암호를 바꾸는 것은 문제를 해결하는 대신 옮길 뿐입니다.
추측 없이 경고 읽기
카운터나 nonce에 관한 로그 줄은 보통 공격이 아니라 잃어버린 상태를 설명합니다. 피어 하나가 재시작되었는지, 복제된 가상 머신이 같은 ID를 재사용했는지, 양 끝이 키 갱신 설정에 동의하는지 확인하십시오. 그런 다음 새 세션을 수립하고 메시지가 다시 나타나는지 지켜보십시오.
진단을 무관한 실패와 분리하십시오. 로드되지 않는 페이지나 반복되는 자격 증명 요청은 nonce 재사용의 증거가 아니며, 그렇게 취급하면 문제가 그 위에 있는데도 암호 계층으로 들어가게 됩니다.
일반적인 사용에서 안전한 규칙은 짧습니다: 구현이 nonce를 관리하도록 두고, 양 끝을 지원되는 버전에 유지하며, 상태 재설정은 값을 편집하는 대신 키를 갱신하는 이유로 취급하십시오. 프로필 필드가 공급업체 문서에 없으면 그 값을 지어내지 마십시오. 터널 수리는 어느 계층을 보고 있는지 아는 것에서 시작됩니다.