"머클루트"의 두 판 사이의 차이
(→역사) |
|||
(사용자 2명의 중간 판 12개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''머클루트'''(merkle root)란 [[머클트리]]의 뿌리 부분에 해당하는 | + | '''머클루트'''(merkle root)란 [[머클트리]]의 뿌리 부분에 해당하는 것이고, 블록 헤더에 포함된다. 해당 [[블록]]에 저장되어 있는 모든 거래의 요약본으로 해당 블록에 포함된 거래로부터 생성된 [[머클트리]]의 루트에 대한 [[해시]]를 말한다. 거래가 아무리 많아도 뭉쳐서 요약된 머클 루트의 용량은 항상 32바이트이다. |
==개요== | ==개요== | ||
11번째 줄: | 11번째 줄: | ||
머클루트를 구하기까지 반복하게 되는 이 과정이 토너먼트 대진표의 모양으로 만들어지는데 이것을 머클트리라고 부른다. ‘log₂[전체거래내역의수]’값을 구하면 해시화한 과정의 횟수도 알 수 있기 때문에 머클트리만 따라가면 특정 거래내역을 쉽게 찾을 수 있다. 머클트리는 트리구조를 형성하고 있는 암호화 과정이다. 우측 그림을 보면, 맨 밑에 위치한 최종 값을 머클루트, 상부의 값들을 리프라고 칭한다. 8개 거래에 대한 머클트리를 예시로 들어보면 그림과 같이 거래에 대한 해시값이 TX1부터 TX8과 같이 리프가 이어져 있고, 이를 두 개씩 묶어 더한 후 같은 방식으로 진행하여 최종 값인 머클루트를 얻는다. 거래가 홀수인 경우, 맨 마지막 거래를 복사하여 거래를 짝수개로 만들어 사용하는 원칙으로 이용되고 있다. 이러한 경우를 [[균형트리]](balanced tree)라고 한다.<ref>easyblockchain, 〈[https://banksalad.com/contents/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EB%A8%B8%ED%81%B4%ED%8A%B8%EB%A6%AC-Merkle-Trees-%EB%9E%80-ilULl 쉽게 설명하는 블록체인 : 머클트리(Merkle Trees)란]〉, 《뱅크샐러드》, 2018-07-30</ref> | 머클루트를 구하기까지 반복하게 되는 이 과정이 토너먼트 대진표의 모양으로 만들어지는데 이것을 머클트리라고 부른다. ‘log₂[전체거래내역의수]’값을 구하면 해시화한 과정의 횟수도 알 수 있기 때문에 머클트리만 따라가면 특정 거래내역을 쉽게 찾을 수 있다. 머클트리는 트리구조를 형성하고 있는 암호화 과정이다. 우측 그림을 보면, 맨 밑에 위치한 최종 값을 머클루트, 상부의 값들을 리프라고 칭한다. 8개 거래에 대한 머클트리를 예시로 들어보면 그림과 같이 거래에 대한 해시값이 TX1부터 TX8과 같이 리프가 이어져 있고, 이를 두 개씩 묶어 더한 후 같은 방식으로 진행하여 최종 값인 머클루트를 얻는다. 거래가 홀수인 경우, 맨 마지막 거래를 복사하여 거래를 짝수개로 만들어 사용하는 원칙으로 이용되고 있다. 이러한 경우를 [[균형트리]](balanced tree)라고 한다.<ref>easyblockchain, 〈[https://banksalad.com/contents/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EB%A8%B8%ED%81%B4%ED%8A%B8%EB%A6%AC-Merkle-Trees-%EB%9E%80-ilULl 쉽게 설명하는 블록체인 : 머클트리(Merkle Trees)란]〉, 《뱅크샐러드》, 2018-07-30</ref> | ||
+ | |||
+ | ==역사== | ||
+ | 머클루트는 랄프 머클([[Ralph Merkle]])의 이름을 따서 1979년 기존 암호화 가능을 기반으로 한 디지털 서명 이라는 제목으로 제안했다. 랄프 머클(Ralph Merkle)은 1952년 2월 2일생으로 미국 캘리포니아주에서 태어났다. UC 버클리 스탠포드 대학교에서 졸업을 했고, 1980년에 Elxsi의 컴파일러 개발 관리자로 직무를 수행했다. 1988년 Xerox PARC의 연구 과학자가 되었고 연구소에서 근무 하는 동안 Khufu와 Khafre 블록 암호와 Snefru 해시 함수를 설계했다. 2006년엔 샌프란시스코 베이 지역으로 돌아와 Singularity 의 교수 인 IMM 선임 연구원 과 Alcor Life Extension Foundation 의 이사로 재직했다. <ref name="머클"> 〈[https://en.wikipedia.org/wiki/Ralph_Merkle Ralph Merkle]〉, 《위키백과》 </ref>머클루트와 머클트리는 같이 제안했다. <ref> Jake Frankenfield, 〈[https://www.investopedia.com/terms/m/merkle-root-cryptocurrency.asp 머클 루트(Cryptocurrency)]〉, 《Investopedia》2018-03-16 </ref> | ||
+ | |||
+ | ====랄프 머클의 수상 경력==== | ||
+ | *1996 패리스 카넬 라키스 상 (로부터 ACM 의 발명에 대한) 공개 키 암호화 | ||
+ | *1998 원자 학 정밀 화학 반응을위한 분자 도구의 전산 모델링을위한 나노 테크 Feynman 상 수상 | ||
+ | *1999 IEEE Koji Kobayashi 컴퓨터 및 통신 상 | ||
+ | *공개 키 암호화의 발명으로 수학 우수상 RSA 2000 수상 | ||
+ | *공개 키 암호화의 발명에 대한 2008 국제 암호 해독 협회 (IACR) 동료 | ||
+ | *공개 키 암호화의 발명을위한 2010 IEEE 해밍 메달 | ||
+ | *2011 Computer History Museum Fellow "에서 Whitfield Diffie와 Martin Hellman과 함께 공개 키 암호를 사용했다. | ||
+ | *2011 국가 발명가 명예의 전당 , 공개 키 암호화 발명 | ||
+ | *2012 명예의 국가 사이버 보안 홀 징집병<ref name="머클"></ref> | ||
+ | |||
+ | ==특징== | ||
+ | ===머클루트의 노드 활용=== | ||
+ | 머클루트는 노드가 다음과 같이 수행 할 수 있도록 도움을 준다. | ||
+ | # 트랙잭션이 변경사항이 있는지 없는지 확인한다. | ||
+ | # 주어진 트랙잭션이 모든 트랜잭션을 요구하지 않고 블록에 있는지 확인한다. | ||
+ | # 노드는 주어진 트랜잭션이 블록에 포함되어 있는지 확인해야 하고 확인을 할려면 해시를 통해 해야한다. 해시를 통해 해결이 안되면 모든 거래를 다시 요청해야 한다. | ||
+ | |||
+ | ===머클루트의 역할=== | ||
+ | 머클루트의 역할은 각 거래 정보([[TXID]])의 정보들이 변경 되었는지에 대한 유효성을 검사하는 역할을 수행하고 머클루트의 결과 값을 통해 블록 해시의 정보가 구성됨으로 그 블록의 유효성 또한 검사할 수 있다.<ref> 어미새, 〈[https://m.blog.naver.com/PostView.nhn?blogId=yahweh87&logNo=221203979753&proxyReferer=https%3A%2F%2Fwww.google.com%2F 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의]〉, 《네이버 블로그》 2018-02-08 </ref> | ||
==장점== | ==장점== | ||
36번째 줄: | 60번째 줄: | ||
* Mr.Park, 〈[https://medium.com/@kimdong5374/%ED%95%B4%EC%8B%9C%ED%95%A8%EC%88%98%EC%99%80-%EB%A8%B8%ED%81%B4%EB%A3%A8%ED%8A%B8-%EB%A8%B8%ED%81%B4%ED%8A%B8%EB%A6%AC-2a5d57a38e63 해시함수와 머클루트&머클트리]〉, 《미디엄》, 2018-03-21 | * Mr.Park, 〈[https://medium.com/@kimdong5374/%ED%95%B4%EC%8B%9C%ED%95%A8%EC%88%98%EC%99%80-%EB%A8%B8%ED%81%B4%EB%A3%A8%ED%8A%B8-%EB%A8%B8%ED%81%B4%ED%8A%B8%EB%A6%AC-2a5d57a38e63 해시함수와 머클루트&머클트리]〉, 《미디엄》, 2018-03-21 | ||
* 이안, 〈[https://blog.naver.com/dancingmarionet/221152499419 비트코인 머클 트리 알고리즘의 취약점과 우회방안.]〉, 《네이버 블로그》 2017-11-30 | * 이안, 〈[https://blog.naver.com/dancingmarionet/221152499419 비트코인 머클 트리 알고리즘의 취약점과 우회방안.]〉, 《네이버 블로그》 2017-11-30 | ||
+ | * Jake Frankenfield, 〈[https://www.investopedia.com/terms/m/merkle-root-cryptocurrency.asp 머클 루트(Cryptocurrency)]〉, 《Investopedia》2018-03-16 | ||
+ | * Gbig, 〈[https://www.reddit.com/r/Bitcoin/comments/8o2y5p/what_is_the_purpose_of_the_merkle_root/ What is the purpose of the merkle root?]〉, 《Reddit》 2018-06-03 | ||
+ | * 어미새, 〈[https://m.blog.naver.com/PostView.nhn?blogId=yahweh87&logNo=221203979753&proxyReferer=https%3A%2F%2Fwww.google.com%2F 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의]〉, 《네이버 블로그》 2018-02-08 | ||
+ | *〈[https://en.wikipedia.org/wiki/Ralph_Merkle Ralph Merkle]〉, 《위키백과》 | ||
==같이 보기== | ==같이 보기== | ||
* [[머클트리]] | * [[머클트리]] |
2019년 8월 6일 (화) 16:55 기준 최신판
머클루트(merkle root)란 머클트리의 뿌리 부분에 해당하는 것이고, 블록 헤더에 포함된다. 해당 블록에 저장되어 있는 모든 거래의 요약본으로 해당 블록에 포함된 거래로부터 생성된 머클트리의 루트에 대한 해시를 말한다. 거래가 아무리 많아도 뭉쳐서 요약된 머클 루트의 용량은 항상 32바이트이다.
개요[편집]
머클루트는 블록이 보유하고 있는 거래 내역들의 해시값을 가장 가까운 거래내역끼리 쌍을 지어 해시화하고 쌍을 지을 수 없을 때까지 이 과정을 반복했을 때 얻게 되는 값이다. 더 자세한 머클루트의 생성 과정은 다음과 같다.[1]
- 최초 데이터를 SHA256 형태의 해시값으로 변환한다.
- 가장 가까운 노드 두 개를 한 쌍으로 묶어 합친 후 해시값으로 변환한다.
- 계속해서 해시값으로 변환하여 마지막 하나가 남을 때까지 이 과정을 반복한다.[2]
머클루트를 구하기까지 반복하게 되는 이 과정이 토너먼트 대진표의 모양으로 만들어지는데 이것을 머클트리라고 부른다. ‘log₂[전체거래내역의수]’값을 구하면 해시화한 과정의 횟수도 알 수 있기 때문에 머클트리만 따라가면 특정 거래내역을 쉽게 찾을 수 있다. 머클트리는 트리구조를 형성하고 있는 암호화 과정이다. 우측 그림을 보면, 맨 밑에 위치한 최종 값을 머클루트, 상부의 값들을 리프라고 칭한다. 8개 거래에 대한 머클트리를 예시로 들어보면 그림과 같이 거래에 대한 해시값이 TX1부터 TX8과 같이 리프가 이어져 있고, 이를 두 개씩 묶어 더한 후 같은 방식으로 진행하여 최종 값인 머클루트를 얻는다. 거래가 홀수인 경우, 맨 마지막 거래를 복사하여 거래를 짝수개로 만들어 사용하는 원칙으로 이용되고 있다. 이러한 경우를 균형트리(balanced tree)라고 한다.[3]
역사[편집]
머클루트는 랄프 머클(Ralph Merkle)의 이름을 따서 1979년 기존 암호화 가능을 기반으로 한 디지털 서명 이라는 제목으로 제안했다. 랄프 머클(Ralph Merkle)은 1952년 2월 2일생으로 미국 캘리포니아주에서 태어났다. UC 버클리 스탠포드 대학교에서 졸업을 했고, 1980년에 Elxsi의 컴파일러 개발 관리자로 직무를 수행했다. 1988년 Xerox PARC의 연구 과학자가 되었고 연구소에서 근무 하는 동안 Khufu와 Khafre 블록 암호와 Snefru 해시 함수를 설계했다. 2006년엔 샌프란시스코 베이 지역으로 돌아와 Singularity 의 교수 인 IMM 선임 연구원 과 Alcor Life Extension Foundation 의 이사로 재직했다. [4]머클루트와 머클트리는 같이 제안했다. [5]
랄프 머클의 수상 경력[편집]
- 1996 패리스 카넬 라키스 상 (로부터 ACM 의 발명에 대한) 공개 키 암호화
- 1998 원자 학 정밀 화학 반응을위한 분자 도구의 전산 모델링을위한 나노 테크 Feynman 상 수상
- 1999 IEEE Koji Kobayashi 컴퓨터 및 통신 상
- 공개 키 암호화의 발명으로 수학 우수상 RSA 2000 수상
- 공개 키 암호화의 발명에 대한 2008 국제 암호 해독 협회 (IACR) 동료
- 공개 키 암호화의 발명을위한 2010 IEEE 해밍 메달
- 2011 Computer History Museum Fellow "에서 Whitfield Diffie와 Martin Hellman과 함께 공개 키 암호를 사용했다.
- 2011 국가 발명가 명예의 전당 , 공개 키 암호화 발명
- 2012 명예의 국가 사이버 보안 홀 징집병[4]
특징[편집]
머클루트의 노드 활용[편집]
머클루트는 노드가 다음과 같이 수행 할 수 있도록 도움을 준다.
- 트랙잭션이 변경사항이 있는지 없는지 확인한다.
- 주어진 트랙잭션이 모든 트랜잭션을 요구하지 않고 블록에 있는지 확인한다.
- 노드는 주어진 트랜잭션이 블록에 포함되어 있는지 확인해야 하고 확인을 할려면 해시를 통해 해야한다. 해시를 통해 해결이 안되면 모든 거래를 다시 요청해야 한다.
머클루트의 역할[편집]
머클루트의 역할은 각 거래 정보(TXID)의 정보들이 변경 되었는지에 대한 유효성을 검사하는 역할을 수행하고 머클루트의 결과 값을 통해 블록 해시의 정보가 구성됨으로 그 블록의 유효성 또한 검사할 수 있다.[6]
장점[편집]
머클트리의 결과값인 머클루트는 두 가지 이유로 블록체인의 효용성 향상에 크게 기여한다. 첫째로 특정 거래내역을 증명하기 위해 모든 거래내역을 검색할 필요가 없다. 블록체인은 시간이 지날수록 블록체인에 저장된 데이터가 늘어나 용량이 커진다면, 거래 처리 속도도 느려질 수밖에 없다. 따라서 모든 거래 내역을 저장하고 있는 풀노드(full node)와 데이터 일부만을 처리해 보관하는 라이트 노드(light node)를 분리해 거래 처리 속도를 높이는 방법을 선택하는 블록체인도 있다.[7]
머클루트가 바로 이 라이트 노드와 같은 역할을 해준다. 머클루트값만 알면 최소한의 정보만으로도 필요한 정보를 블록에서 가져올 수 있다. 블록체인 네트워크 용량 중 큰 부분을 차지하고 있는 거래내역을 조회하지 않고 32바이트에 불과한 값 하나로 거래내역 검증을 간편하고 확실하게 할 수 있기 때문에 사양이 낮은 기기들의 네트워크 접근성이 높아지는 동시에 탈중앙화를 통한 네트워크 안정성이 향상된다.[1]
둘째로 모든 거래내역들이 합하여 해시화된 값이 머클루트이기 때문에 하나의 거래내역에 작은 변화가 생기더라도 상위 해시값 모두가 변하게 된다. 따라서 특정 거래 내역을 확인하기 위해 모든 거래내역을 일일이 검사해야 하는 번거로움을 줄일 수 있다.[7] 또한 거래내역을 위변조하려는 잘못된 해시값이 검출되는 경우 네트워크 접속을 거부할 수 있다. 모든 거래내역이 합쳐져 하나의 해시값으로 나타낸 것이 머클루트이기 때문에 기존 거래 내역 일부에 작은 변화가 있기만 해도 상위 해시값이 모두 변환되기 때문이다.[7] 네트워크의 접근성은 높아졌지만 동시에 보안성도 높아지는 일석이조의 효과가 있다.[1]
문제점[편집]
블록에 포함돨 트랜잭션들의 머클루트를 계산하여 블록 헤더에 넣고 블록을 생성한다. 다른 풀 노드들은 블록 헤더의 머클루트가 스스로 계산한 머클 루트와 같은지 비교하여 해당 블록의 유효성을 검사합니다. 머클루트는 세부적인 구현에서 약간씩 차이가 나는데, 각 라운드의 해시가 홀수 개이면 마지막 해시를 한 번 중복해서 넣는 방식으로 짝수로 만들고 계산한다. 일례로 1 2 3 해시의 머클루트를 계산하기 위해서는 1 2 해시를 합쳐서 A를 만들고 남은 해시가 홀수 개니 3을 하나 더 추가해서 3 3 해시를 합쳐서 B를 만드는 방식이다. 그런 다음 A B를 합쳐서 해시를 계산하면 머클루트가 나온다. 그런데 이런 방식으로 머클루트를 만들면 트랙잰션을 중복해서 넣는 방식으로 머클루트가 같은 브록을 쉽게 만들어 낼 수 있는 문제가 있다. 예를 들어 1 2 3 4 5 6 해시의 머클루트가 A라고 하면 5 6 해시를 중복해서 한 번 더 넣은 1 2 3 4 5 6 5 6의 머클루트도 A가 됩니다. 다음 라운드에서 F가 하나인 것과 F가 두 개인 것이 해시 값이 C로 동일하기 때문이다. 누군가가 고의로 머클루트는 같지만 validation이 실패하는 블록을 고의로 보내게 되면, 이 블록을 받은 노드는 이후 정상적인 블록을 invalid하다고 판단하게 되므로 심각한 DOS공격이 가능하다. [8]
각주[편집]
- ↑ 1.0 1.1 1.2 업비트, 〈암호화폐 필수용어, 머클루트〉, 《일분》, 2018-08-10
- ↑ yahweh87, 〈# 4 – 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의〉, 《스팀잇》
- ↑ easyblockchain, 〈쉽게 설명하는 블록체인 : 머클트리(Merkle Trees)란〉, 《뱅크샐러드》, 2018-07-30
- ↑ 4.0 4.1 〈Ralph Merkle〉, 《위키백과》
- ↑ Jake Frankenfield, 〈머클 루트(Cryptocurrency)〉, 《Investopedia》2018-03-16
- ↑ 어미새, 〈머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의〉, 《네이버 블로그》 2018-02-08
- ↑ 7.0 7.1 7.2 윤해리 기자, 〈(코린이 상식백과) 블록체인에는 머클트리가 있다?〉, 《데일리토큰》, 2018-12-03
- ↑ 이안, 〈비트코인 머클 트리 알고리즘의 취약점과 우회방안.〉, 《네이버 블로그》 2017-11-30
참고자료[편집]
- 업비트, 〈암호화폐 필수용어, 머클루트〉, 《일분》, 2018-08-10
- 윤해리 기자, 〈(코린이 상식백과) 블록체인에는 머클트리가 있다?〉, 《데일리토큰》, 2018-12-03
- yahweh87, 〈# 4 – 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의〉, 《스팀잇》
- easyblockchain, 〈쉽게 설명하는 블록체인 : 머클트리(Merkle Trees)란〉, 《뱅크샐러드》, 2018-07-30
- jsralph, 〈쉽게 설명하는 블록체인, 머클트리(Merkle Trees)란 뭔가요?〉, 《스팀잇》
- 불곰, 〈머클트리(merkle tree)란?〉, 《티스토리》, 2018-07-09
- Skkrypto, 〈Bitcoin#5: 풀(Pool)과 머클 루트〉, 《브런치》, 2018-11-01
- 니르바나, 〈머클루트 구하기〉, 《티스토리》
- Mr.Park, 〈해시함수와 머클루트&머클트리〉, 《미디엄》, 2018-03-21
- 이안, 〈비트코인 머클 트리 알고리즘의 취약점과 우회방안.〉, 《네이버 블로그》 2017-11-30
- Jake Frankenfield, 〈머클 루트(Cryptocurrency)〉, 《Investopedia》2018-03-16
- Gbig, 〈What is the purpose of the merkle root?〉, 《Reddit》 2018-06-03
- 어미새, 〈머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의〉, 《네이버 블로그》 2018-02-08
- 〈Ralph Merkle〉, 《위키백과》