본문 바로가기
Investment/Blockchain, Bitcoin

알기쉬운 블록체인 9강 : 거래 정보의 구조

by YOU_IN 2021. 7. 25.

 

안녕하세요! :-)

 

이번 강의에서는 블록체인에서 

정말 중요한 개념인

'해시 함수'에 대한 강의노트입니다!

 

9강은 내용이 굉장히 길어요!

그래서 정리할 때도 조금 힘들었다능 ..

 

그럼 오늘도 블록체인 공부에

도움이 되셨으면 좋겠습니다!

 

 

 


 

제 9강 거래 정보의 구조

 

출처 : https://www.bbva.com/en/bbva-leads-the-way-in-the-use-of-blockchain-according-to-forbes/

 


 

9-1. 거래 정보의 구성

 

◈ 블록체인이 풀어야 할 문제

 

• 도서관의 도서 일람표 카드
- 도서관에 있는 모든 책들이 등록되어 있다.
- 카드 한장에 분류 방식에 따라 저자 일람표, 제목 일람표, 출판 일자 순으로 구분된다.
- 카드 한장에 한 권의 책에 대한 정보가 들어있다. (저자 이름, 책 제목, 출판일, 책의 위치, 책의 식별자-고유번호)

• 블록체인의 목표는 전체 거래 이력을 순서대로 유지하는 것

 

• 해결해야 할 문제
- 거래 정보를 발생 순서로 유지
- 변경을 바로 감지하여 조작이나 위조 방지

 

• 해결 방법
- 거래 정보의 도서관 만들기
- 거래가 추가된 순서대로 정렬
- 모든 변경을 감지할 수 있도록 해시 값을 이용해 연결
*변경 : 일람표, 개별 거래 정보 등

 

◈ 책의 변환

 

• 책의 구조
- 내용을 담고있고 순서대로 정렬되어 있고 페이지의 연결이 있다.
1) 내용 : 각 페이지 단위로 내용을 보관
2) 정렬 : 책의 모든 페이지, 각 페이지 내의 문장
3) 페이지의 연결 : 물리적으로 책에 연결, 논리적으로 내용과 페이지 번호로 연결

 

• 책의 변환 과정
변환 1) 페이지 의존성 확보
- 페이지 번호와 내용으로 구성


* 페이지 번호 : 페이지의 누락이나 중복을 쉽게 확인
- [페이지 번호가 1씩 증가하는 자연수의 경우] 41->42 …
현재 페이지와 앞, 뒤 페이지간에는 종속 관계가 형성되어 있다. 이러한 종속 관계를 이용하면 누락, 중복을 쉽게 확인할 수 있다.

변환 2) 페이지의 연결
- 페이지 번호에 규칙성이 없는 경우 페이지의 누락이나 중복을 쉽게 확인 위해서 특별한 방법이 필요 -> 각 페이지 별로 현재 페이지뿐만 아니라 앞 페이지의 번호도 함께 가지고 있는 것.

변환3) 페이지의 내용을 아웃 소싱
- 내용을 페이지 밖으로 둠으로써 책은 오로지 순서 유지에 집중
- 책 : 일람표 / 내용 : 고유 참조 값으로 식별되는 별도의 페이지에 저장


- 이 그림에서 누군가 내용의 일부롤 위조하면 어떻게 막을 수 있을까? 위조하는 사람은 내용을 바꾸고 변경된 내용의 참조값을 넣으면 끝이다. 이를 위해 변환4.

변환4) 페이지 번호를 참조값으로 대체


- 참조값이 과연 의미가 있는가? 즉, 페이지의 내용과 순서가 바뀔 때 바로 알아낼 수 있는 기능이 있는지, 이러한 기능이 있다면 참조값을 어떻게 만들어야 하는지? 이를 위해 변환5.

변환5) 참조값 생성
- www.blockchain.basics.com/Hashing.html


- input의 해시값은 길이는 일정하다. 이를 통해 페이지 내용, 페이지 번호 등을 하나의 해시값을 참조값으로 쓰며 위조를 방지.
- 페이지 내용, 순서 변경이 불가하다. 즉, 참조값을 이용해서 각 페이지에 이전 페이지가 연결되어 있기 때문이다.

변환6) 파본
- 각 페이지의 포함 내용은 자기 페이지 참조값, 앞 페이지의 참조값, 내용 페이지의 참조 값 => 이 3가지를 가지고 있는게 하나의 페이지 => 제본된 상태일 필요가 없음. 즉, 파본 후 페이지들을 섞어도 순서 정보가 유지됨
- 순서 일람표의 마지막 페이지만 알고 있으면 전체 페이지들의 순서와 연결 구조를 알 수 있음

 

 

 

 

◈ 블록체인-데이터-구조

 

• 변환 전후의 책 비교

 


 

9-2. 거래 정보의 추가

 

◈ Hash 함수

 

• 블록체인을 이해하기 위한 두 가지 질문
1) 정보의 대조
- 블록체인이 가지고 있는 거래 정보를 어떻게 대조할 수 있는가?
- 컴퓨터가 대신해서 처리하고 있지만 비교해야 할 양이 많다면 시간과 비용이 많이 든다.
- 효과적인 방법이 필요하기 때문에 간단한 비교로 대상이 되는 전체 정보가 같은지 다른지 쉽게 판단이 되어야 한다.
2) 체인의 구성 요소
- 참조라는 것은 인터넷에서 url, 프로그래밍 언어에서 포인트(메모리에 대한 주소)
- 블록체인에서도 이전 블록에 대한 참조. 즉, 주소 역할이 들어가야 하는게 그것이 뭘까?
=> hash

 

• Hash 함수의 역할
1) 정보의 요약
- 많은 양의 데이터를 작은 데이터로 바꾼다. 압축된 정보를 가지고 원본을 재생하는 것은 아니다.
2) 정보의 확인
- 두 개의 정보가 원래 같은값이었는지 확인할 수 있다. 같은 input이 들어갔을 때 항상 같은 값이 나온다.
- 큰 데이터를 비교하지 않더라도 해시값을 비교해서 원본 비교를 한다.
3) 정보의 연결
- 페이지 번호(자연수) 대신 해시값을 썼을 때 앞 페이지 전체에 대한 정보의 요약이기 때문에 조작을 했을 때 쉽게 찾아낼 수 있다.

 

• Hash 함수의 성질
1) 입력이 같으면 출력도 동일
2) 입력이 조금만 달라도 출력이 (많이) 달라짐
3) 출력으로부터 입력을 추정할 수 없음

◈ Hashing Patterns

 

• Hash 함수 적용 방법
1) 독립 hashing
- 서로 다른 date를 독립적으로 hashing
- 가장 기본적인 hashing 방법
- 해시 함수를 결합하는 과정을 거치지 않고 단순히 해시함수를 한 번씩만 거치는 방법

2) 반복 hashing
- hashing의 결과 값을 다시 hashing

3) 결합 hashing
- date를 결합한 다음 hashing

4) 순차적 hashing
- 여러 단계에 걸쳐 hash값가 data를 결합하여 hashing


- 결합 hashing과 반복 hashing이 동시에 일어나는 방법

5) 계층적 hashing
- 계층적으로 hashing을 적용함으로써 date를 압축


- 해시트리의 루트가 된다.
- 결합 hashing과 반복 hashing이 동시에 일어나는 방법이지만 순차적 hashing은 주어진 데이터를 하나씩 차례로 기존 결과와 결합하면서 hashing을 하는 반면 계층적 hashing은 각가의 데이터를 독립적으로 hashing하고 해시값을 두개씩 묶어서 결합해서 hashing한다. hashing값이 처음 만들어진 값에서 반으로 줄게 된다. 점점 hashing을 할수록 금방 1개로 줄어든다.
- 이런 방식으로 블록체인에서 머클트리를 구성한다.

 

 

 

 

◈ 거래 정보의 저장

 

• Transaction 저장 방법
- transaction들을 모아 Merkle tree로 구성
- Merkel tree의 root에 있는 hash 값을 block header에 기록

- 블록 연결을 위해 첫번째 블록 헤더를 해시를 해서 해시값을 두번째 헤더에 집어넣게 된다. 이전 블록과 그 블록에서 가지고 있는 해시값 2개를 가지고 있다. 맨 마지막에 만들어진 블록에 대한 블록헤더의 해시값을 가지고 있다.

 


 

9-3. 거래 정보의 변경

 

◈ 블록 쌓기

 

• 뜨개질과 유사한 블록 쌓기
- 블록체인-데이터-구조의 맨 끝에 새 블록을 추가하는 것은 쉬움
- 중간에 있는 블록의 내용을 수정하는 것은 거의 불가능
- 중간 블록의 내용 변경을 감지하고, 원본으로 되돌리는 메커니즘을 포함.

 

• 최초의 블록체인-데이터-구조
- 블록 당 2개의 거래 정보를 수용하는 경우

 

• 새 블록의 추가 과정
1) 처래할 거래 정보들을 모아 새로운 머클트리 생성


* R34 : 머클트리 루트

2) 이전 블록 헤더를 가리키는 hash 참조와 머클트리 루트를 포함하는 블록 헤더 생성


* B1 : 이전 블록헤더를 가리키는 해시값

3) 새로운 블록의 헤더를 가리키는 hash 참조를 계산하고, 블록체인-데이터-구조의 참조를 이것(B2)으로 변경

 

◈ 변경의 감지

 

• 블록체인-데이터-구조의 일부가 변경될 경우
1) 거래 정보의 내용이 변경되면
-> 그 거래 정보의 hash 참조와 거래 정보가 불일치
2) 거래 정보의 hash 참조를 변경하면
-> 머클트리의 root와 불일치

3) 머클트리의 root를 변경하면
-> 다음 블록 안에 있는 이전 블록의 hash 참조와 불일치

4) 다음 블록 안에 있는 이전 블록의 hash 참조를 변경하면
-> 블록체인-데이터-구조의 참조와 불일치

=> 거래 정보의 일부가 변경되면 이를 포함한 블록은 물론이고, 그 이후에 연결된 모든 블록을 수정해야 한다. 따라서 일관성과 무결성 유지가 가능하다.

 

• 의도한 변경 vs. 의도하지 않은 변경
- 블록체인-데이터-구조는 내용의 변경 여부를 쉽고 빠르게 감지
- 변경 여부 확인에 hash 참조를 사용
- hash 참조값으로는 의도된 변경인지는 확인 불가
- 하나의 hash참조라도 일치하지 않으면 누가 어떤 의도로 변경했는지와 상관 없이 무효화

 


9강 강의 노트 끝-!

감사합니다 :)

*사진의 모든 출처 : http://www.kmooc.kr/

댓글