검수요청.png검수요청.png

"논스 (임시값)"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(특징)
잔글 (leejia1222님이 논스 문서를 논스 (임시값) 문서로 이동했습니다)
 
(사용자 3명의 중간 판 11개는 보이지 않습니다)
11번째 줄: 11번째 줄:
  
 
==특징==
 
==특징==
*nonce는 [[트랜젝션]]의 수를 카운트 하는 숫자 이다. 트랜젝션이 발생할 때 마다 nonce의 값은 증가하게 되며 여러 트랜젝션이 같은 nonce값을 가지지 못한다. database에서 auto increment index라고 생각하면 된다. [[이더리움]] 네트워크를 구성하는 노드는 이 nonce 값에 따라 트랜젝션을 순서대로 처리한다.
+
===비트코인 논스===
*nonce는 중복되지 않고 순차적이기 때문에, 같은 nonce 에 여러 트랜잭션 전송이 발생하였다면 해당 nonce 중 제일 높은 가스비를 지불한 트랜잭션이 처리된다. 이더리움에서는 이러한 방법으로 이중 지불 문제를 방지한다.<ref>박스여우, 〈[http://reurl.kr/32142A87NN nonce란]〉 , 《티스토리》 , 2019-05-02</ref>
+
[[비트코인 논스]][[블록 헤더]]의 일부분을 구성하며, 이를 작업증명 프로세스의 일부로 엔트로피를 제공하여 난이도 요건을 충족하는 해시를 찾기 위해 사용한다. 이는 마이닝 소프트웨어 및 하드웨어의 환경 설정에 따라 달라질 수 있지만, 이론상 논스 값의 분포는 무작위적이어야 한다. 2009년 사토시가 영향력 있는 마이너로 추정되었을 당시 논스 값은 특정한 패턴을 따랐다.<ref>PAUL CHANG, 〈[http://reurl.kr/32242F69HZ 비트코인 논스]〉 , 《비트맥스 블로그》 , 2019-01-23</ref>
  
==활용==
+
===논스 값의 계산===
[[Nonce]]는 임의로 생성되는 [[암호화]] 토큰으로 재생 공격을 방지하는 데 사용된다. Nonce는 SOAP 메시지의 임의의 위치에 삽입할 수 있지만, 일반적으로 <UsernameToken> 요소에 삽입된다.
+
결론부터 말하자면 nonce 값은, 이 nonce 값을 입력값 중의 하나로 해서 계산되는 [[블록 해쉬]]값이 특정 숫자보다 작아지게 하는 값을 말한다.
 +
그리고 해쉬 함수의 특성상, 어떤 해쉬값(A라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, A에서 역산을 하는 방식으로는 찾을 수 없고, 결과가 A가 될 때까지 무작위로 입력값을 계속 바꿔가면서 찾아낼 수 밖에 없다. 그 입력값을 바꿀 수 있는 유일한 통로가 바로 nonce다. 다시 말해, 아래 그림의‘[[블록 헤더]]’란에 포함된 6가지 정보 중에서 확정되지 않아서 값을 바꿀 수 있는 유일한 항목이 nonce다. nonce 값을 1씩 증가시키면서 반복적으로 계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면, 그 때의 nonce 값으로 계산한 블록 해쉬가 그 블록의 블록 해쉬로 확정되고, 블록 해쉬라는 식별자를 얻은 그 블록은 새로운 블록으로서 블록 체인에 추가되며 작업이 완료 된다. 블록 해쉬가 특정 숫자보다 낮게 나올 떄의 nonce 값이 바로 작업 증명을 나타내는 nonce 값이다.<ref name="논스">〈[http://reurl.kr/32242F5EDT 블록체인 기초개념]〉,《구글》, 2016-01-23 </ref>
  
Nonce가 없으면, UsernameToken이 하나의 시스템에서 [[HTTP]]와 같은 비보안 전송을 사용하는 다른 시스템으로 전달될 때 재생 공격에서 토큰을 가로채거나 사용할 수 있다. 사용자 이름 토큰을 공격받기 쉬운 [[클라이언트]] 및 [[서버]] 간에 전송할 때 동일한 비밀번호를 다시 사용할 수 있다. 사용자 이름 토큰은 XML 디지털 서명과 XML 암호화를 사용하는 경우에도 훔칠 수 있다. 그러나 비보안 전송에서 사용되는 nonce는 응답 문제점을 적절하게 처리할 수 가 없다. Nonce는 전송 레벨 또는 메시지 레벨에서 보안되는 통신 채널을 통해 SOAP 메시지를 전송할 때 가장 유용하게 쓰인다.
+
===작업 난이도===
 +
블록 해쉬가 특정 숫자보다 낮게 나올 때의 nonce 값을 찾아내는 것이 작업 증명이라고 했다. 작업 난이도는 nonce 값 계산의 어려운 정도를 나타낸다.<ref name="논스"></ref>
  
이러한 재생 공격을 없애기 위해 <wsse:UsernameToken> 요소 내에서 <wsse:Nonce> 및 <wsu:Created> 요소를 생성하고 메시지를 유효성 검증하는 데 사용된다. 서버는 <wsu:Created> 요소로 지정된 Nonce 작성 시간과 지정된 시간 내에서 현재 시간 간의 차이를 확인하여 메시지의 업데이트 여부를 확인한다. 또한 서버가 사용한 Nonce의 캐시를 검사하여 수신된 SOAP 메시지의 사용자 이름 토큰이 지정한 기간에 처리되었는지를 확인한다. 이러한 두 기능은 사용자 이름 토큰이 재생 공격에 사용될 가능성을 줄이기 위해 사용된다.
+
====비트코인 논스 사례====
 
 
UsernameToken의 Nonce를 추가하기 위해 사용자 이름 토큰의 토큰 생성자에 이를 지정할 수 있다. UsernameToken의 토큰 생성자가 지정되면, 사용자 이름 토큰에 Nonce를 추가하는 경우 Nonce 추가 옵션을 선택할 수 있다.<ref>, 〈[http://reurl.kr/32142A87NN Nonce, 임의로 생성된 토큰]〉 , 《IBM》 , </ref>
 
 
 
== 사례 ==
 
 
예를 들어, 비트코인의 제520,654번째 블록의 [[해시]]값을 찾기 위해 사용한 논스값은 0xe1c63570이었다.
 
예를 들어, 비트코인의 제520,654번째 블록의 [[해시]]값을 찾기 위해 사용한 논스값은 0xe1c63570이었다.
  
41번째 줄: 39번째 줄:
 
}}
 
}}
  
 +
===이더리움 논스===
 +
 +
===논스의 규칙===
 +
*트랜잭션은 순서대로 이루어져야 한다.
 +
현재 계정의 nonce가 1이라면, nonce가 0인 트랜잭션을 전송할 수 없습니다. (오류발생 : 순서를 역행할 수 없습니다.)
 +
*순번을 건너 뛰지 않는다.
 +
nonce 는 순차적으로 증가하고 처리되기 때문에 nonce 가 3인 트랜잭션을 전송하려면, nonce의 값 0~2까지 전송한 내역이 있어야 한다.<ref name="이더리움 논스">〈[http://reurl.kr/32242F4DTS 이더리움 논스]〉,《미디어》, 2018-10-26 </ref>
 +
 +
===논스의 필요성===
 +
nonce는 중복되지 않고 순차적이기 때문에, 같은 nonce 에 여러 트랜잭션 전송이 발생하였다면 해당 nonce 중 제일 높은 가스비를 지불한 트랜잭션이 처리된다. 이더리움에서는 이러한 방법으로 이중 지불 문제를 방지한다.<ref name="이더리움 논스"></ref>
 
{{각주}}
 
{{각주}}
  
54번째 줄: 62번째 줄:
 
* [[비트코인 백서]]
 
* [[비트코인 백서]]
  
{{블록체인 기술|토막글}}
+
{{블록체인 기술|검토 필요}}

2019년 12월 20일 (금) 10:36 기준 최신판

논스(nonce)는 블록체인에서 목표값 이하의 블록 해시를 찾기 위해 임시로 사용하는 숫자이다. 넌스, 난스 또는 임시값이라고도 한다.

개요[편집]

논스(nonce)는 비트코인의 창시자인 사토시 나카모토(Satoshi Nakamoto)가 쓴 비트코인 백서에 나오는 용어이다.[1]

블록체인은 다수의 거래내역을 모아 하나의 블록을 구성하고, 그 블록을 대표하는 해시값을 생성하여 다른 블록과 체인처럼 연결된다. 이 때, 블록을 대표하는 해시값인 블록해시를 생성하려면, 일정한 조건을 만족해야 한다. 그 일정한 조건이란, 블록 난이도에 따라 자동으로 설정된 '목표값'보다 더 작은 블록해시값을 찾아야 한다는 제약조건이다. 해시는 랜덤하게 생성되기 때문에, 수없이 많은 연산을 반복해서 미리 정해진 목표값 이하의 해시값이 나오도록 해야 한다. 이때 랜덤한 해시값을 생성할 수 있도록 매번 임시값을 사용해야 하는데, 그 임시값이 바로 논스이다.

일반적으로 블록의 해시값은 해당 블록의 생성일시, 버전, 비츠(bits), 루트해시, 이전 블록의 해시, 그리고 논스(nonce)라고 불리는 임시값 등을 조합한 후 해시로 변환하여 생성한다.[2] 해당 블록의 생성일시, 버전, 난이도, 루트해시와 이전 블록의 해시값은 이미 확정되어 정해진 값을 가지고 있지만, 논스라는 임시값이 달라짐에 따라 해시 연산 결과로 생성되는 블록 해시값도 다양하게 나올 수 있다. 예를 들어 논스가 1인 경우의 해시값과 2인 경우의 해시값은 전혀 다르다. 이 논스 값을 수없이 바꿔가면서 하나씩 대입하다가 새로 생성된 해시값이 일정한 목표값보다 더 작을 경우에 새로운 블록이 성공적으로 생성된다.

이처럼 특정한 블록에 대해 목표값 이하의 크기를 가진 해시값을 생성하는 논스값을 찾음으로써 새로운 블록을 생성하는 행위를 작업증명(PoW)이라고 한다. 작업증명의 대가로 일정한 개수의 암호화폐를 지급받는 것을 채굴(採掘) 또는 마이닝(mining)이라고 한다. 결국 채굴을 통한 작업증명 과정은 목표값 이하의 블록해시를 생성하는 '논스값'을 찾는 행위이다.

특징[편집]

비트코인 논스[편집]

비트코인 논스블록 헤더의 일부분을 구성하며, 이를 작업증명 프로세스의 일부로 엔트로피를 제공하여 난이도 요건을 충족하는 해시를 찾기 위해 사용한다. 이는 마이닝 소프트웨어 및 하드웨어의 환경 설정에 따라 달라질 수 있지만, 이론상 논스 값의 분포는 무작위적이어야 한다. 2009년 사토시가 영향력 있는 마이너로 추정되었을 당시 논스 값은 특정한 패턴을 따랐다.[3]

논스 값의 계산[편집]

결론부터 말하자면 nonce 값은, 이 nonce 값을 입력값 중의 하나로 해서 계산되는 블록 해쉬값이 특정 숫자보다 작아지게 하는 값을 말한다. 그리고 해쉬 함수의 특성상, 어떤 해쉬값(A라고 하면)을 결과로 나오게 하는 입력값을 찾으려면, A에서 역산을 하는 방식으로는 찾을 수 없고, 결과가 A가 될 때까지 무작위로 입력값을 계속 바꿔가면서 찾아낼 수 밖에 없다. 그 입력값을 바꿀 수 있는 유일한 통로가 바로 nonce다. 다시 말해, 아래 그림의‘블록 헤더’란에 포함된 6가지 정보 중에서 확정되지 않아서 값을 바꿀 수 있는 유일한 항목이 nonce다. nonce 값을 1씩 증가시키면서 반복적으로 계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면, 그 때의 nonce 값으로 계산한 블록 해쉬가 그 블록의 블록 해쉬로 확정되고, 블록 해쉬라는 식별자를 얻은 그 블록은 새로운 블록으로서 블록 체인에 추가되며 작업이 완료 된다. 블록 해쉬가 특정 숫자보다 낮게 나올 떄의 nonce 값이 바로 작업 증명을 나타내는 nonce 값이다.[4]

작업 난이도[편집]

블록 해쉬가 특정 숫자보다 낮게 나올 때의 nonce 값을 찾아내는 것이 작업 증명이라고 했다. 작업 난이도는 nonce 값 계산의 어려운 정도를 나타낸다.[4]

비트코인 논스 사례[편집]

예를 들어, 비트코인의 제520,654번째 블록의 해시값을 찾기 위해 사용한 논스값은 0xe1c63570이었다.

  • 코인종류 : 비트코인
  • 생성일시 : 2018-05-01 09:57:58 UTC
  • 블록번호 : 제520,654번째 블록
  • 블록해시 : 00000000000000000027d5cc71fb300b9d7c3b703da500a23a6a413297e7f8f4
  • 버전 : 0x20000000
  • 난이도 : 7.07T/4.02T
  • 비츠(bits) : 0x1745fb53
  • 임시값(nonce) : 0xe1c63570
  • 포함된 트랜잭션의 개수 : 2,683개
  • 루트해시 : 57e9d0dfa5fb3f73303fc205b04adcbb9b2b29ade8031ddcc8c9c88652f35cd2
  • 이전 블록의 해시 : 00000000000000000020c54be8b197db66d61b0e9782ee15c71a0cc822bf48e8
  • 다음 블록의 해시 : 0000000000000000000c74f3b4da084b2a8a635dd988e00cc1877565eff6eaa8

이더리움 논스[편집]

논스의 규칙[편집]

  • 트랜잭션은 순서대로 이루어져야 한다.

현재 계정의 nonce가 1이라면, nonce가 0인 트랜잭션을 전송할 수 없습니다. (오류발생 : 순서를 역행할 수 없습니다.)

  • 순번을 건너 뛰지 않는다.

nonce 는 순차적으로 증가하고 처리되기 때문에 nonce 가 3인 트랜잭션을 전송하려면, nonce의 값 0~2까지 전송한 내역이 있어야 한다.[5]

논스의 필요성[편집]

nonce는 중복되지 않고 순차적이기 때문에, 같은 nonce 에 여러 트랜잭션 전송이 발생하였다면 해당 nonce 중 제일 높은 가스비를 지불한 트랜잭션이 처리된다. 이더리움에서는 이러한 방법으로 이중 지불 문제를 방지한다.[5]

각주[편집]

  1. Satoshi Nakamoto, "Bitcoin: A Peer-to-Peer Electronic Cash System", 2008-10-31
  2. 어미새, 〈#5 - 블록해시에 관한 정리〉, 《스팀잇》, 2018년 2월
  3. PAUL CHANG, 〈비트코인 논스〉 , 《비트맥스 블로그》 , 2019-01-23
  4. 4.0 4.1 블록체인 기초개념〉,《구글》, 2016-01-23
  5. 5.0 5.1 이더리움 논스〉,《미디어》, 2018-10-26

참고자료[편집]

(사토시 나카모토 씀, 임민철 번역, 〈비트코인: 개인-대-개인간 전자 화폐 시스템〉, 2008년 10월 31일)

같이 보기[편집]


  검수요청.png검수요청.png 이 논스 (임시값) 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.