ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 블록체인이란? 비트코인 #1
    Study/BlockChain 2021. 7. 3. 14:32

    1. 해시함수

    비트코인에 대해 알아보기 전에 해시함수에 대해 알아야합니다. 해시함수는 위키피디아에 따르면 해시함수의 정의는

     

    "임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬 또는 간단하게 해시라고 한다."

     

    그럼 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑한다고하는데 어떤 규칙을 만족해야할까? 해시함수는 보안을 위해 아래 3가지 규칙을 만족해야 한다.

     

    1. collision-resistant

    2. one-way

    3. puzzle-friendly

     

    collision-resistant 부터 살펴보도록하겠다. 해시함수는 고정된 길이의 데이터로 매핑한다고 하였으니 output의 개수는 무한대가 아닌 한정적일것이다. 그럼 Input으로 가능한 데이터의 개수가 output보다 많을테니 a != b BUT H(a) = H(b) 인 경우가 있을것이다. 이 경우를 collision이라 하는데 collision-resistant 는 collision을 계산하는것이 불가능에 가까운것을 의미한다. 만약 비밀번호를 DB에 저장할 때 collision-resistant하지 않은 해시함수를 사용한다면 db에 저장된 해시값을 보고 같은 해시값을 가지는 어떠한 값을 추론해 타인이 유저인증이 가능할 것이다.

     

    one-way란  data -> H(data) 방향으로 일방향적이어야 한다는 의미이다. 즉 어떠한 해시값을 보고 그 원형값의 추론이 불가능한것을 의미한다. 

     

    puzzle-friendly은  임의의 값 n, 그리고 k비트인 y가 있다고 가정해보겠습니다. 이때  H(n|x) = y 라고 할 때, n과 y가 주어졌을때 x값을 찾기 아주 어려운것, 시간복잡도가 O(2k)보다 작은경우를 의미합니다. 이렇게 정의만 봐서는 무슨 의미인지 이해가 가지 않는데요, 이 개념은 나중에 비트코인 채굴때 재등장하므로 그때 자세히 다루도록 하겠습니다.

     

     

     

    2. 해시포인터

     

    비트코인은 거래내용 즉 Transaction을 Merkle Tree 구조로 구성한 다음 Root Node의 해시값을 블록헤더에 넣어서 하나의 블록을 구성합니다. 각 블록은 Linked list로 연결되어있는 구조로 이루어져 있습니다. 아래 이미지는 블록체인 구조를 나타내는 이미지로, 이제 각각 세부적으로 어떻게 구현이 되어있는지 살펴보도록 하겠습니다.

    이미지 출처 - 해시넷위키

     

    해시포인터란 어떠한 데이터의 해시값과 포인터값 모두 지닌것을 의미합니다. 블록체인같은 경우 이전블록의 해시포인터를 헤더에 포함시켜 저장합니다. 근데 이전 블록의 해시포인터를 굳이 저장하는 이유는 무엇일까요? 바로 이전블록의 정보를 손쉽게 찾을수도 있고 블록의 위조를 감지할 수 있기 때문입니다.

     

     

     

    블록의 위조를 감지 할 수있다는 점을 자세히 보도록 하겠습니다. 오른쪽 이미지처럼 가장 왼쪽에 있는 블록의 데이터를 위조하면 어떻게 될까요?

     

     

     

    그럼 오른쪽 이미지처럼 위조한 블록보다 최신 블록들의 모든 해시포인터 값이 바뀌게 됩니다. 그래서 최신블록에서 해시포인터를 따라 이전블록으로 가면서 어디 블록에서 위조가 일어났는지 손쉽게 찾을 수 있습니다. 블록체인은 모든 채굴자가 블록을 공유하니 사실상 위조는 불가능하게 됩니다.

     

     

     

     

     

    그럼 이번에는 Merkle Tree 구조에 대해 알아보도록 하겠습니다. 블록체인은 거래기록을 transaction이라 부르고 이 transaction은 블록안에서 Merkle Tree 구조로 저장됩니다. Merkle Tree는 말 그대로 tree 자료구조입니다. 그런데 tree의 leaf 노드들의 제외하고는 모두 해시값을 저장한다는 특징이 있습니다. 아래 이미지 처럼 leaf node는 각 transaction 데이터들 입니다. 각 데이터들은 해시함수를 통해 해시값으로 변하고 이 해시값들을 해시 함수를 통해 부모노드를 만들는 방식으로 tree를 구성합니다. list대신 tree 구조를 사용함으로써 append, update, proof 연산을 모두 O(logN) 복잡도로 항상 마칠 수 있는 장점을 가져갑니다.

     

     

     

    3. 디지털 서명

    비트코인에서 신원확인은 비대칭 암호화 방식으로 이루어집니다. 유저 A는 어떠한 데이터에 개인키로 서명을하고, 다른 유저들은 A의 공개키를 가지고 서명된 데이터를 분석하여 데이터의 진위여부를 가릴수있게됩니다.

    비트코인 같은 경우 디지털 서명 알고리즘은 ECDSA를 사용합니다. Elliptic Curve Digital Signature Algorithm으로 타원곡선을 이용한 전자서명 알고리즘으로 자세히 알고싶으신분은 아래 링크를 참고바랍니다.

    https://ocw.snu.ac.kr/sites/default/files/NOTE/1c-dlp-ecdsa.pdf 

     

    비트코인에서는 유저의 신원을 어떻게 나타낼까요? 은행같은경우 사용자의 신원은 이름, 주민번호, 전화번호로 이루어지겠지만 비트코인같은 경우는 유저의 공개키를 개인주소로 사용하여 신원을 나타냅니다. 그러나 비트코인의 공개키는 512bit로 너무~나도 길기때문에 해시함수를 통해 160bit+α 로 압축하여 이 값을 주소로 사용합니다.

     

     

     

     

     
     
     

    'Study > BlockChain' 카테고리의 다른 글

    블록체인이란? 비트코인 #3  (0) 2021.07.05
    블록체인이란? 비트코인 #2  (0) 2021.07.04

    댓글

Designed by Tistory.