지난 정리글에서는 비트코인이 과연 현금의 특징을 가지고, 실제로 현금을 대체할 수 있는지 여부에 대해서 정리해 보았다.
이번 글에서는 본격적으로 비트코인에 적용된 기술들에 대해서 정리해 보려고 한다.
1. 비트코인 기술 특징
비트코인의 기술들에 대해서 세부적으로 알아보기 전에, 전반적으로 비트코인에 어떤 기술들이 들어갔는지 정리해 보려고 한다. 비트코인에는 다음과 같은 기술들이 적용되어 있다.
- 암호학을 적용한 해시 함수
- Timestamped의 Append-only Logs
- 블록 헤더와 Merkle Trees 구조
- Asymmetirc Cytography와 디지털 서명
- Addresses
이외에도 많은 기술적 특징들이 존재하지만, 차차 알아보도록 하겠다.
2. 암호학을 적용한 해시 함수
먼저 알아볼 기술은 암호학이 적용된 해시 함수이다. 이는 다음 글이나 그 다음 글에서 더 자세히 정리를 시작할 예정이라, 이번에는 핵심 원리만 간단히 정리해 보려고한다.
해시 함수는 자료구조 시간에 이미 학습했던 개념이지만, 여기서는 암호학적 관점에서의 해시 함수 원리만 정리해 보려고 한다.
일반적으로, 해시함수는 다음과 같은 원리로 작동한다.
- 무수히 많은 입력값(x)에 대해서 고정된 사이즈의 출력값(y)이 존재한다.
- 같은 입력값 x에 대해서는 항상 동일한 해시값이 생성된다.
- 계산 과정이 매우 빠르고 효율적이다.
즉, 정리하면, 해시 함수란 "무수히 많은 입력값에 대해서 항상 고정된 크기의 출력값을 반환하는 함수" 라고 할 수 있다. 그림으로 이해하면 다음과 같다.

예를 들어, 아무리 많은 입력값 x가 존재하더라도 해시 함수를 적용하면 항상 일정한 크기의 출력값이 생성된다. 만약 해시 함수의 출력 크기가 3이라면, 서로 다른 입력값들이라도 세 자리짜리 결과값으로 압축되어 나타난다.
이렇게 되면, 서로 다른 입력값이 동일한 해시값을 가지는 현상, 즉 해시 충돌(Collision)이 발생할 수 있다. 이는 자료구조 시간에 배운 것처럼 다음과 같은 방식으로 해결할 수 있다.
- 체이닝(Chaining): 같은 해시값이 발생하면 해당 버킷에 Linked List 형태로 데이터들(x값들)을 연결
- 오픈 어드레싱(Open Addressing): 해시 테이블의 다음 비어 있는 위치에 데이터를 저장
이처럼 해시를 적용하게 되면, 입력값 x에 대해 출력값 y값을 결정하는 것은 쉽고 그 반대도 불가능하지 않지만, 쉽지 않다. 그렇다면 이러한 해시의 특성이 보안이 중요한 블록체인에서는 어떻게 활용되었을까?
블록체인에서는 일반적인 해시 함수가 아닌, 암호학적 해시 함수(Cryptiographic Hash Function)를 사용한다. 이 함수는 다음과 같은 특징을 지닌다.
- Preimage resistant (One way): Hash(x)로부터 x를 구하는 것은 매우 힘들다.
- Collision resistant: Hash(x) = Hash(y)가 되는 x와 y를 찾기는 매우 힘들다. 즉, 충돌이 거의 일어나지 않는다.
- Avalanche effect(눈사태 효과): x를 아주 살짝만 변경해도 Hash(x)도 분명하게 변한다. 이를 통해 위/변조를 쉽게 탐지할 수 있다.
- Puzzle friendliness(난도 조절성): Hash(x)와 x의 일부분을 알고 있더라도, 전체 x를 찾는 것은 매우 힘들다. 이는 채굴 과정의 난도 조절에 활용된다.
이러한 특성 덕분에 블록체인은 보안을 유지하면서도 해시 충돌 문제를 사실상 방지할 수 있다. 블록체인은 각 블록이 이전 블록을 해시 포인터(Hash Pointer)로 가리키는 구조를 가진다.

+) 블록체인이 안전한 이유: 만약 악의적인 사용자가 기존 블록의 일부분을 수정한다면, 그 순간 Avalanche Effect에 의해 해당 블록의 해시값이 완전 다른 값으로 변하게 된다. 이때 이후 블록들이 모두 이전 블록의 해시값을 포함하고 있으므로, 하나라도 변조되면 해시 포인터가 끊기게 되어 체인 구조가 깨지게 된다. 따라서 블록체인은 구조적으로 변조가 매우 어렵고, 공격으로부터 아직까지는 안전하다.
2. Timestamped Append-only Logs
다음으로 알아볼 특징은 시간순(append-only) 구조이다. 블록체인은 아래 그림처럼 이전 블록의 해시값을 포함하는 연결 구조로 이루어져 있다.

각 블록은 크게 블록 헤더(Block Header)와 거래 내역(Transaction List)으로 구성된다. 그중에서도 블록 헤더에는 다음과 같은 주요 정보가 포함되어 있다.
- 블록 1번의 헤더에는 다음과 같은 정보가 포함되어 있다.
- 이전 블록 헤더의 Hash 값
- Timestamp: 해당 블록이 생성된 시간
- Nonce(Number used once): 채굴 과정에서 사용되는 일회용 난수
- Merkle Root의 Hash: Merkle tree의 root 해시값
- 또, 해당 블록의 헤더의 해시값이 그 다음에 포함되고,
- Transaction(거래 내역) 리스트가 포함되어 있다.
각 블록의 헤더는 이저 블록의 해시값을 포함한다. 즉, 블록 1의 헤더 해시값이 블록 2의 헤더에 포함되고, 블록 2의 헤더 해시값은 다시 블록 3의 헤더에 포함된다.
이렇게 새로 생성된 블록은 항상 이전 블록을 해시 포인터(Hash Pointer) 형태로 가리키게 된다. 결과적으로, 모든 블록은 앞선 블록과 시간 순서대로 연결되어 있으며, 블록 전체가 하나의 체인 구조를 이루게 된다.
이 구조로 인해, 블록체인은 append-only, 즉, 기존 데이터는 수정할 수 없고, 새로운 블록만 추가할 수 있는 특징을 가진다. 만약 채굴자가 블록 2를 새로 생성했다면, 그 블록에는 반드시 이전 블록(블록 1)의 헤더 해시값이 포함되어야 한다. 즉, 새로 생성된 블록은 항상 이전 블록의 존재를 알아야 만들어질 수 있으며, 이 때문에 블록체인은 시간 순으로만 확장된다.
+) 헤더에 Difficulty target도 블록 헤더에 포함되어 있는데, 이는 채굴의 난이도를 조정하기 위한 필드로, 후에 정리할 것이지만, 다음과 같다.
- 보통 2주 단위(2016개 블록)로, 블록 채굴의 평균 시간을 구한다.
- 블록 채굴은 10분에 한 번씩 이루어지는 것이 이상적이다.
- 이때, 블록 채굴 평균 시간이 10분 보다 짧다면, 채굴이 쉽다고 생각해 난이도를 높린다.
- 블록 채굴 평균 시간이 10분 보다 길다면, 채굴이 어렵다고 생각해 난이도를 낮춘다.
이렇게 블록 채굴의 난도를 동적으로 조정하며, 채굴 속도를 일정하게 유지하고, 채굴자들이 비트코인 시스템을 떠나지 않게 사용자를 붙잡아두는 효과를 발생시킨다.
3. Merkle Tree
앞서 살펴본 블록 헤더에는 여러 기술이 포함되어 있었는데, 그중 하나가 Mekrle Tree이다. 머클 트리는 블록 내의 모든 거래(Transactions)를 요약하고 검증하기 위한 트리 구조이다.
Merkle tree는 이진 트리 구조라고 생각하면 된다. 정확히는 Hash로 이루어진 이진 트리인데, 다음 그림과 같은 구조로 되어 있다.

구조에 대해 설명하면 다음과 같다.
- data 0, data1, data2, data3에는 각각 transaction(거래 내역) 정보가 들어가 있다.
- 각각의 데이터에 해시를 적용시킨 값을 통해 새로운 노드(H0, H1, H2, H3)들을 만든다.
- 그 생성된 노드들에 또 해시를 적용 시켜 상위 노드(H4, H5)를 만든다.
- 동일 구조가 반복되며, 최종적으로 Root에 위치한 노드는 해시에 해시를 적용시킨 값이 생성된다.
즉, 각 transaction 정보에 해시값을 적용시키고, 이를 반복적으로 상위 노드에 해시를 적용하면서 최종적으로 Root Hash값을 만든다. 이 root 값은 블록체인의 header 값에 포함된다.
이 구조를 파악하면, 블록체인의 보안 원리도 이해할 수 있다. 만약 누군가가 블록 내의 트랜잭션을 악의적으로 변경해도, data값이 변동되며 상위 노드들의 값들도 바뀌게 된다 이를 통해 기존 Merkle tree와는 완전히 바뀌게 되며, Root Hash값도 바뀌게 된다. 따라서, 블록 헤더에 해시값에 변동이 생겨, 블록체인의 전체 구조가 깨지게 된다는 것을 알 수 있다.
4. Asymmetric Cryptography와 디지털 서명
다음으로 알아볼 기술적 특징은 Asymmetic Cryptography와 디지털 서명이다. 이는 다음 장에 더 자세히 다룰 것이라 이해만 하고 넘어가면 될 것 같다.
블록체인은 Asymmetic Cryptography를 이용하는데, Asymmetric Cryptography는 이름 그대로 서로 다른 두 개의 키 Public Key와 Private Key를 사용하는 암호화 방식이다. 다음과 같은 구조로 사용된다.

그림에 대해 설명하면,
- 사용자 A가 사용자 B에게 메세지를 보내려고 한다.
- 이때, 사용자B의 Public Key로 보내려는 메세지를 암호화 한다.
- 암호화한 메세지를 받은 사용자 B는 가지고 있던 Private Key로 해당 메세지를 복호화한다.
- 사용자 B는 사용자 A가 보낸 원문 메세지를 확인할 수 있다.
이처럼 Asymmetric Cryptography 방식을 통해 '누가 메세지를 보냈는지', '메세지가 중간에 변조되지 않았는지' 등을 검증할 수 있다. 이 개념을 활용해 디지털 서명 기술로 이어지게 된다. 즉, 제 3자의 인증 기관에 의존하지 않고도, 블록체인 내부에서 비트코인 거래의 신뢰성과 무결성을 스스로 보장할 수 있다.
디지털 서명에 대해서도 간단히 알아보자. 블록체인에는 Asymmetric Cryptography를 기반으로 한 디지털 서명 알고리즘을 사용한다. 디지털 서명은 다음과 같은 방식으로 검증된다.
- 키 생성: 한 사용자는 Public Key(PK)와 Private Key(sk)를 랜덤 넘버로 생성한다.
- 서명: Private Key를 통해 메세지에 전자서명을 한다.
- 검증: 해당 메세지에 대한 서명이 유효한지 Public Key로 검증한다.
이때, 중요한 점은 Private Key를 통해 Public Key를 만들 수 있지만, 그 역은 성립하지 않는다. 비트코인에서는 이러한 서명을 만들기 위해 Elliptic Curve Digital Signature Algorithm(EDCSA, 타원곡선 전자서명 알고리즘)을 사용한다.
5. Addresses
다음으로 알아볼 기술은 비트코인 주소이다. 비트코인 주소는 사용자가 BRC를 받고 보내는 데 사용되는 식별자로, 다음과 같은 단계로 생성된다.
- Wallet이 random number(난수)로 Private Key(이 키로 디지털 서명을 하며, 돈(BTC)을 보낸다.)를 생성한다.
- 이 Private key를 통해 Public key를 생성한다.
- Public key에 이중해시(SHA256 + RIPEMC-160)를 적용하고 그 값에 다시 BASE 58을 적용해 주소를 생성한다.
- 해당 주소로 돈(BTC)을 받는다.
+) 이중해시를 적용한 결과에 다시 Double SHA-256을 적용해 Checksum 부분을 만드는데, 주소가 실제로 존재하는 주소인지 검증하는 부분이다.
+) BASE 58은 대소문자(52) + 0~9(10) + '/', '+' 중 헷갈리는 것들(l,1 등)을 제외하고 이것들로 0과 1로 나타낸 식을 표현하는 것이다.
6. Transaction Format
다음으로 알아볼 것은 블록체인에 포함되는 transaction(거래 내역)의 포맷이다 이도 뒤에 자세히 설명할 것이라 이해만 해두자. 일단, 포맷은 다음과 같다.

이 트랜잭션 포멧에 대해 설명하면,
- Input
- 이전 트랜젝션 ID의 인덱스 번호(여러 개가 들어갈 수 있다.)
- 디지털 서명: 트랜잭션을 발생시킨 당사자를 입증할 수 있는 디지털 서명
- Output
- Value: 해당 목적지로 얼마를 보낼 것인지
- Public Key: 해당 주소를 가진 사람의 Public Key
- lock_time: 해당 트랜잭션이 언제부터 유효할지 지정해주는 것
예를 들어 설명하면, 다음과 같다.
- 사용자 A가 1BTC를 사용해 사용자 B의 0.5BTC 만큼의 차를 사고 싶다.
- 사용자 A는 Input에 이전 트랜잭션(1BTC가 저장된 주소)의 인덱스를 가져온다.
- 사용자 A는 1BTC가 본인 소유임을 증명하는 디지털 서명을 Input에 포함시킨다.
- Output에는 B의 주소에 해당하는 public key값과 B의 계좌에 0.5 BTC를 보낸다는 Value를 입력한다.
- 또한, 남은 0.5BTC를 다시 본인(사용자 A)의 Address에 저장한다. 이때, 유의해야 될 점은 1BTC가 있었던 주소와 지금 0.5BTC를 저장하는 Address는 엄연히 다른 주소이다.
- 최종적으로는 Input은 1개, Output은 2개가 생기는 트랜잭션이 발생한다.
정리하면, 트랜잭션은 이전 트랜잭셕의 Output을 참조하여 새로운 Input으로 사용하고, 새로운 Output을 만들어내는 구조로 되어있다. 이 과정을 통해 비트코인은 제 3자(중앙 기관) 없이도 투명하게 검증할 수 있는 거래 시스템을 구현할 수 있다.
다음 예시를 한 번 살펴보자.

예시에 대해서 다시 살펴 보면,
- Inputs
- TXID(Transaction ID) 6번의 IDX(Index) 3번에서 3BTC, TXID 20번의 IDX 2번에서 2BTC, TXID 42번의 인덱스 5번에서 5BTC, 총 10BTC를 이 트랜잭션에서의 Input으로 사용한다.
- Outputs
- 비트코인 목적지(Address) 1번으로 6BTC, 2번으로 3BTC를 보내고, 3번으로는 0.9BTC를 보낸다. 이때, 3번은 트랜잭션을 발생시킨(지출을 한) 사용자의 새로운 주소이다.
이때 생기는 궁금증은 나머지 0.1 BTC은 어디로 갔을까? 바로 이 금액이 Transaction Fee(거래 수수료)이다. 0.1BTC는 바로 이 트랜잭션이 포함되는 블록을 채굴한 채굴자가 챙기는 일종의 거래 처리 수수료로, 채굴자는 이 수수료와 함께 채굴 보상(Block Reward)도 추가로 받는다.
+) 트랜잭션 수수료는 반드시 있어야 하는 것은 아니다. 채굴자가 원한다면 수수료가 없는 트랜잭션만 포함한 블록을 채굴할 수도 있다. 이 경우 채굴자는 채굴 보상만 얻겠다는 의도이다.
- Coinbase Transaction
추가로, coinbase transaction이라는 것이 있는데, 이는 PoW(Proof of Work)의 보상이다. 다시 말하면, Input이 존재하지 않고, Output만 존재하는 트랜잭션이다. 즉, 새로 생기는 비트코인이라고 생각하면 된다. 채굴자들이 보상을 받을 때, 이런 형식으로 비트코인을 받게 된다.
맨 처음 채굴 보상은 50BTC였다. 그렇지만, 비트코인 특성 상 수가 제한적이기 때문에, 채굴 보상도 떨어지는데, 210,000 블록마다 1/2로 준다. 현재 채굴 보상은 3.125BTC이다.
추가로, Coinbase Transaction은, 즉 보상으로 받은 BTC는 생성 직후 바로 사용할 수 없다. 해당 트랜잭션이 포함된 블록 위로 100개의 새로운 블록이 더 생성될 때까지 다른 트랜잭션의 Input으로 사용되지 못한다. 이는 블록을 채굴하고 채굴 보상을 획득하는데, 채굴한 블록이 진짜 체인에 포함되지 않았을 수도 있기 때문에, 시간 유예를 두는 것이다.
+) 블록에서 제외되는 경우는 아래와 같다.

위 그림에 대해서 설명하면,
- 채굴자 A와 채굴자 B가 동시에 블록을 채굴하고, broadcast도 거의 동시에 이루어졌다.
- 이때, 블록체인에서 일시적인 분기가 발생하게 된다.
- 후에, 다른 채굴자들 중 어떤 채굴자는 A의 블록에다가, 어떤 채굴자는 B의 블록에다가 연결해 블록을 채굴한다.
- 시간이 지나 두 체인 중 더 긴 체인이 진짜 블록체인이 된다.
- 채굴자 A가 채굴한 블록을 포함해 그 뒤에 연결돼서 채굴된 블록들은 orphan 블록이 되어 체인에서 제외된다.
따라서, 채굴자 A와 B가 채굴하자마자 채굴보상을 주고 바로 사용가능하게 하면, 채굴자 A는 진짜 체인에 포함되지 않아도 채굴을 성공했다는 사실만으로도 보상으로 BTC를 바로 쓰게 되고, 이는 네트워크 신뢰성에 큰 문제가 생긴다. 따라서 채굴 보상을 100블록 이후에만 사용 가능하도록 유예 기간을 둔다.
7. Decentralized Networks
블록체인은 decentralized networks(탈중앙화 네트워크)이다. 즉, 중앙에서 명령을 내리는 존재 없이 참여자(Peer)들이 서로 연결되어 있는 구조(P2P)이다.이 탈중앙화 네트워크에서는 자연스럽게 Byzantine Generals Problem이 있다.
- 전장에서 적군 성을 포위하는 5개의 장군이 이끄는 부대가 있다.
- 적군 성을 오전 10시에 동시에 공격하기로 합의(Consensus)했다.
- 5명의 장군이 모두 동시에 공격해야 성공하지만, 1명의 장군이라도 후퇴하면 공격은 실패한다.
- 이때, 장군들 사이에는 전갈을 주고 받을 수 있지만, 서로를 확실히 신뢰하지 못한다.
즉, 중앙 지휘관 없이 동등한 위치의 여러 장군들이 존재하기 때문에 모두가 동일한 결정을 내리고 행동하도록 만드는 것이 어렵다. 이것이 바로 분산 네트워크에서 합의(Consensus)를 이루기 어려운 이유이다
블록체인은 이 문제를 어떻게 해결했을까? 블록체인은 이 문제를 해결하기 위해, 참여자들이 정직하게 행동하도록 설계했다.
합의를 이루기 위해 여러가지 방법이 존재한다. 예를 들어,
- 약속을 어긴 사용자에게 벌을 주고 약속을 지킨 사용자에게 더 큰 보상을 주거나,
- 지키지 않은 사용자에게만 강력한 불이익을 주는 방식 등이 있다.
그러나 블록체인은 조금 다른 접근을 선택했다. 약속을 지킨 이에게도, 약속을 어긴 이에게도 모두 보상(Incentive)을 주는 방식으로 Consensus를 이룬다. 즉, 모든 참여자가 자신의 이익을 위해서라도 정직하게 행동하도록 유도한다.
예를 들어, 블록 하나를 가로채기 위해 해당 블록의 해시값만 구해야하는 것이 아니라 이전까지 채굴된 모든 블록의 해시값을 새로 계산해서 바꾸어 주어야 하며 얻는다해도 보상과 들이는 비용보다 현저히 적다.
결국 블록체인에서는 정직하게 채굴하고 규칙을 따르는 것이 가장 이익이 되는 구조가 된다. 이렇게 설계한 시스템 덕분에 블록체인은 중앙 기관 없이도 합의(Consensus)를 이룰 수 있다.
7. PoW(Proof of Work, 작업 증명)
위에서 설명한 비트코인이 합의를 이루는 방식이 바로 PoW이다. 이는 실제로 일을 했다는 증거를 요구하는 시스템으로, 누구나 쉽게 참여할 수 있지만, 결과를 얻으려면 컴퓨팅 자원을 많이 써야 한다는 특징이 있다.
예를 들어, 스팸 메일을 거르는 방식에 대해서 알아보자.
누군가가 이메일을 보낼 때, 메일 서버는 보내려는 사람이 진짜 사용자인지 스팸 발송자(봇)인지 구분해야 한다. 스팸 메일 발송자는 하루에 수십만개를 보내기 때문에, 메일 중앙 서버가 모든 메일을 직접 검증하기에는 비용이 너무 크다. 그래서 다음과 같이 스팸 메일을 거를 수 있다.
- 메일을 보내려는 사람은 메일 내용과 함께 임의의 숫자(Nonce)를 조합해서 Hash(메일 내용 + Nonce)값을 계산한다.
- 그 결과 해시값이 특정 조건을 만족해야 메일이 전송된다. ex) 해시값의 앞부분이 00000으로 시작해야 된다.
- 조건을 만족하는 해시를 찾기 위해서는 Nonce(0,1,2,...)를 계속 바꿔가며 계산을 반복해야 한다.(=Work)
- 한 번 조건을 만족하는 해시값을 찾으면, 그 결과값을 Proof로 메일에 함께 첨부한다.
- 즉, 서버는 메일 앞부분이 00000로 시작하면 스팸일 가능성이 낮다고 판단해 메일을 신뢰하고 보낸다.
스팸 메일을 보내는 사용자(봇)는 메일마다 매번 00000으로 시작하는 해시를 Nonce를 바꿔가며 찾아야 하는데, 어마어마한 계산량이 필요하므로, 이 일은 사실상 불가능하다.
이러한 아이디어가 블록체인에도 적용이 됐다. 다음 그림을 살펴보자.

그림에 대해서 설명하면,
- 채굴자는 이전 블록 해시값 + Merkle Root 해시값 + Timestamp + Nonce를 조합해 SHA256 해시 함수를 적용한다.
- 이때, 앞의 3개는 모든 채굴자에게 동일하게 알려져 있는 값이며, 채굴자는 오직 Nonce값을 일일이 변경해가며 SHA256을 적용해야 한다.
- 블록해시의 목표값보다 작으면 채굴에 성공하며, 블록을 네트워크에 broadcast하고 보상을 획득한다.
이때, 블록해시 목표값 앞에 있는 0의 개수는 Difficulty(난이도)이다. 즉, 해시 결과의 앞부분에 0이 많을수록 더 작은 값이 되어야 하므로, 채굴 난이도는 그만큼 높아진다. 반대로 앞의 0이 적을수록 조건을 만족하기 쉬워져 난이도가 낮다는 것을 의미한다.
+) 채굴자는 Nonce로, 0000 0000 0000 0000 0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 1111 1111까지 총 2^32(약 40억)번을 시도해야 하며, 모든 Nonce값을 다 시도해도 유효한 해시값을 찾지 못하면, 트랜잭션을 약간 수정해 Merkle Root 해시값을 변경한 뒤, Nonce를 다시 0부터 시도한다.
비트코인의 PoW Difficulty는 다음과 같이 설명할 수 있다.
- 10분에 1개의 블록이 생성되는 것이 이상적이다. 그렇다고 정확히 10분에 블록 하나가 생성되는 것은 아니다.(난이도 조정 가능, 블록해시 목표(target)의 0을 조정함으로써)
- 매 2016 블록마다 프로그램에 의해서 난이도가 조정된다.(약 2주다.)
- Genesis Block(비트코인의 맨 처음 블록, 2009년 1월 3일)은 target의 0의 개수가 10개였다. 당연하게도, 현재는 0의 개수가 더 많아졌다.
'학교공부 > [블록체인]' 카테고리의 다른 글
| [블록체인] - 비트코인_트랜잭션 (0) | 2025.12.11 |
|---|---|
| [블록체인] - 비트코인 (0) | 2025.12.11 |
| [블록체인] - Cryptography for Blockchains (0) | 2025.12.11 |
| [블록체인] - 비트코인과 현금 (0) | 2025.09.29 |
| [블록체인] - 비트코인 프롤로그 (0) | 2025.09.29 |