- 우리는 Facebook, 우버와 같은 서비스나 은행 시스템과 같은 중앙집중원장(Centralized ledger)을 이용해 왔다.
- 이는 그들이 우리의 데이터를 잘 관리하고 처리해 줄 것이라는 신뢰가 있었기 때문이다
- 우리는 이러한 기관, 기업에게 신뢰비용(수수료 등)을 지불하고 그들은 서비스를 제공하며 데이터를 보관(보안)하고 활용한다.
- 이렇게 지금까지 자본주의가 발전하면서 신뢰받는 제 3자에게 어떤 권한을 위임해 왔고 그들에게 서비스를 받으며 성장해 왔다.
기존 중앙집중형 시스템의 문제점
1. 비용 문제
- 제 3자인 중앙집중형 관리시스템은 거래자들 사이에서 과도한 관리, 중개수수료를 청구한다.
- 중앙집중형 시스템은 데이터베이스를 유지, 관리하기 위해 많은 보안유지비용을 지출한다.
- 금융권의 경우 매년 천문학적인 돈을 보안인프라에 투자한다. 그 비용은 모두 우리에게 부담되는 것과 마찬가지이다.
2. 시간 문제
- 많은 미들맨(Middle man)들이 존재할 경우 프로세스 전반에 걸쳐 시간과 비용이 증가하여 효율성이 떨어진다.
- 은행의 경우 각 은행들의 데이터베이스를 통해 거래를 확인하고 청산하기까지 중앙은행과 금융결제원, 외환거래의 경우 더 많은 중간다리가 포함되어 있다.
- 해외물류의 경우도 마찬가지로 화주부터 트럭회사, 해운사, 심지어 보험사까지 많은 중간 이해관계자들이 있다.
3. 보안 문제
- 중앙집중형 데이터베이스를 이용하게 되면 해커들의 공격대상은 오직 하나, 중앙이다.
- 아무리 보안유지에 힘을 쓴다 하더라도 해커의 목표가 분산되어 있지 않고, 오직 중앙 하나만 공격한다면 중앙에 있는 우리의 모든 데이터 보안이 뚫리게 된다.
분산원장기술(Distributed Ledger Technology, DLT)
- 중앙원장기술과 반대로 중앙서버나 중앙관리자의 제어 없이 분산화된 네트워크의 각 노드(개인)들이 데이터베이스를 공유하고 계속 동기화하는 기술
- 모든 블록체인은 분산 원장이지만 모든 분산 원장이 블록체인은 아니다.
- 블록체인은 분산원장기술이지만 ‘합의를 통한 공유 분산데이터베이스’ 기술이라고 정의할 수 있다.
블록(Block)
- 블록을 한 칸씩 쌓아 탑의 형태로 체인이 구성된다고 하여 이를 블록의 높이라고도 부른다. 하지만 블록의 정확한 이름은 블록의 해시값이다.
- 블록은 크게 블록 헤더와 블록 바디로 구분된다.
- 블록 해시는 블록의 헤더 정보를 모두 더하여 합을 구한 후 SHA-256 알고리즘으로 변환한 결과 값이다.
- 블록 헤더는 버전, 이전 블록 해시, 머클 루트, 타임, bits, nonce 값으로 구성되어 있다.
- 버전 : 해당 블록의 버전
- 이전 블록 해시 : 이전 블록의 주소 값
- 머클 루트(Merkle root) : 블록의 바디 부분에 저장된 트랜잭션(거래 정보)들의 해시 트리
- 타임 : 해당 블록의 대략적인 생성 시간
- 난이도 목표(bits) : 난이도 해시 목표 값을 의미하는 지표
- 임의의 값(nonce) : 블록을 만드는 과정에서 해시 값을 구할 때 필요한 재료 역할
- 각 블록 바디는 거래 내용(트랜잭션 ID, 주소)들로 구성되어 있다.
블록체인(Blockchain)
- 말 그대로 거래 기록이 담긴 블록이 체인처럼 서로 연결돼 있다는 뜻이다.
- 블록체인 네트워크에 참여한 각 참가자(노드)의 거래 내용은 블록에 담기게 된다.
- 하나의 블록 안에는 일정 시간의 거래 내역과 해당 블록의 해시값, 직전 블록의 해시값이 동시에 담겨있다.
- 블록은 일정한 크기와 시간이 지나면 하나의 블록으로 완성되고 새로운 거래 내용은 다음 블록에 담기는 식이다.
- 블록체인으로 연결된 블록에는 이전 블록들의 모든 거래 정보를 담아두게 된다. 이때 해시라는 복호화가 불가능한 불가역적 암호화 방법을 쓰게 된다.
- 블록체인에서의 해시는 SHA-256 이라는 방법을 활용해 암호화 과정을 거친 암호문을 다시 복호화할 수 없도록 하는 일방향(단방향) 암호화 기법이다.
- 해시를 통해 적은 데이터 양으로도 원본 내용이 모두 완전히 같다는 걸 비교할 수 있고, 짧은 시간 내에 수많은 데이터를 원본과 대조할 수 있다. 이를 통해 공공 거래장부의 위조도 막을 수 있다.
- 거래 내용을 블록에 기록하고, 블록을 주기적으로 생성하면서 각 새로운 블록에 이전 블록들의 해시 값을 포함시킴으로써 블록에 기록된 거래 내용을 해킹해 위조, 변조하기 어렵게 만든다.
- 블록에 담긴 하나의 거래 내역을 위조하려면, 먼저 해당 거래를 조작한 뒤 이를 네트워크의 모든 컴퓨터에 배포해야 한다.
- 그러나 성공하더라도 원본 블록과의 해시값이 달라지기 때문에 직전 블록의 내용도 함께 조작해야 한다. 그렇지 않으면 위조한 블록은 다른 참가자들로부터 과반수 이상 승인을 받지 못하게 된다.
- 그리고 그 거래 내역을 위조하는 동안에도 실시간으로 새로운 블록이 생성되고 있기 때문에, 블록체인 네트워크보다 빠르게 위조와 배포를 해야 한다.
블록체인 거래와 생성 과정
- 블록 사용자는 수수료(gas, 가스)를 지불해 거래 내용을 블록에 등록하면, 채굴자는 제출된 거래 내용을 바탕으로 새로운 블록을 생성한다. 이 과정에서 채굴자는 해시 암호화된 거래 내용을 이전 블록의 해시값, 현재 블록의 거래 내역, 넌스 값, 타임스탬프 등을 이용해 수학 문제를 푼다. 이 문제가 해결되면 새로운 블록이 생성되고, 장부가 승인되어 블록체인에 추가된다.
- 그 장부들을 승인해 주는 거래 체결자 같은 역할을 하는 게 채굴자(마이너)고, 채굴자는 그 보상으로 일정량의 코인과 장부처리 수수료를 받기 때문에 높은 수수료의 거래부터 처리하게 된다. 따라서 가스 단가를 높게 설정할수록 처리속도가 빠르다.
- 만약 A, B 채굴자가 동시에 블록을 생성했다면, 어느 블록이 진짜 블록일까?
- 중앙집권적인 기관이었다면 중앙에서 통제가 가능하기 때문에 두 개의 블록 중 어떤 블록이 진짜인지 선택해 주어 문제는 해결된다.
- 하지만 탈 중앙화된 블록체인에서는 해당 의사결정을 해 줄 사람이 없기 때문에 이를 결정할 과정이 필요하다.
- 이때 등장한 것이 바로 합의 알고리즘이다.
- 합의 알고리즘에는 비트코엔이서 사용되는 PoW(Proof of Work), 이더리움이 지향하려고 하는 PoS(Proof of Stake), EOS에서 사용되는 DPoS(Delegated Proof of Stake)등이 있다.
- 승인이 다 완료되면(새로운 블록이 추가된 후에는) 주변 노드들에게 해당 블록을 전파하여 검증을 받는다.
- 검증이 완료되면 채굴자에게 보상이 지급된다. 이때 채굴자는 블록바디(Block body)의 첫 번째 거래 내역에 자신이 보상받을 비트코인의 수량을 기입함으로써 코인이 발행된다.
블록체인 문제점
- 블록체인은 금융을 포함한 다양한 산업 분야에서 유용함을 입증하고 있지만, 확장성(Scalability), 보안성(Security), 탈중앙성(Decentralization) 중 적어도 하나를 희생해야 하는 *트릴레마 문제로 인해 아직은 기존의 중앙 집중적인 네트워크를 완전히 대체하기는 어렵다.
- 트릴레마(Trilemma) : 세 가지 선택지나 옵션이 제시되지만 세 가지 모두를 만족시킬 수는 없는 상황
블록체인 트릴레마 특징
확장성
- 블록체인 네트워크가 성장함에 따라 트랜잭션 또는 사용자 수를 효율적으로 처리할 수 있는 능력
- 높은 트랜잭션 처리량과 *미래의 증가량이 확장성을 평가하는 기준이 된다.
- 높은 트랜잭션 처리량은 *TPS 를 기준으로 이야기한다.
- TPS(Transaction Per Second) : 초당 처리할 수 있는 트랜잭션 양
- 확장성은 어떤 블록체인 시스템을 거래 수단으로 활용할지 판단하는 근거가 되고, 보편적으로 활용할 수 있을지 결정하는 기준이 될 수도 있어 중요하다.
탈중앙성
- 기존의 중앙집권적인 데이터 처리 방식을 벗어나 분산된 노드들을 통해 네트워크가 자율적으로 운영되는 것
- 블록체인 기술의 핵심으로, 기존의 데이터 처리 방식과 가장 다른 블록체인만의 특징이다.
- 블록체인 네트워크는 네트워크의 모든 참여 노드가 서로 직접 연결되는 P2P(Peer-to-Peer) 아키텍처를 기반으로 한다.
- 각 노드는 전체 블록체인의 복사본을 유지 및 관리하고 트랜잭션을 전파하며 유효성을 검사한다.
- 중앙 서버나 중개자가 필요하지 않으므로 네트워크 참가자 간의 직접적인 상호 작용 및 데이터 공유가 가능해진다.
- 다양하게 분산된 노드의 수가 많을수록 단일 노드나 그룹의 네트워크에 미치는 영향이 줄어들기 때문에, 네트워크의 검증에 참여하는 노드의 수가 많을수록 탈중앙성이 높다고 이야기한다.
보안성
- 악의적인 활동, 변조, 사기 및 무단 액세스로부터 네트워크를 보호하는 것
- 블록체인 네트워크를 유지하기 위해 활동하는 이들에게 합의 과정을 통해 코인이라는 암호화폐를 보상으로 발행하고 이를 관리해야 하기 때문에 중요하다.
- 직접적으로 개인의 경제적인 부분에 영향을 미치기 때문에 블록체인 내에서 기록되는 데이터는 변조 및 수정이 불가능하도록 보호해야 한다.
세 요소의 상호작용
- 블록체인 네트워크에서 거래를 하기 위해서는 기본적으로 트랜잭션이 발생하고, 네트워크에 있는 노드에 전파한 후 검증하는 과정이 필요하다.
- 노드가 많다는 것은 그만큼 많은 노드가 검증에 참여한다는 의미이며, 탈중앙성이 높아진다고 할 수 있다.
- 또 노드가 많은 것은 적을 때에 비해 상대적으로 거래를 악의적으로 이용하기 어려워져 보안성이 높아진다는 뜻이 될 것이다.
- 하지만 반대로 검증하는 데 오랜 시간이 걸리기 때문에 확장성은 저하된다는 뜻이기도 하다.
- 즉, 탈중앙성을 높이려 하면 확장성이 저하된다. 반대로 확장성을 높이려고 하면 탈중앙성과 보안이 위협받는 상황이 발생하게 된다.
블록체인 트릴레마 비트코인
- 비트코인은 시작부터 탈중앙화와 보안에 집중하였기 때문에 보안 측면에서는 최고의 암호화폐라 평가받고 있지만, 사용자 증가에 따라 자연스럽게 트랜잭션을 처리하는 속도가 느려지는 확장성 문제에 직면하게 되었다.
- 위 문제를 개선하기 위해 여러 가지 방법을 시도하였는데, 세그윗 업데이트와 라이트닝 네트워크가 한 예시이다.
라이트닝 네트워크
- 비트코인 위에 구축된 오프 체인 거래 방식
- 확장성 문제로 비트코인이 실생활에서 결제 수단으로 사용될 수 없는 문제점을 해결하고자 제안되었다.
- 비트코인이 네트워크에서 발생하는 모든 전송 기록을 블록체인에 저장하는 반면, 라이트닝 네트워크는 개별 거래를 별도의 채널에서 처리한 후 그 결괏값만 블록체인에 기록하는 특징을 가지고 있다.
- 즉, 중요 거래 기록만 블록에 저장하고 그 외 것들은 블록체인 밖에서 처리하는 것이다. 이를 통해 전송 속도를 대폭 향상하고 거래 수수료를 절감해 느리고 무거운 비트코인의 소액 결제를 가능하게 하였다.
세그윗 업데이트
- 블록에서 서명이 차지하고 있던 자리를 분리하여 블록당 담을 수 있는 트랜잭션 양을 증가시킨 업데이트
- 블록의 크기는 이전과 같지만, 서명 데이터를 분리해 더 많은 트랜잭션을 담을 수 있어, 한 번에 많은 거래량을 처리할 수 있도록 한 것이다.
- 하지만 이러한 노력에도 불구하고 비트코인은 탈중앙성과 보안성을 선택하고 확장성을 개선하는 방법을 선택한 네트워크이기 때문에 여전히 결제 수단으로써 확장성은 부족하다고 평가받는다.
해시
블록체인의 해시 함수 사용
블록체인의 해시 함수 사용 이유
- 블록체인은 탈중앙화된 분산 시스템으로 데이터의 안전성과 무결성이 보장되는 것은 중요한 문제이다. 이에 따라, 블록체인 데이터를 해시 함수를 사용하여 고유한 해시값으로 변환하여 저장함으로써 식별성, 무결성, 데이터 보안 등의 장점을 얻을 수 있다.
블록체인의 해시 함수 활용 예시
1. 트랜잭션 해시
- 블록체인에서 네트워크 참여자들 간에 전송되는 데이터 단위인 트랜잭션은 해시 함수를 거쳐 일정한 길이의 해시값으로 전환된다.
- 이를 통해 식별이 쉬워지고 트랜잭션 데이터가 변경되면 해시값도 변경되므로 무결성을 확인할 수 있다.
- 또한 해시 된 데이터는 원본 데이터로 복원이 어렵기 때문에, 블록체인에 저장된 데이터의 안정성이 높아진다.
2. 블록 해시
- 각 블록은 블록에 포함된 데이터를 기반으로 한 고유한 해시값을 가지고 있다.
- 이를 통해 블록들은 서로 구별되며, 특정 블록을 찾거나 검증할 때 해시값을 사용할 수 있다.
- 또한, 각 블록의 해시를 계산할 때는 이전 블록의 해시값도 포함되어 체인의 무결성을 보장한다.
3. 머클 트리(Merkle Tree)
- 블록체인의 무결성을 검증하기 위한 핵심적인 데이터 구조
- 여러 데이터에 대해 단계적으로 해시 함수를 적용하여 하나의 해시값으로 나타내는 데이터 구조
- 여러 개의 데이터 집합이 있을 때, 각각에 해시 함수 연산을 거친 해시값을 두 개씩 짝지어 다시 해시 함수 연산을 거치고, 이 과정을 하나의 해시값이 나올 때까지 반복하여 얻는 데이터 구조이다. 이때, 마지막 하나의 해시값을 머클 트리의 머클 루트라고 부른다.
- 데이터가 변조되었는지 확인할 때 각 데이터를 일일이 비교하기보다 머클 루트 값만 비교하면 되기 때문에 유용하다.
- 블록체인에서는 한 블록 내에 기록될 트랜잭션 집합을 가지고 머클 트리를 구성하고, 머클 루트 값을 사용하여 블록 해시값을 계산한다.
- 특정 블록에 기록된 트랜잭션을 단 하나라도 변경하는 경우, 블록은 체인처럼 모두 연결되어 있기 때문에 해당 블록 이후에 연결된 블록을 모두 수정해야 한다.
- 이미 전 세계에 분산된 블록체인에 올라간 데이터를 특정 부분부터 모두 수정한다는 것은 큰 비용이 들기 때문에, 이러한 구조로 되어 있는 블록체인은 위변조 하기 매우 어렵다.
'안드로이드 > etc.' 카테고리의 다른 글
[CS] 비트(bit)와 바이트(byte), 음수 표현법 (0) | 2024.11.27 |
---|---|
[Kotlin] 에러(Error)와 예외(Exception) (0) | 2024.11.20 |
[CS] HTTP와 HTTPS (0) | 2024.09.14 |