블록체인(Block Chain) - 블록체인(BlockChain)

Jeenie·2022년 8월 4일
4
post-thumbnail

이 포스트는 블록체인 기술이란 무엇인가요? 최종 설명과,
블록체인의 정의와 기술 “비전공자도 이해하는 기본적 이해”,
가상화폐 #1 - 합의 문제(Consensus Problem), 합의 알고리즘
를 요약하여 정리한 글입니다.

블록체인

1. 블록체인이란?

block + chain

데이터를 저장하는 단위인 block + 체인의 합성어

데이터가 블록에 담겨있고 블록들이 해시를 통해 연결되어 있는 특별한 형태의 데이터베이스

  • 블록체인은 특정 거래가 기록되면 이것이 기록된 장부를 만들어 블록에 담아 그 블록을 해시 알고리즘 을 활용해 체인처럼 모든 블록들이 연결된 분산 저장 알고리즘 이다.

  • 블록 생성 과정에서 블록체인 네트워크를 구성하는 모든 노드들이 새로 생기는 블록을 검증 하고, 모두 합의가 되었을 때 비로소 블록이 생성 된다.

  • 그렇게 생성된 블록이 기존의 블록+체인으로 연결된 시스템에 연결된다.

  • 이러한 동시검증 방식 으로 인해 데이터의 위변조가 불가능

거래내역을 적은 종이는 거래내역이 어떤 순서대로 만들어졌는지 알아내기 힘들다.
하지만 블록은 해시함수를 사용해서 순서를 알 수 있다.

이러한 기반에서 새로 생겨난 생태계와 그 경제 모델 등을 Web 3 생태계 라고 한다.

2. 블록체인의 특성

  1. 데이터는 시간에 따라 차례로 블록이라는 구조 안에 저장된다.

  2. 블록에 기록된 데이터는 블록체인에 참여한 모두가 열람할 수 있다.

  3. 블록체인은 Append only

    • 이 데이터베이스에 추가만 가능.
    • 데이터가 저장된 다음부터는 이를 수정하거나 삭제하는 것이 실질적으로 불가능하다
  4. 블록체인은 탈중앙화가 가능하며, 데이터 위변조가 불가능하다

    • 특정 개인이 DB를 관리할 수 없음. 모두가 DB의 복제본을 가지고 있기 때문에, 거짓말이 통하지 않음.
    • 블록체인 상의 데이터가 중앙화된 하나의 기관이 아닌, 블록체인 참여자의 컴퓨터에 모두 분산되어 저장되기 때문.
    • 분산원장(Distributed Ledger)라고도 한다. (원장 : 참여자 각각의 컴퓨터)

분산된 DB이기 때문에 크립토를 감시하거나, 통제하기 힘들다.

너무 많은 사람들이 비트코인 노드를 돌리고 있고, 모두가 정확하게 동일한 DB 복제본을 가지고 있기 때문에!

덕분에 cryptocurrency들이 정부의 감시나 통제에 대응할 수 있다.

3. 블록(Block)

블록은 DB에 추가하는 "정보"의 단위.

각 블록은 마지막 블록 위에 생성되고,
이전 블록과 연결되는 정보 조각을 포함하고 있다.

3-1. 블록에는 뭐가 들어있는가?

블록의 구조


class Block {
  // 블록이 최초로 생성될 때마다 주는 정보. 이 정보가 블록 안에 저장된다.
  constructor(index, hash, previousHash, timestamp, data) {
    this.index = index;
    this.hash = hash;
    this.previousHash = previousHash;
    this.timestamp = timestamp;
    this.data = data; 
  }
}

// 새로운 블록이 생성될 때 이렇게 들어간다
new Block(1, "bbbb","aaaa", 2022-02-01-12:25:00, "hello!!!")
  • 블록의 해시
  • 이전 블록의 해시
  • 데이터
    • 블록체인은 무엇이든의 DB. 대학교 학위, 결혼증명서 등. 이걸 데이터에 넣는다.
    • 비트코인의 경우 데이터는 트랜잭션(거래내역)들.

3-2. 블록은 어떻게 연결되어서 체인을 이루는가?

그 전에, 왜 연결되어야할까?

  • 장부 속의 종이에 적은 거래내역
    종이에 거래내역을 적어둔 백장짜리 장부를 찢어서 하늘에 던져버리자.
    그럼 거래내역들이 어떤 순서로 생성됐는지, 누군가 몰래 자기에게 유리하게 고치지는 않았는지, 전혀 알 수 없을 것이다.

  • 블록체인 속의 블록에 기록한 거래내역
    거래내역을 블록에 담아서 블록체인에 올렸다.
    새로 생성되는 블록은 반드시 이전 블록 위에 생성되며, 이전 블록의 정보를 가지고 있다.
    그래서 거래내역의 순서가 명확하며, 이전 내용을 고치면 다음 내용이 모두 바뀌어버리는데다, 그 네트워크 참여자 모두가 똑같은 복사본을 가지고 있기 때문에 몰래 고칠 수 없다.

    그래서 블록체인을 공통장부 라고도 한다. ( 장부 = Ledger = 원장 )

블록에 포함된 해시를 통해서 연결된다.

해시란?
: 해시함수의 결과 값.

3-3. 해시함수란 무엇인가?

인풋을 받으면 랜덤한 아웃풋을 주는 수학 함수

해시함수는 블록 헤더 정보인 버전, 이전 블록 해시, 머클루트, 타임, bits, Nonce 정보를 모두 더하여 (이어붙여) SHA 256(해시 알고리즘)방식으로 변환한다.

  1. 어떤 입력 값에도 항상 고정된 길이의 해시값을 준다.

  2. 결정론적
    인풋에 대한 아웃풋은 항상 같은 것으로 정해져있다.
    인풋이 약간만 달라져도 아웃풋은 완전히 바뀐다.

  3. 일방향 함수
    인풋 -> 아웃풋 O
    아웃풋 -> 인풋 X

➡️ ➡️ ➡️ 📌 블록체인(Block chain) - 해시함수 참조

입력값을 아주 조금만 수정해도, 완전히 다른 출력값이 나오기 때문에,
정확히 같은 출력값을 출력하는 두 데이터 조각을 찾을 가능성은 천문학적으로 낮다.

🥭 ➡️ 🍹
그래서 해시 과정은 망고주스를 만드는 것과 같다.
주스로 만들어 버리면, 다시 망고로 돌릴 수 없음

블록을 블록체인에 추가하고 싶다면?

  • 1) 내 데이터, 빗코의 거래내역(트랜잭션)을 모은다
  • 2) 이전 블록의 해시 필요
  • 3) 내 데이터 + 이전 블록의 해시 합쳐서 다시 해시

=> 이 과정을 거쳐야 내 해시가 생긴다!
이제 블록체인에 블록을 추가할 수 있다.
**이전 해시와 같이 결합하는 방법으로 체인이 결성된다.

누군가가 1번 블록에서 데이터를 수정한다면, 인풋이 바뀌었으니 아웃풋이 몽땅 바뀌어버린다!

소문자에서 대문자로 바꾸기만 해도 출력값은 완전히 바뀐다.

이는 각 블록이 이전 블록의 해시를 포함하고, 가리킬 수 있음을 의미한다.
따라서 이전 블록을 수정하려는 모든 시도를 즉시! 알아챌 수 있음

그래서 누구도 이 블록체인을 변경할 수 없는 것.

블록 헤더

  • version : 소프트웨어/프로토콜 버전
  • previousblockhash : 블록 체인에서 바로 앞에 위치하는 블록의 블록 해쉬
  • merklehash : 개별 거래 정보의 거래 해쉬를 2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값
  • time : 블록이 생성된 시간
  • bits : 난이도 조절용 수치
  • nonce : 최초 0에서 시작하여 조건을 만족하는 해쉬값을 찾아낼때까지의 1씩 증가하는 계산 회수

    이 블록 헤더의 6가지 정보를 입력값을 이어붙여 해쉬함수를 통하면, 블록의 식별자 역할을 하는 블록 해쉬가 만들어진다.

3-4. 블록은 어떻게 블록체인에 추가되는가?

검증자(=채굴자)검증을 완료하면 해당 내역을 주변 노드에 전파한다
(노드 = 네트워크 참여자들의 컴퓨터)

가짜 금융 정보가 기록되면 블록체인의 온전성이 위협받는다.
분산화된 시스템에는 원장을 관리하는 관리자나 대표가 없는데, 어떻게 참가자들이 정직하게 행동하도록 만들 수 있을까?

비트코인 창시자인 사토시는 누구나 블록체인에 블록을 추가할 수 있는 검증 시스템인 작업증명을 제안했다.

3-5. 블록을 어떻게 검증하는가?

합의 알고리즘을 통해 해당 블록의 데이터가 참인지 검증한다.

블록 검증과정 포스트와 ,
블록체인(Block chain) - 헷갈리는 대칭키(비공개키), 비대칭키(공개키) 방식 😡의 전자서명 참조

4. 합의

4-1. 합의는 왜 필요한가?

블록체인에 제대로 된 블록만을 올리기 위해서.

블록체인에서는 네트워크에 참여한 모두가 각자 블록을 생성할 수 있다.
모두가 공통된 장부, 공통된 체인을 갖기 위해서는, 무엇을 진짜로 인정할 것인지에 대한 합의가 필요하다.

"합의"가 필요한 상황

A가 B에게 비트코인을 한개 줬는데, 갑자기 주기 아까워졌다고 하자.
A는 그 사실을 없었던 것으로 하는 블록 2.1을 만들어버린다.
거래한 A와 B가 가지고 있는 공통장부 ,블록체인이 서로 달라져 두개로 나뉘어 버렸다.
이렇게 한 블록에서 해시함수로 이어진 블록이 두 개 이상일 때 포크가 발생했다고 한다.
포크를 막기 위해서는? ➡️ " 합의 "가 필요하다

DApp은 기본적으로 피어투피어 네트워크(Peer to Peer) 에서 동작한다.

따라서 네트워크에 연결된 어떤 컴퓨터라도 피어가 될 수 있으므로,
어플리케이션 데이터를 잘못된 값으로 변경하거나
다른 피어와 잘못된 정보를 공유하는 피어를 찾아내고 방지하는 것이 아주 중요하다.

그래서, 해당 피어(=노드)가 발행한 정보가 올바른지 검증하기 위한 방법인
합의 프로토콜, 합의 알고리즘이 나오게 된 것.

DApp(Decentralized Application)

블록체인(Block chain) - 디앱(DApp) 포스트 참조

  • 백엔드가 탈중앙화P2P 네트워크에서 동작하는, 인터넷 어플리케이션.
  • 어떠한 단일 노드도 탈중앙화 어플리케이션에 대한 제어권을 가질 수 없음.

4-2. 어떻게 합의 하는가?

합의 알고리즘(Consenesus algorithm)

다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘을 말한다.
합의 모델, 합의 방식, 합의 메커니즘, 합의 프로토콜이라고도 한다.

작업증명 : 작업으로 증명하라

  • 전기를 가장 많이 쓴 사람, 빠른 컴퓨터를 가진 사람에게 보상을 지급하는 방식
  • 에너지가 엄청나게 필요한 네트워크만 안전하다
  • 환경오염 발생. 네트워크 규모가 작은 코인은 51% 공격의 위험이 있다

지분증명 : 지분으로 증명하라

  • 코인을 지속적으로 보유(스테이킹)하는 사람에게 보상을 지급하는 방식
  • 빠른 컴퓨터가 필요없고, 에너지 낭비도 없다
  • 작업증명에 비해 51% 공격의 위험이 적다

➡️ ➡️ ➡️ 📌 블록체인(Block Chain) - 합의 알고리즘(Consensus algorithm) 포스트 참조

4-3. 검증자는 블록이 참인지 어떻게 아는가?

디지털 서명의 유무를 확인해 검증하고, 검증을 마치면 주변 노드에 전파한다.

이 작업에 성공한 컴퓨터에 의해서 블록체인에 추가된 후에
나머지 컴퓨터들은 해당 정보가 참이라고 인정해서 해당 거래를 승인해줘야한다.

디지털 서명

디지털 서명이란, 비대칭키와 해쉬 함수를 이용해서 데이터의 진위 여부를 확인할 수 있게 해주는 검증 알고리즘.
블록 체인에 담겨 있는 모든 "거래 정보"에는 디지털 서명이 포함되어 있어서 "거래 정보" 가 진실임을 신뢰할 수 있다.

5. 트랜잭션(Transaction)

트랜잭션을 보낸다는 게 무슨 말일까?

블록체인은 트랜잭션을 블록 단위의 체인 형태로 저장하는 기술이다

데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위

비트코인에서 거래를 하기 위해 보내는 주소, 받는 주소, 금액, 수수료 등의 정보가 작성되며 이 정보를 담는 것이 바로 트랜잭션 데이터.

블록체인(Block Chain) - 거래(Transaction) 포스트 참조

6. 블록체인 작동방식

이미지 출처

7. 피어투피어(P2P) 네트워크

사용자들의 레이어.
관리자가 없어 중앙 서버에 연락하지 않고,
사용자들은 다른 사용자와 정보를언제나 교환할 수 있으며,
이를 다른 피어에게 직접 전송할 수 있다.

중앙화 네트워크 | 탈중앙화 네트워크

왼쪽에서 A는 F에게 연락하기 위해 서버에 메세지를 보낸다.
오른쪽에서 A는 중개자 없이 연결되어있기 때문에, F에게 바로 보낼 수 있다.

웹사이트에 접속하면 해당 서버에 데이터를 요청한다.
그래서 웹사이트가 오프라인이 되면 데이터를 볼 수 없다.
하지만 모든 콘텐츠를 다운로드해 두었다면, 해당 웹사이트의 서버에 데이터를 요청하지 않고 컴퓨터에서 이를 불러올 수 있다.

이것이 바로 블록체인에서 각 피어들이 하는 일.

전체 데이터베이스는 피어들의 컴퓨터에 저장되어 있다.
누군가 네트워크를 떠나도 남은 사용자들은 여전히 블록체인에 접근할 수 있고, 서로 정보를 공유할 수 있다.

새로운 블록이 추가되면, 해당 데이터는 네트워크 전반으로 전파되고 누구나 자신의 사본을 업데이트할 수 있다.

7-1. 블록체인에서의 P2P 역할

비트코인 초기 단계에서 사토시 나카모토는 비트코인을 "피어투피어 전자 화폐 시스템" 으로 정의했다.
분산화된 원장을 관리하는 "블록체인"이라는 P2P 네트워크를 통해, 사용자 서로에게 전송될 수 있다.

비트코인 네트워크에는 트랜잭션을 처리하거나 기록하는 은행은 없다.
대신, 블록체인이 모든 기록을 공개적으로 기록하는 디지털 원장 역할을 한다

각 노드는 블록체인 사본을 보관하고, 이를 다른 노드와 비교해 데이터가 정확한지 확인한다.
따라서 네트워크는 악의적 활동이나 부정확한 정보를 빠르게 차단할 수 있다.

노드란? (암호화폐 블록체인 관점에서)

  • 풀 노드
    시스템 합의 규칙을 따라 트랜잭션을 확인하여 네트워크 보안을 제공하는 노드
    각 풀 노드는 온전한 최신 블록체인 사본을 보유
    그래서 분산화된 원장의 실제 상태를 확인하는 공동작업에 참여할 수 있다.
    (단, 검증을 담당하는 모든 풀 노드가 채굴자는 아니라는 것)

7-2. 블록체인의 P2P 아키텍처의 장점

  1. 전통적인 클라이언트-서버 네트워크보다 보안이 우수하다.
    • 많은 노드에 걸쳐 분포된 블록체인은 서비스 거부(Dos)공격을 막을 수 있다.

블록체인이 데이터를 추가하기 전에
"다수"의 노드가 합의를 달성해야하기 때문에,
공격자가 데이터를 변조하는 것은 거의 불가능하다.

하지만 이 "다수"의 노드가 합의를 달성의 "다수"가 그리 크지 않은 작은 블록체인의 경우는, 공격에 매우 민감하다.

출처
누구나 한 번에 이해할 수 있는 블록체인 강의 | 샌프란시스코 대학 부교수 정은진 [리얼밸리 시즌 2 EP 10]

참조
[블록체인 한번에 이해하기] 이 포스트에 매우 정리가 잘되어있다.(https://homoefficio.github.io/2017/11/19/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/)

profile
Web Front-end developer

0개의 댓글