본문 바로가기
암호화폐

블록체인 원리 (탈중앙화) : 개발자 관점에서 심층있게 이해하기

by 스코리아 2025. 3. 3.
반응형

안녕하세요, 스코리아입니다.

오늘은 블록체인의 작동 원리, 즉 블록체인이 탄생한 배경과 블록체인의 핵심인 탈중앙화 기법, 보안, 투명성에 대해 개발자 관점에서 자세히 설명해 볼까 합니다.

 

블록체인 기술을 말로만 들으면 이해하기 어렵습니다. 어떤 암호화 기술이 적용되었고, 어떻게 탈중앙화 방식이 적용되었는지 구체적인 예시와 함께 이해한다면 쉬울 것입니다.

BlockChain

비트코인 (블록체인) 탄생 배경

비트코인이 처음 등장한 배경에는 여러 사회적, 경제적 요인이 있었지만, 가장 큰 원동력은 2008년 글로벌 금융 위기 때문이라고 볼 수 있습니다. 금융 위기 당시, 많은 은행과 금융 기관이 붕괴하거나 큰 손실을 입었고, 이로 인해 일반 시민들에게도 많은 경제적 피해가 발생했습니다. 이런 상황 속에서 중앙 집중식 금융 시스템에 대한 불신이 커졌고, 이는 탈중앙화된 금융 시스템에 대한 필요성을 부축였습니다.

출처: samsungsemiconductor

 

비트코인은 어떠한 중앙 기관의 통제도 받지 않습니다. 네트워크 참여자들이 직접 거래를 검증하고 원장을 유지함으로써, 중앙은행이나 금융 기관의 필요성을 제거합니다. 우리는 이러한 탈중앙화 방식이 어떻게 적용되었는지 자세히 알아볼 겁니다.

 

탈중앙화 방식을 이해하기 위해서는 먼저 SHA256 암호화 기법에 대한 이해가 필요합니다.

 

 

SHA256 해시

SHA256은 "Secure Hash Algorithm 256-bit"의 약자로, 디지털 메시지의 고유한 값을 생성하는 해시 함수입니다. 입력 데이터를 받아 256비트(32바이트) 길이의 해시 값을 출력합니다. 입력된 데이터가 변경될 때마다 출력되는 해시 값은 크게 변화하는데, 이러한 특성 때문에 데이터 무결성 검증에 매우 유용합니다.

https://www.youtube.com/watch?v=bBC-nXj3Ng4

하지만 역으로 출력된 해시 값을 보고 어떠한 메시지로부터 비롯되었는지는 확인할 수 없습니다. 즉 역추적은 불가능합니다.

(Demo : https://andersbrownworth.com/blockchain/hash)

이러한 SHA256 해시 기법은 비트코인의 핵심 기능인 마이닝(채굴)에서 주로 사용됩니다. 블록들이 체인에 연결되면서 블록체인의 무결성과 보안을 유지하는데 큰 기여를 하게 되는데, 아래에서 자세히 알아보겠습니다.

 

 

탈중앙화 Decentralization

비트코인의 핵심은 블록체인 기술입니다. 그 블록체인 기술의 핵심은 탈중앙화 방식이라고 할 수 있습니다.

은행처럼 중앙집권화된 방식이 아닌 탈중앙화 방식을 적용하려면, 모든 사람들이 거래 검증에 참여해야 된다고 볼 수 있습니다.

 

블록체인에서 모든 거래 정보는 실시간으로 Broadcasting 되는데, 이를 모든 사람(피어)들이 받아볼 수 있습니다. 이후 이 거래 트랜젝션이 유효한지 검증 후 블록을 만들어서 블록체인에 연결하는 과정을 거치게 됩니다.

 

(1) Block (= 장부)

Ledger(장부)에 'Alice가 Bob에게 20LD 금액만큼 주었다'와 같은 거래 트랜젝션 내용들이 담겨있다고 생각해 봅시다. 우리는 이 장부에 있는 내용을 Proof of Work(작업 검증)을 거쳐서 유효한 장부인지를 확인할 수 있도록 할 겁니다.

 

SHA256의 메시지(Input) 값을 장부의 트랜젝션 데이터들로 하여 해시값을 만들어봅시다. 이후 출력된 해시값을 2진수로 바꾸어 앞자리의 0의 개수가 30개(예시)가 되도록 계속 Nonce(Serial Number)를 찾는 것이 핵심입니다.

 

여기서 난스(Nonce)란, 장부 안에 있는 데이터 값으로 1부터 무한대까지 대입해 보면서 해시값의 앞자리 0 개수가 특정 개수가 되도록 하는 값입니다. 난스도 장부 안의 데이터 값이므로, 난스나 트랜젝션 데이터 값이 바뀌면 해시값도 바뀝니다. (SHA256의 핵심 원리)

 

그렇다면 앞자리 0의 개수는 무슨 기준으로 결정될까요? 바로 채굴 난이도에 따라 달라집니다. 즉, 채굴 난이도가 너무 쉬우면 앞자리 0의 개수를 늘려서 난이도를 높이는 것입니다. SHA256 해시값의 앞자리 0 개수가 10개가 되도록 하는 난스를 찾는 것보다 30개가 되도록 하는 난스를 찾는 것이 더 어려운 것처럼 말이죠. 참고로 비트코인은 10분마다 블록이 생성되며, 채굴난이도가 바뀐다고 합니다.

실제 블록체인 내에서는 장부가 '블록'입니다. 블록에는 자료(거래 트랜젝션 데이터들)가 담겨 있고, 난스(Nonce)가 존재합니다. 우리는 난스를 1부터 무한대까지 대입해 보면서 해시 값의 앞자리 0 개수가 특정 개수가 되도록 (여기서는 4개) 찾아봐야 합니다. 이것이 바로 채굴자가 하는 일입니다. 

 

이 예시 블록 사진에서는 test라는 데이터를 담았을 때 난스가 156384여야만, 해시 값의 앞자리 0 개수가 4개로 맞춰진 것을 볼 수 있습니다. 데이터 값이 변경되게 되면, 해시도 바뀌므로 난스값도 다시 찾아야 합니다. (Demo: https://andersbrownworth.com/blockchain/block)

 

 

(2) Blockchain (=장부들의 연결)

블록체인은 장부들의 연결, 즉 블록들의 연결이라고 볼 수 있습니다.

예시와 같이, SHA256 암호화 기법을 이용하여 장부들마다 앞자리 0의 개수가 특정 개수인 해시값을 생성합니다. 

블록 안에는 Prev Hash라는 값이 하나 들어가는데, 이는 이전 블록의 해시값이 무엇인지를 표현하게 됩니다. 블록들이 체인처럼 연결될 수 있도록 하는 것입니다.

예시를 보면, 빨간색 박스끼리와 파란색 박스끼리 해시값이 동일합니다. 

만약 이렇게 연결된 블록체인에서 중간의 하나의 블록이 손상되면 어떻게 될까요?

2번째 블록의 데이터 값을 수정해 보았습니다. 해당 블록의 해시값이 b7eb..로 수정되었습니다. 앞자리 0의 개수가 맞지 않으므로 다시 채굴(작업 증명)하여 난스값을 다시 찾아주어야 합니다. 하지만 다시 채굴을 하여 난스값을 바꾸고 해시값을 맞춰도, 뒤 블록의 '이전 해시값' 데이터가 변경되었으므로, 뒤 블록들도 전부 채굴(작업 증명)이 필요해져 버립니다. 이런 식으로 중간 블록의 데이터를 바꾸면 그 뒤의 모든 블록이 손상되게 됩니다. (Demo: https://andersbrownworth.com/blockchain/blockchain)

 

결국 블록은 앞의 블록의 해시값을 통해 앞 뒤가 연쇄적으로 연결되어 있기 때문에 블록체인이라고 부르게 되는 것입니다.

 

 

(3) Distributed Blockchain (분산 블록체인)

모든 피어들은 Broadcasting 되는 비트코인의 거래 트랜젝션 데이터를 수집할 수 있는데, 한 채굴자(피어)가 이 데이터들을 여러 개 수집하여 블록을 만들고 작업증명을 하여 난스값을 찾고 만든 블록을 Broadcasting 해주면 블록의 생성자가 됩니다.

블록을 1개 생성하게 되면, 블록을 생성한 채굴자에게 보상이 주어지게 됩니다. 보상액을 지급하는 주체가 없으므로 디지털 서명은 필요하지 않습니다. 또한 보상 금액은 비트코인의 반감기에 따라 시간이 지날수록 계속 반으로 줄어들고 있습니다.

여기서 한 명의 피어가 블록체인의 한 블록 데이터를 수정하여 다시 채굴하였다고 해도, 더 긴 블록체인을 유효한 블록체인으로 받아들이는 정책이 존재하여 잘못된 블록을 가진 피어를 걸러줄 수 있습니다. 즉, 다른 한 피어만 이상한 데이터를 가지고 있다면 민주주의의 법칙과 같이 다수의 정상적인 블록체인을 택하게 됩니다.

핵심은 둘 중에서 더 많은 계산 작업이 포함된 더 긴 블록체인만을 유효한 블록체인으로 받아들인다는 것입니다. 만약 두 개의 블록체인 길이가 같다면 어떨까요? 더 긴 블록체인 정보가 들어올 때까지 어느 한쪽은 선택하지 말고 기다려야 합니다.

 

한 채굴자가 작업증명을 통해 비이상적인 블록을 만들어서 블록체인에 블록을 연결한다고 해도, 그 채굴자가 계속 블록을 이어 붙여야만 유효한 블록체인으로 받아들여질 수 있습니다.

하지만 한 명의 채굴자가 블록을 계속 이어 붙이는 게 가능할까요? 모든 채굴자들의 컴퓨터 자원 50%에 근접하는 자원을 보유하지 못한다면 현실적으로 불가능한 이야기입니다. 혼자서 이어 붙이는 속도가 다른 채굴자보다 월등히 빨라야 하기 때문이죠.

그리하여 새로 생성된 브로드캐스팅 블록을 받자마자 신뢰하지 말고, 새 블록 몇 개가 더 추가될 때까지 기다린 후에 신뢰해야 합니다.

결국 이러한 방식이 중앙 통제가 아닌 탈중앙화에 도달할 수 있는 핵심키가 되었습니다.

 

 

(4) Token (토큰)

블록 안에는 A라는 사람이 B라는 사람에게 얼마를 보냈다는 트랜젝션 데이터들이 값으로 기록되어 있습니다. 이를 토큰이라고 합니다.

하지만 실제로는 보낸 사람과 받는 사람의 이름이 기록되어 있지는 않고, ECC 암호화 기법에서 사용되는 'Public Key'가 사용됩니다.

 

 

Public Key / Private Key 적용

암호화폐에서 공개 키와 개인 키를 사용하는 이유는 자신의 거래에 대해 서명함으로써 거래의 유효성을 입증하고 보안을 한층 더 높이기 위해서입니다. 블록 안의 트랜젝션 데이터들에는 이름 대신 보낸 사람의 Public Key와 받는 사람의 지갑 주소가 사용됩니다.

유저가 처음 암호화폐 지갑을 생성할 때 랜덤의 Private Key(개인 키)를 사용하여 Public Key(공개 키)를 생성하게 됩니다. (ECC 타원 곡선 암호화 기법) 이때 개인 키는 유저 본인만 알고, 공개 키는 대중에게 공개되는 주소로 사용됩니다.

 

참고로 공개 키는 실제 지갑 주소와는 다릅니다. 실제 지갑 주소는 공개 키를 이용하여 SHA-256 해싱 후 RIPEMD-160 해싱을 하고 Base58Check 인코딩을 통해 변환된 값입니다.

  • Sign(서명)을 할 때는 메시지와 개인 키를 이용하여 Signature를 만들 수 있습니다.
  • Verify(검증) 시에는 공개 키, 메시지, Signature를 통해 데이터의 무결성을 검증할 수 있습니다. 원문의 메시지와 다르면 검증에 실패하게 됩니다. 검증 시에는 개인키가 불필요합니다.

실제 블록 내 트랜젝션 안에서는 보내는 사람의 공개 키에서 받는 사람의 지갑 주소로 얼마를 보낼 건지에 대한 메시지가 담기게 됩니다. 이 메시지를 보내는 사람(자신)의 개인 키를 이용해 Sign(서명)을 하여 Signature를 생성하게 됩니다. 이 시그니처블록에 함께 담습니다.

이후 이 트랜젝션에서는 보내는 사람의 공개 키인 048d.. 와 Signature, 메시지 내용을 통해 검증이 이루어집니다. 메시지의 내용 중에 보내는 사람이나 받는 사람의 Key가 원문과 달라지거나 보낸 금액이 달라지게 되면, 검증에 실패합니다.

이제 완성된 블록은 위와 같습니다. 받는 사람, 보내는 사람의 이름 대신 유저의 공개키 혹은 지갑주소가 사용되었고, 트랜젝션마다 시그니처 메시지가 존재합니다. 이로써 블록은 Hash로 한번 무결성을 검증하고, 각각의 트랜젝션의 시그니처를 통해서 2차 검증이 진행되게 됩니다.

만약 가장 위에 있는 트랜젝션의 보낸 금액을 20달러로 수정해 버리면 어떻게 될까요?

  • 첫째, 블록 데이터 내용이 바뀌었기 때문에 해시값이 변합니다. 다시 채굴하여 난스값을 찾아야 합니다.
  • 둘째, 이후에도 해당 트랜젝션의 시그니처와 트랜잭션 메시지 내용이 일치하지 않으므로 유효한 거래로 판단하지 않습니다.

 

이렇게 개인키와 공개키를 이용하여 블록 내 트랜젝션에 대해 한번 더 서명하여 유효성을 개별적으로 검증하는 것은 보안을 한층 더 높여 유저의 자산을 보호하고 법적인 부분도 존재합니다. (블록체인에서 가장 긴 체인을 유효한 체인으로 선택하는 메커니즘은 네트워크 합의에 필요한 부분)

 

 

채굴자들의 보상

채굴자들이 얻는 Rewards(보상)은 두 가지 존재합니다.

Miners

  • 거래 수수료 (거래수수료가 포함된 트랜젝션을 다른 트랜젝션보다 먼저 블록에 포함시키려는 채굴자들)
  • 블록 생성에 대한 보상 (작업 증명을 통한 난스값 발견)

 

 

마무리

결국 비트코인은 다음과 같은 특징이 존재한다고 정리할 수 있습니다.

  • 탈중앙화: 어떤 중앙 기관의 통제도 받지 않고 네트워크 참여자들이 직접 거래를 검증하고 참여
  • 투명성, 개방성: 블록체인은 모든 거래 내역이 네트워크 참여자에게 공개되고 확인 가능
  • 보안: SHA256 알고리즘과 개인 키/공개 키를 사용하여 거래의 무결성과 안전성 보장

한 가지 아쉬운 점도 있습니다. 비트코인 내 한 개의 블록에는 최대 2400개의 트랜젝션만이 들어갈 수 있도록 제한되어 있는데, 이는 불필요한 제약이 아닐까 생각됩니다. 블록이 생성되는 시간은 매 10분으로 고정되어 있기 때문에 이는 상대적으로 느린 비트코인 처리 시간을 유발하고 높은 수수료를 지불하게끔 하기 때문입니다.

 

이 포스팅은 아래 유튜브 링크와 데모 사이트 링크를 참고하였습니다. 여러분들에게도 꼭 추천하는 영상과 링크입니다.

 


이상으로 블록체인의 원리와 탈중앙화에 대해서 자세한 예시와 함께 알아보았습니다.

읽어주셔서, 감사합니다.

 

반응형