Nonce이란 무엇인가요?
Nonce(number used once)는 동일한 입력이 다른 출력을 생성하도록 보장하고 재생 공격과 패턴 분석을 방지하기 위해 암호화 연산에서 정확히 한 번만 사용되는 고유하고 일반적으로 무작위 또는 순차적인 값이다.
다른 이름: number used once, cryptographic nonce
동일한 평문을 동일한 키로 nonce 없이 암호화하면 매번 동일한 암호문이 생성된다. 여러 메시지를 관찰하는 공격자는 패턴을 감지할 수 있다. 동일한 암호문은 복호화하지 않아도 동일한 메시지가 전송됐음을 드러낸다. Nonce는 각 암호화 연산에 고유 값을 도입하여 동일한 평문이 동일한 키로 항상 다른 암호문을 생성하도록 보장함으로써 이 문제를 해결한다.
Nonce에 대한 보안 요구 사항은 알고리즘에 따라 다르다. 일부 알고리즘(AES-GCM)은 동일한 키로 nonce를 절대 재사용하지 않을 것을 요구한다. 재사용은 기밀성과 인증 모두를 재앙적으로 손상시킬 수 있다. 이런 알고리즘에서 무작위 nonce는 우발적인 충돌 가능성이 무시할 수 있을 만큼 작도록 충분히 커야 한다. 96비트 무작위 nonce(AES-GCM에서 사용)는 단일 키 하에서 최대 약 2^32회 암호화에 충분한 충돌 저항성을 제공한다.
Nonce는 다른 이름으로 암호화 프로토콜 전반에 나타난다. AES-GCM에서는 초기화 벡터, 챌린지-응답 인증에서는 챌린지, 블록체인에서는 채굴 nonce라고 불린다. 공통점은 고유성이다. 사용되는 맥락 내에서 값이 반복되어서는 안 된다.
Vaulted가 Nonce을 사용하는 방법
Vaulted로 암호화된 모든 비밀은 Web Crypto API의 암호학적으로 안전한 난수 생성기가 생성한 고유한 12바이트(96비트) 무작위 nonce를 사용한다. 이 nonce는 AES-256-GCM 암호화의 초기화 벡터 역할을 한다. 암호문과 함께 서버에 저장되고 복호화를 위해 수신자에게 전송된다. Vaulted는 비밀마다 새로 생성된 키와 nonce 쌍을 사용하므로 대규모에서도 nonce 재사용은 실질적인 우려 사항이 아니다.