블록체인 구성요소 - 합의 알고리즘, 지갑과 어카운트

be kid·2022년 3월 5일
0

블록체인

목록 보기
4/9
post-custom-banner

합의 알고리즘

Consensus Algorithm
합의 모델, 합의 방식, 합의 메커니즘, 합의 프로토콜이라고도 불리며 다수의 참여자들이 통일된 의사결정을 하기 위해 사용하는 알고리즘을 말한다.
블록체인 시스템은 네트워크의 참여하는 모든 참여자들이 동일한 데이터를 복사하여 분산 저장하기 때문에 원본과 사본의 구별이 없으며 통일된 의사결정을 내릴 수 있는 권위 있는 중앙(Center)이 존재하지 않는다.

중앙화된 서버 대신 전세계에 흩어져 있는 수많은 노드에 보관되기 때문에 각각의 노드들은 블록에 기록하는 데이터가 위변조되지 않은 원본이라는 것을 상호간에 합의하는 과정이 필요하다. 악의를 품은 노드가 존재해도 네트워크를 올바른 방향으로 이끌고자하는 다수의 노드들이 상호 검증을 거쳐 올바른 블록 생성을 이끌어내는 프로세스와 알고리즘을 합의(Consensus)라고 한다.

작업 증명 (PoW, Proof of Work)

최초의 블록체인인 비트코인을 창시한 사토시 나카모토가 제안한 합의 알고리즘이다. 블록생성 시간동안 가장 많은 해시파워를 제공한 노드가 블록을 생성할 수 있도록 설계가 되어있다. 비트코인, 라이트코인 등 여러 암호화폐 블록체인에서 사용된다.
작업 증명은 현재 시빌 공격과 같은 블록체인 네트워크에 대한 각종 공격을 막을 수 있다고 증명된 유일한 알고리즘이다.
현재 높은 시장 가치를 형성하고 있는 주류 코인들이 채택하고 있으며 강력한 보안성 제공과 서비스 남용을 쉽게 방지할 수 있다는 장점이 있지만, 높은 전력 소모를 통한 자원 낭비, 지속적인 해시파워 유지, 특정 마이닝 세력의 해시 독점으로 인한 생태계 교란 우려 등의 단점이 있다.

지분 증명 (PoS, Proof of Stake)

지분을 많이 가지고 있는 노드에게 블록을 생성할 권한을 주는 방식이다. 작업이 아닌 더 많은 지분(해당 코인)을 가지고 있을수록 그에 비례하여 블록에 기록할 권한이 더 많이 부여된다는 개념이다. 채굴자에게는 마치 이자와 같은 방식으로 코인이 지급되며 일정 수 이상의 코인을 보관하고 있는 지갑을 블록체인 네트워크에 연결시켜놓기만 하면 보상을 받을 수 있다. 블록 생성자와 지분 생성자의 이해관계를 일치시켜 블록을 나쁜 의도로 생성할 동기를 없애고 잘못 생성할 경우 패널티를 부여한다. 이더리움은 작업 증명 방식에서 지분 증명 방식으로 합의 알고리즘을 변경하려 한다.
해시파워가 많이 필요하지 않아 경제적이고 친환경적이며 블록 생성자의 탈중앙화로 안정성을 확보할 수 있다. 또한 블록을 생성하기 위해 지분을 담보로 잡아야하기 때문에 Dumping을 방지할 수 있다는 장점이 있다. 하지만 아직 검증되지 않았기 때문에 보안성이 강한지 확인되지 않았고 지분이 많은 고래들이 권력을 독점할 가능성이 존재한다.

위임 지분 증명 (DPoS, Delegated Proof of Stake)

PoS에서 변형된, 시스템의 지분을 가진 각 노드가 투표를 통해 트랜잭션의 유효성 검사를 다른 노드에 위임하여 증명하는 개념이다. 이오스(EOS, 제3세대 암호화폐)에서 사용이 된다.
네트워크의 모든 노드의 투표 결과로 선출한 상위 노드에게 권한을 위임해 합의하도록 하는 방식으로, 스팀은 20명, EOS는 21명 등 일정 수의 증인들은 모든 권한을 위임 받아 블록 생성을 담당한다. 미국 대선의 대의원 제도 같은 간접선거 방식에 비유할 수 있다.
PoS에 비해 많은 트랜잭션을 빠르게 처리가능하며 PoW에 비해 비용이 낮다. 또한 하드포크의 위험이 낮고 증인들이 투표에 참여할 인센티브가 분명하다. 하지만 증인끼리 손쉽게 담합할 위험이 있고 공개된 소수의 증인에 대한 디도스(DDoS) 공격 위험이 있다.

아래는 다음에 더 자세히 정리한다.

비잔틴 장애 허용 (BFT, Byzantine Fault Tolerance)

장애가 있더라도 전체의 3분의 1을 넘지 않는다면 시스템이 정상 작동하도록 허용하는 합의 알고리즘이다.

프랙티컬 비잔틴 장애 허용 (PBFT, Practical Byzantine Fault Tolerance)

네오, 질리카, 하이퍼레저, R3, ITC, 텐더민트 등에서 사용하는 합의 알고리즘으로 여러 노드로 구성된 네트워크에서 악의적 공격을 방어하기 위해 만들어졌다.

지갑과 어카운트

지갑(Wallet)

비트코인, 이더리움 등의 암호화폐를 보관할 수 있는 계정이며 블록체인에서 실행되고 개인 및 공개 키를 저장하고 해당 키와 관련된 모든 트랜잭션을 블록체인에 모니터링하고 유지하는 소프트웨어이다. 채굴과 노드에서 노드가 바로 지갑이다. 지갑의 종류에는 데스크탑(PC) 지갑, 모바일 지갑, 하드웨어 지갑, 웹 지갑 등이 있다.

지갑은 주소(공개 키, Public Key)와 암호(개인 키, Private Key)로 구성되어 있으며 주소는 다른 사람들이 암호화폐를 송금할 수 있도록 공개해도 되지만 개인 암호는 오직 지갑 소유자 본인만 알고 있어야 한다.

이더리움 - 어카운트(Account)

이더리움 주소와 개인키의 조합을 어카운트라고 한다. 이더리움 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있다. 이더리움 블록체인에서 주소와 키는 이더리움의 소유권과 전송을 나타내는데 주로 쓰인다.

  • 주소
    이더리움 블록체인에서 사룡자의 신분증에 해당하는 것이 주소이다. 각 주소에는 해당 개인키가 있으며 개인키는 사용자가 알고 있는 일종의 암호로 간주할 수 있다. 블록체인과 상호작용하려면 주소 + 개인키 쌍이 필요하다.
    은행과 비교하면 어카운트는 송금&이체가 가능한 계좌를 의미하고 주소는 계좌번호를 나타낸다고 할 수 있다.

  • 개인키와 공개키로 구분되며 개인키는 무작위로 생성되어 비밀 키로써 유지해야 하는 반면 공개키는 개인키를 연상하여 생성되며 계정을 식별하는 요소로 사용된다.

이더리움 주소 생성 과정

  1. 개인 키를 생성하고 개인 키로부터 공개 키를 생성한다.
  2. Keccak-256 알고리즘으로 공개 키의 해시값을 계산한다.
  3. 생성된 해시값의 뒤쪽 20byte만 남기고 제외 후 이더리움 주소를 생성한다.
    20byte만 남기는 이유? (코드스테이츠 컨텐츠와 구글링을 통해 정리해봤다)
    암호화 알고리즘을 통해 생성된 해시값이므로 중복되지 않아 검증이 필요없어 20byte만 남겨도 문제가 되지 않는다. 또한 키 관리를 단순화하고자 하는 목표도 있다. 12바이트를 잘라냄으로 그만큼 가벼워지는 것이기도 하다. 완전한 공개 키에 실용적인 용도가 있는 것이 아니기 때문에 잘라내도 상관이 없다. 그리고 키를 절단하면 그것만으로도 추가 방어가 될 수 있다는 내용이 있었다.

이더리움의 2가지 계정 유형

  • 외부 소유 계정(EOA)
    공개 주소와 개인키의 조합을 말한다. 외부 소유 계정 또는 외부 계정을 사용하면 다른 계정과 이더를 송수신하고 스마트 컨트랙트에 트랜잭션을 보낼 수 있다.
  • 컨트랙트 계정(CA)
    컨트랙트 계정에는 상응하는 개인키가 없다. 이러한 계정은 스마트 계약을 블록체인에 배포할 때 생성된다. 컨트랙트 계정 대신 컨트랙트로만 표시되기도 한다. 다른 계정과 이더를 송수신하고 (EOA와 동일), 관련된 코드를 담고 (EOA와 다름), EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시키는 기능을 갖고 있다.

어카운트의 장단점

  • 장점
    단순성(Simplicity) : 이더리움은 복잡한 스마트 컨트랙트 개발자, 특히 국가 정보가 필요하거나 여러 당사자가 참여하는 개발자의 이익을 위해 보다 직관적인 모델을 선택했다. 예를 들어 상태를 추적하여 상태를 기반으로 다른 작업을 수행하는 스마트 컨트랙트가 있다. UTXO의 상태 비저장 모델이 트랜잭션에 상태 정보를 포함하도록 강제하므로 계약의 설계가 불필요하게 복잡해지는 것과 대비를 보인다.
    효율성(Efficiency) : 이더리움의 어카운트는 단순성과 더불어 전송 계정이 거래 비용을 지불하기에 충분한 잔액을 가지고 있는지 확인만 하면 되므로 더욱 효율적이다.
  • 단점
    이중 지불 : 이중 지불 공격에 노출될 수 있다. 이러한 유형의 공격에 대응하기 위해 점증적인 논스(Nonce)를 구현한다. 이더리움에서 모든 계정은 공개적으로 볼 수 있는 논스를 가지고 있고 거래가 이루어질 때마다 논스는 하나씩 증가하게 된다. 이는 동일한 트랜잭션이 두 번 이상 제출되는 것을 방지할 수 있다.

비트코인 - UTXO (Unspent Transaction Outputs)

미사용 트랜잭션 출력값(미지출 거래 출력)을 뜻한다. 비트코인은 이더리움의 어카운트 모델과 달리 계정이나 잔고가 없고 블록체인에 기록된 소비되지 않은 출력 값을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다. 즉, 코인이 지갑에 저장되는 것이 아니라 UTXO에 저장된다고 보면 된다.

UTXO의 장단점

  • 장점
    이중 지불 방지 : 트랜잭션을 발생시키면 해당 UTXO는 검증을 받은 후 TX Pool에 들어간다. 그러므로 이중 지불이 발생하면 채굴자들은 Pool에서 UTXO 검사 후 사용 기록이 있다면 해당 거래를 무효화할 수 있다. 같은 이유로 하이퍼레저 패브릭에서도 UTXO를 사용한다.
    잔고의 증명 : UTXO는 추적하기가 용이한, 거래에 대한 유효성 검증이 매우 쉽다는 장점이 있다. 일반적으로 이더리움 같은 경우는 트랜잭션들을 모두 검증 및 확인하여 최종적으로 잔고를 유추하지만 UTXO는 해당 사용자의 UTXO만 확인하면 되기 때문에 그럴 필요가 없다.
  • 단점
    UTXO가 너무 과하게 생성될 경우 문제가 된다. 이더리움은 결과적으로 잔고 하나만 점검하면 끝이지만 UTXO 방식을 채용하는 코인들은 흩어져 있는 UTXO를 모두 모아야 되며 소액 결제를 자주 하거나 채굴로 이자를 받게 되면 과도한 UTXO로 인해 불필요한 수수료를 내야할 수 있다.

비트코인과 이더리움 비교

UTXO와 어카운트 각각의 장단점이 있어 어느 것이 더 나은 것인지는 사용하려는 목적과 기능, 사용하려는 역할에 따라 달라질 수 있다.
UTXO는 한번 사용되고 사라져 익명성과 보안성이 강해 화폐의 역할에 충실해야 할 때 적합할 수 있으며 dApp과 같이 다양한 기능을 구현하고 싶다면 스마트 컨트랙트를 활용할 수 있는 이더리움의 어카운트가 적절하다.

비트코인과 이더리움

비트코인 코어(Bitcoin Core)

비트코인의 레퍼런스 클라이언트이며 개발자들은 비트코인 코어의 변경사항을 통해 기반이 되는 비트코인 프로토콜을 변경하게 되고 비트코인 코어는 풀노드를 돌리는 것을 전제로한 소프트웨어이므로 100GB가 넘는 블록체인 데이터를 다운로드 받아야 제대로 사용 가능하다.

이더리움 클라이언트

이더리움 블록체인 네트워크를 구성하는 개별 클라이언트 노드이기 때문에 중앙집중형 서버 프로그램이 존재하지 않으며 오로지 클라이언트 프로그램만 존재하게 된다. 이더리움 클라이언트는 멀티 플랫폼 환경을 지원하기 위해 다양한 프로그래밍 언어로 개발되고 있다.

이더리움 블록체인에서 응용 프로그램을 빌드하는 것에 사용할 수 있는 도구

Geth
Parity

비트코인과 이더리움의 또 다른 차이점

비트코인

  • 암호화폐 : 1세대
  • 기능 : 비트코인의 거래기록만 블록체인에 적용
  • 채굴 방식 : PoW
  • 상한 채굴 개수 : 약 2100만개 까지
    이더리움
  • 암호화폐 : 2세대
  • 기능 : 계약을 기록할 수 있는 스마트 컨트랙트 기술 추가
  • 채굴 방식 : PoW(PoS로 변경예정)
  • 상한 채굴 개수 : 상한 없이 생산
profile
개쩌는 개발자가 되고 싶다 !
post-custom-banner

0개의 댓글