티스토리 뷰

반응형

트랜잭션과 합의 알고리즘 – 블록체인의 신뢰를 만드는 기술

1. 트랜잭션(Transaction)이란?

트랜잭션은 블록체인 네트워크에서 자산(토큰, NFT 등) 또는 데이터가 이동하는 거래를 의미한다.
블록체인은 모든 트랜잭션을 검증하고, 정해진 합의 알고리즘에 따라 블록에 저장한다.

탈중앙화된 방식으로 신뢰성을 유지
디지털 서명을 통해 위변조 방지
모든 트랜잭션이 블록체인에 영구 저장됨


2. 트랜잭션의 구조와 데이터 저장 방식

반응형

① 트랜잭션의 주요 구성 요소

속성 설명

트랜잭션 ID(TXID) 트랜잭션을 식별하는 해시 값
보낸 사람(Sender Address) 송신자의 공개키 (Public Key)
받는 사람(Receiver Address) 수신자의 공개키 (Public Key)
서명(Digital Signature) 송신자가 생성한 암호화된 서명
트랜잭션 입력(Input) 사용된 이전 트랜잭션 (UTXO)
트랜잭션 출력(Output) 새로운 트랜잭션을 위한 데이터

🔹 트랜잭션 예제 (Python 코드)

import hashlib
import json

class Transaction:
    def __init__(self, sender, receiver, amount):
        self.sender = sender
        self.receiver = receiver
        self.amount = amount
        self.txid = self.calculate_txid()

    def calculate_txid(self):
        tx_data = json.dumps(self.__dict__, sort_keys=True)
        return hashlib.sha256(tx_data.encode()).hexdigest()

tx = Transaction("Alice", "Bob", 10)
print("Transaction ID:", tx.txid)

트랜잭션 ID는 데이터 해싱을 통해 생성
입출력 데이터와 서명으로 무결성을 보장


3. 트랜잭션 검증 과정 (디지털 서명 활용)

블록체인은 트랜잭션이 올바르게 생성되었는지 **디지털 서명(Digital Signature)**을 활용하여 검증한다.

① 공개키 암호화(Public-Key Cryptography) 개념

블록체인은 **공개키(Public Key)와 개인키(Private Key)**를 사용하여 트랜잭션을 보호한다.

  • 개인키(Private Key): 사용자가 소유한 비밀 키 (서명 생성)
  • 공개키(Public Key): 개인키로 생성된 공개 키 (서명 검증)

🔹 Python을 활용한 서명 생성 및 검증 예제

from ecdsa import SigningKey, VerifyingKey, SECP256k1

# 개인키(Private Key) 생성
private_key = SigningKey.generate(curve=SECP256k1)
public_key = private_key.verifying_key

# 메시지 서명
message = b"블록체인 트랜잭션"
signature = private_key.sign(message)

# 서명 검증
is_valid = public_key.verify(signature, message)
print("서명 유효성:", is_valid)

공개키와 개인키를 활용한 신뢰성 확보
누구나 서명을 검증할 수 있지만, 개인키가 없으면 변조 불가능


4. 합의 알고리즘(Consensus Algorithm)이란?

합의 알고리즘은 네트워크 참여자들이 어떤 블록을 승인할 것인지 결정하는 규칙이다.

트랜잭션 검증을 수행하고 네트워크의 무결성을 보장
악의적인 행위를 방지하고 신뢰할 수 있는 네트워크 유지


5. 주요 합의 알고리즘 비교

① PoW(Proof of Work, 작업 증명) – 비트코인 방식

작업을 통해 블록을 채굴 (연산 문제 해결)
높은 보안성, 그러나 전력 소비가 많음

🔹 PoW 블록 마이닝 예제

import hashlib

difficulty = 4  # 4개의 0이 앞에 있어야 함
nonce = 0
while True:
    data = f"블록 데이터 {nonce}".encode()
    hash_result = hashlib.sha256(data).hexdigest()
    if hash_result[:difficulty] == "0" * difficulty:
        print("블록 채굴 성공:", hash_result)
        break
    nonce += 1

② PoS(Proof of Stake, 지분 증명) – 이더리움 2.0 방식

네트워크 참여자의 지분(Staking)으로 블록 생성
PoW보다 에너지 효율적

🔹 PoS 기본 개념

  • 사용자가 자신의 코인을 스테이킹하면, 블록 생성 기회가 증가
  • 많은 코인을 보유한 노드일수록 블록 생성 확률이 높음

③ PBFT(Practical Byzantine Fault Tolerance, 비잔틴 장애 허용)

일정 수의 노드가 동의하면 블록이 승인됨
비트코인, 이더리움보다 빠른 합의 방식
허가형 블록체인(프라이빗 네트워크)에서 주로 사용

🔹 PBFT의 기본 과정

  1. 클라이언트 요청 → 트랜잭션 제출
  2. 리더 노드가 트랜잭션을 블록으로 생성
  3. 모든 노드가 블록을 검증 후 합의 수행
  4. 2/3 이상의 노드가 승인하면 블록이 블록체인에 추가됨

6. 블록체인 공격과 해결 방법

① 51% 공격(해시레이트 공격)

  • 한 채굴자가 전체 네트워크 해시의 51% 이상을 점유
  • 임의로 트랜잭션을 변경하거나 중복 사용(Double Spending) 가능

해결 방법: PoS 도입, 네트워크 참여자 분산, 난이도 조절

② 이중 지불(Double Spending) 문제

  • 동일한 코인을 여러 번 사용할 가능성
  • 비트코인은 PoW를 통해 이중 지불을 방지

해결 방법: PoW, PBFT, 블록 확인(Confirmations) 강화


7. 결론

트랜잭션은 블록체인의 핵심이며, 디지털 서명으로 보호됨
합의 알고리즘을 통해 신뢰할 수 있는 네트워크를 유지
PoW, PoS, PBFT 등 다양한 합의 방식이 존재

📌 다음 글에서는 블록체인의 보안성과 해킹 방어 기술을 다룰 예정 🚀

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형