(3) 블록체인 심화 – 기술 용어(해시, 머클트리, 공개키, 개인키)

지난 포스팅들을 통해서 블록체인의 개념과 원리에 대해서 알아봤어요. 이번 포스팅에서는 블록체인 기술을 이해하는데 꼭 필요한 기술 용어들에 대해서 알아볼거에요. 이를 이해해야 블록체인에 대해서 더 깊게 이해할 수 있어요.

해시(hash)

해시(hash) 개념 이해하기

사전적 정의는 ‘데이터를 고정된 크기의 고유한 값으로 변환하는 과정 또는 그 결과값’ 이에요. 특정한 값을 ‘해시 함수’에 넣으면 ‘해시값’이 나온다고 표현할 수 있어요. 여기서 해시 함수는 사용되는 알고리즘에 따라 종류가 다양하고, 사용된 해시 알고리즘이 다르면 값도 다르게 나와요.

마법의 터널이 있다고 상상해주세요. 이 마법의 터널을 지나면 값이 변하고, 고유한 값이 나와요. 해시는 ‘마법의 터널’ 같은 거에요. 마법의 터널이 종류는 다양하게 존재하겠지만 원리는 모두 똑같아요. 이 터널을 지나면 고유한 값이 나오는거죠.

실제로 어떠한 값을 해시 함수에 넣고, 결과로 나온 해시값을 볼게요.

값: hello

MD5라는 마법의 터널을 지나면 나오는 값: 5d41402abc4b2a76b9719d911017c592

SHA1라는 마법의 터널을 지나면 나오는 값: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

입력된 정보가 같다면 동일한 마법의 터널을 지나면 항상 동일한 값이 나와요. hello 를 MD5라는 터널에 1000번 넣으면 100번 모두 5d41402abc4b2a76b9719d911017c592 라는 값이 나오는거에요.

해시(hash)의 특성

해시의 특성에 대해서 알아 볼게요.

결정론적(Deterministic)

동일한 입력값은 항상 동일한 해시 값을 출력한다는 특성이에요. 위 예시에서 hello 라는 값을 동일한 마법의 터널에 1000번 넣으면 1000번 모두 동일한 값이 나온다고 말씀드렸던 특성이에요.

고속성(Fast Computation)

해시 함수의 계산은 빨라야해요. 입력의 크기가 아무리 커도 해시값이 느리게 나온다면 사용이 어려워요.

충돌 저항성(Collision Resistance)

마법의 터널을 지나면 ‘고유한’ 값이 나온다고 말씀 드렸어요. hello 를 넣으면 나오는 값은 그 어떤 다른 값을 넣어도 나오면 안되는거에요. 다시 말하면 hello1 을 넣어서 나온 값과 hello2를 넣어서 나온 값이 같으면 ‘충돌’이 발생한 것이고 고유하지 않다는 것이기 때문에 해시를 신뢰할 수 없게 되어요.

왜냐하면 해시의 사용 목적은 ‘고유함’이 매우 중요하기 때문이에요. 그래서 해시는 충돌할 가능성이 매우 낮다는 특성이 있어요.

역산 불가능성(Pre-image Resistance)

해시 값을 보고 역산을 해서 입력 값을 알아내는 것이 어려워야해요. 위 예시에서 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d 라는 값만 보고 ‘hello 를 입력했구나’ 라고 추론할 수 없어야해요. 입력값 -> 해시값의 흐름에서 반대로 역산이 불가능한 구조여야해요.

민감성(Sensitivity)

입력값이 약간이라도 달라지면 결과값이 완전히 바뀌어야하는 특성이에요. 역산 불가능성을 설명 드렸는데 같은 맥락이에요. 즉, hello1과 hello2의 해시값이 유사하면 입력값을 계속해서 바꿔가면서 입력 값을 추론해가며 찾을 수 있겠죠? 그러니 입력값이 조금이라도 다르면 결과값이 완전히 달라야만해요.

해시(hash) 정리

딱 알아둬야할 해시의 개념과 특징만 뽑아서 정리해보면 아래와 같아요. 블록체인을 이해하기 위해서 알아야할 해시의 개념은 이것이 전부에요.

  • 해시는 동일한 입력값에 대해서 동일한 ‘고유값’으로 변환 시키는 마법의 터널이다.
    • ‘고유값’ 이란 말 그대로 ‘고유’하다는 뜻이다. 독립적이고 유일하다.
    • 마법의 터널은 종류가 다양하다(해시 알고리즘의 종류는 여럿이다)
  • 이 터널은 하나의 방향으로만 통과할 수 있다.(거슬러 돌아갈 수 없다)

머클트리(Merkle Tree) 🌳

머클트리(Merkle Tree) 개념 이해하기

머클트리는 ‘피라미드 형태의 계산방식’ 이라고 이해하면 편해요. 다시 강조 할게요. ‘피라미드 형태의 계산방식’ 이에요. 누군가 머클트리에 대해서 질문을 한다면 한 마디로 ‘피라미드 형태의 계산방식’이라고 말씀하시면 된다고 생각해요.

조금 어렵게 설명한다면 ‘데이터 무결성을 효율적으로 검증할 수 있도록 설계된 트리 구조’ 라고 할 수 있어요. 비유를 통해서 알아 볼게요.

1반부터 4반까지 총 4개의 학급이 있다고 가정 할게요. 전체 학급의 총점을 구하는 방식이 여러가지 있겠지만 피라미드 형식으로 구해볼 수 있을 것 같아요. 1반+2반의 총점을 구하고, 3반+4반의 총점을 구한뒤 이 둘을 더하면 1반부터 4반 전체의 총점을 구할 수 있어요. 이 예시에서 총 합산 점수를 머클루트라고 불러요.

만약 여기서 1반의 한 학생의 점수가 잘못 채점 되었다는 것이 알려지면 어떻게 될까요? 기존에 계산된 1반의 총점이 사실 잘못된 점수였고, 결국 머클루트 역시 잘못된 점수일거에요. 다 다시 계산해야 제대로된 점수가 나올거에요.

간단히 머클트리와 머클루트에 대해서 알아 보았어요.

머클트리(Merkle Tree)의 특성

머클트리는 데이터위 위조, 변조를 쉽게 알 수 있게 해준다는 특성이 있어요. 위의 예시에서 8개의 반으로 늘려볼게요. 그러면 처음 계산은 1반+2반, 3반+4반, 5반+6반, 7반+8반 이겠죠? 결국 최종 합산된 머클루트 값이 나올거에요. 하나의 반에 30명이 있다고 한다면 8개의 반이니까 총 240명의 점수가 머클루트로 계산될거에요. 모두가 100점을 받으면 24000점일거에요.

머클루트가 22453점이라고 가정해볼게요. 시험은 끝이 났고, 모든 시험지는 채점이 된 상태고 이미 전교생이 머클루트가 22453점이라는 것을 알고 있어요.

이 때, 한 명이 시험 점수를 조작하면 어떻게 될까요? 50점을 받은 누군가가 본인의 시험지를 조작해서 100점으로 만들었다고 가정해볼게요. 그러면 1반+2반,…. 의 방식에서 이미 기존의 값과 달라질 것이고 결국 머클루트 값이 달라질 거에요.

이미 전교생이 머클루트 값을 22453점으로 알고 있는 상황인데 머클루트 값이 달라졌다면 240명의 점수중 무엇인가가 잘못되었다는 것을 알 수 있게 되겠죠? 이렇듯 머클트리를 사용한다면 데이터위 위조, 변조를 쉽게 알 수 있어요.

해시(hash)와 머클트리(Merkle Tree) 그리고 블록체인

이전 포스팅에서 블록체인의 블록에는 많은 데이터가 저장되어 있다고 말씀드렸어요. 블록체인에서는 하나의 블록에 담긴 데이터를 기반으로 머클루트 값을 계산해요. 덕분에 하나의 블록에 담긴 어떠한 데이터라도 변경되면 머클루트 값이 바뀌어버리고, 그 블록은 신뢰할 수 없는 블록이 되는 거에요.

나중에 자세히 다룰 예정이지만 이번에 해시와 머클트리 개념에 대한 설명을 위해서 블록체인의 머클트리에 대해서 잠깐 다뤄볼게요.

이미 말씀 드렸듯이 블록에는 여러 데이터가 저장되어요. 하나의 블록에는 여러 거래(Transaction) 데이터가 저장될 수 있어요. 여기서 거래란 ‘A가 B에게 100원을 보냈다’ 와 같은 사실을 의미해요.

거래 데이터가 블록에 저장되는 과정 📝

예시로 한 블록에 이런 거래들이 있다고 해볼게요:

1번 거래: “민수가 지수에게 100원을 보냄”
2번 거래: “영희가 철수에게 200원을 보냄”
3번 거래: “지수가 영희에게 150원을 보냄”
4번 거래: “철수가 민수에게 300원을 보냄”

이 거래들이 어떻게 정리될까요? 🤔

1. 먼저 각 거래를 해시로 만들어요(거래를 해시로 만드는 과정은 나중에 상세하게 다룰 예정이에요. 여기서는 거래를 해시로 만들 수 있다고만 이해하시면 충분해요.)

1번 거래 → abc123 (해시값)
2번 거래 → def456 (해시값)
3번 거래 → ghi789 (해시값)
4번 거래 → jkl012 (해시값)

2. 해시값들로 머클트리를 만들어요(ex. 1번 거래 해시값 + 2번 거래 해시값)

결과적으로 하나의 블록은 하나의 머클루트 값을 가지게 되어요. 만약 여기서 하나의 거래가 조작되면 어떻게 될까요? 아까 해시(hash)의 특성으로 고유한 값이 나온다고 말씀드렸어요. 특정 거래에서 금액이 조작 된다던가, 수취인이 조작되면 그 거래의 해시값이 달라질거에요. 그러면 결국 그 거래와 짝을 이룬 거래로 만드는 해시값이 달라질거고, 결과적으로 머클루트가 달라져요.

특정 블록의 머클루트가 다들 abcde 라고 알고 있었는데, abcff 로 바뀌었다면 그 블록에 저장된 많은 거래 데이터중 최소 한 개라도 조작이 되었다는 것을 의미하죠. 그렇기에 그 블록은 신뢰할 수 없게 되는거에요.

공개키(Public Key)와 개인키(Private Key)

 

이번 포스팅에서는 해시, 머클트리, 공개키, 개인키에 대해서 알아봤어요. 이어서 다음 포스팅에서도 블록체인을 이해하기 위한 기술 용어들을 다뤄볼게요.