넌스 (Nonce)

중급암호학수정일

넌스(Nonce)는 “한 번만 사용되는 숫자(number used once)”입니다. 1. 암호화 nonce는 오래된 통신이 재생 공격에 재사용되지 않도록 하는 데 자주 사용됩니다. 2. 블록체인에서 nonce는 고유성을 확보하기 위해 쓰이는 숫자입니다. 작업 증명 채굴에서는 블록 헤더에 들어가는 값이고, 이더리움 같은 계정 기반 블록체인에서는 계정이 보낸 트랜잭션 순번입니다.

Nonce는 트랜잭션이나 메시지를 식별하는 ID가 아닙니다. 트랜잭션을 식별하는 값은 트랜잭션 해시(TXID)이고, nonce는 같은 값이 두 번 쓰이지 않도록 해 중복 처리와 재생을 막는 장치입니다. 암호 프로토콜에 따라 nonce는 무작위 값일 수도 있고 1씩 늘어나는 카운터일 수도 있으며, 핵심 요건은 같은 키나 같은 계정 안에서 반복되지 않는 것입니다.

블록체인에서 Nonce가 작동하는 방식

계정 기반 블록체인의 트랜잭션 nonce

  1. 이더리움 같은 계정 기반 블록체인에서는 계정별로 1씩 증가하는 순번인 Nonce가 트랜잭션 데이터에 포함됩니다.
  2. 같은 순번은 한 번만 쓸 수 있으므로, 서명된 트랜잭션을 그대로 다시 보내도 처리되지 않습니다.
  3. 순번이 정해져 있어 트랜잭션은 계정별로 nonce 순서대로 처리됩니다. 앞 순번이 처리되지 않으면 뒤 순번 트랜잭션도 대기합니다.

작업 증명 채굴의 블록 nonce

비트코인 채굴자는 블록 헤더의 Nonce 값을 바꿔 가며 해시를 반복 계산해, 목표값보다 작은 해시가 나오는 값을 찾습니다. 이 값이 블록에 기록되면 누구나 해시를 다시 계산해 작업이 이루어졌는지 검증할 수 있습니다. 여기서 nonce는 고유한 해시를 “보장”하는 값이 아니라, 조건을 만족하는 해시를 찾기 위해 바꿔 보는 입력값입니다.

Nonce 사용 예시

  1. 암호화 프로토콜: Nonce는 공격자가 오래된 메시지를 재사용하는 것을 방지하기 위해 TLS/SSL과 같은 암호화 프로토콜에 일반적으로 사용됩니다. AES-GCM 같은 암호화 방식에서는 같은 키로 같은 nonce를 두 번 쓰면 보안이 크게 무너지므로, nonce 중복을 피하는 것이 중요합니다.
  2. 블록체인 트랜잭션: 위에서 설명한 계정 순번과 채굴 nonce가 대표적입니다.
  3. 웹 애플리케이션 보안: Nonce는 요청이 합법적인 소스에서 발생했는지 확인하여 교차 사이트 요청 위조(CSRF) 공격으로부터 보호할 수 있습니다.

계정 순번과 암호 프로토콜의 nonce는 같은 값의 재사용을 막아 재생 공격을 방지하고, 채굴 nonce는 작업 증명 조건을 만족하는 해시를 찾기 위한 입력값으로 쓰입니다. 다만 Nonce 자체가 메시지의 진위를 보장하지는 않으며, 진위 확인은 서명이나 해시와 함께 이루어집니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.