일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- geth구현
- 접근제어자
- 솔리디티
- 이더리움
- 블록체인
- vue
- Web
- 블록체인 구조와 이론
- Solidity
- ethereum
- 앵커링
- web3.js
- 클레이튼
- 서비스체인
- blockchain
- 제어자
- Klaytn
- SCN
- 웹
- nodejs
- API
- 프론트엔드
- vue.js
- Geth
- javascript
- Klaytn API Service
- web3
- 프레임워크
- frontend
- kas
- Today
- Total
BloCCat
블록체인? 본문
정의
블록체인(Block Chain)이란 쉽게 말해 블록(관리하는 데이터)을 P2P 방식을 기반으로 체인처럼 서로 연결하여 하나의 데이터 저장 환경을 만드는데 이러한 환경을 블록체인이라 명명한 것.
이런 형태를 우리는 분산 데이터 저장 환경이라고도 하는데 이 환경에서 저장된 데이터는 그 누구도 임의로 수정할 수 없으며 누구나 데이터의 변경을 확인하고 열람할 수 있다.
그래서 블록체인을 분산 컴퓨팅 기술 기반의 데이터 위변조 방지 기술이라 하는 것이고, 가장 신뢰할 수 있는 기술이라 하는 것이다.
*P2P(Peer To Peer) : 동등 계층 간 통신망이라 하며 중앙 서버 없이 컴퓨터와 컴퓨터 간을 연결해줌으로써 파일 전송 같은 시스템에 좋음
*분산화 컴퓨팅 : 인터넷에 연결된 여러 컴퓨터들의 연산 능력을 이용하여, 거대한 연산을 처리하는 시스템.
원리
그렇다면 블록체인은 정확히 어떻게 구현돼있길래 누구도 해킹할 수 없고 누구나 데이터를 확인할 수 있다고 하는 걸까? 또 그 데이터란 정확히 어떤 데이터를 말하는 걸까?
블록체인의 원리를 자세히 살펴보려면 우리는 그 구성요소에 대해 알아야 하고 그중에서도 우선 제일 핵심인 '블록'에 대해 알아야 한다.
앞서 블록체인을 정의하면서 블록은 데이터를 저장하는 곳이라고 설명했다.
블록에 저장되는 데이터란 개인과 개인의 거래 정보, 즉 트랜잭션을 의미한다.
그렇다면 블록에는 트랜잭션 하나만 들어가는가? 당연 아니다.
블록은 데이터를 저장하는 용도로도 쓰이지만 각 블록이 누구의 블록인지, 어떤 블록인지 구분할 수 있는 구분값이 있어야 하며 '블록체인'이라는 환경을 이루기 위해 다른 블록과의 연결고리도 가지고 있어야 한다.
그래서 블록은 구분 값과 연결고리를 포함하는 Header 부분과 개별 데이터인 트랜잭션을 관리하는 Body부분으로 구분한다.
Header 부분을 살펴보면 맨 위에 Hash of the block이 보이는데 이 것이 앞서 말한 블록의 구분 값이 된다.
이 구분값을 어떻게 만드냐면, 밑에 보이는 버전, 이전 블록 해시, 머클 루트, 타임, 난이도 목표, 논스까지
다른 정보인 이 값들을 각 표현식에 맞게 변경한 후 합산하여 SHA256 해시함수를 총해 출력하여 만든다.
이렇게 만들어진 해시값이 블록 해시(Hash of the block)가 되며 블록을 구분하는 구분 값이 되는 것이다.
그렇다면 이 값들을 해킹하여 변경하는 것은 정말 불가능한가?
불가능하다. 그 이유로 이 블록 해시를 만드는 데 사용한 해시 알고리즘을 들 수 있다.
해시 알고리즘을 간단히 설명하면 몇 byte의 글이든 이 알고리즘을 거쳐 동일한 byte의 코드로 변환시키는 것인데,
이 말은 즉슨 hello world를 hello worlds라고 s만 붙여도 코드 전체가 바뀌기 때문에 그 변화를 누구나 쉽게 그 변화를 파악할 수 있다는 뜻이다.
머클 루트 또한 이 해시 알고리즘을 사용한 값인데 그 사용대상은 body부분의 트랜잭션들이 된다.
각 트랜잭션과 가까운 노드끼리 쌍을 지어 해시 값을 구하여 최종적으로 구해진 해시값이 바로 머클 루트다
고작 이 이유만으로 해킹 불가능하고 신뢰 가능하단 뜻은 아니다. 100% 신뢰성이 가능한 부분은 바로 블록체인의 '체인'이란 단어가 그 이유를 설명한다.
* Time : 블록의 대략적인 생성 시간(1970년 1월 1일 자정부터 경과한 시간을 초단위로 계산한 값)
bits : 난이도 해시 목푯값 지표 (채굴 과정에서 쓰이는 단어)
Nonce : 블록을 만드는 과정에서 해시 값을 구할 때 필요한 재료
앞서 말한 블록의 구분 값은 블록 해시라 설명했다. 그렇다면 연결고리(체인)는 무엇이 되는가?
바로 이전 블록 해시가 된다.
블록체인의 구조는 자료구조 중 하나인 링크드 리스트 형태라고 말할 수 있다.
링크드 리스트 구조는 각 노드들을 연결함에 있어 반드시 연결할 노드의 '포인터'가 필요하다.
이 이전 블록 해시가 바로 그 '포인터'역할을 함으로써 블록이 생성될 때 이전 블록의 정보를 참조하게 되고 체인형태로 연결될 수 있도록 하는 것이다.
이런 식으로 모두 연결된, 해시로 이루어진 블록들끼리'만' 연결된다면 과연 이를 해킹하는 게 가능할까?
실제 거래를 예로 들어보자면 우리는 누군가에게 입금을 하거나 나의 돈을 출금하기 위해서는 반드시 은행
즉 '중앙 관리자, 제삼자'를 거쳐야 했지만 블록체인 구조에서의 거래는 이러한 제삼자의 개입이 없다.
만약 누군가가 실제 은행을 해킹한다면 고객들의 개인정보부터 거래내역 모두를 위조할 수 있지만
블록체인에서는 사용자 한 명 한 명이 은행이 되고 거래가 발생하게 되면 그 트랜잭션이 블록에 들어가고 블록이 생성돼야 거래가 완료되는데 무조건적으로 블록이 생기는 것이 아니다.
거래가 발생하여 생긴 거래내역, 즉 트랜잭션은 제일 가까운 노드(블록체인 참여자)부터 다른 노드에게까지 전파하면서 이 거래가 타당한 거래인지, 올바른 서명이 있는지 승인 과정을 거쳐야만 블록이 생성되고 연결된다.
승인되지 않은 트랜잭션은 전파되지 않고 바로 폐기되기 때문에 거래 자체가 무효가 돼버린다.
따라서 블록체인은 말 그대로 신뢰성으로 똘똘 뭉친 네트워크라 볼 수 있다.
실제로 비트코인을 공격하기위해 슈퍼컴퓨터 전세계 랭킹1위~50위가 힘을합쳐도 실패했고 블록체인은 시간이 지날수록 그 블록의 양이 증가하기 때문에 현실적으로 공격 불가능한 상태라 볼 수 있다.
참고링크
위키백과 https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8
어미새와 아기새가 꿈구는 블록체인 https://withbabybird.tistory.com/8
블록체인 인사이드 https://brunch.co.kr/@mobiinside/1186
'Study > 블록체인' 카테고리의 다른 글
블록체인 형성의 5단계 (0) | 2021.11.17 |
---|---|
합의 알고리즘 (0) | 2021.03.03 |
Public / Private / Hybrid (0) | 2020.08.21 |
SHA-256? (0) | 2020.08.18 |
해시함수? (0) | 2020.08.13 |