단순 지불 검증 (Simplified Payment Verification, SPV)

중급블록체인수정일

단순 지불 검증(SPV, Simplified Payment Verification)은 블록체인 전체를 내려받지 않고도, 블록 헤더와 머클 증명만으로 특정 트랜잭션이 블록에 포함되었는지 확인하는 방법입니다. 사토시 나카모토의 비트코인 백서 8장에 처음 소개되었고, 이 방식을 쓰는 지갑을 SPV 지갑 또는 라이트 지갑이라고 부릅니다.

자세히 알아보기

SPV 클라이언트는 각 블록의 80바이트 헤더만 내려받아 작업 증명이 가장 많이 쌓인 헤더 체인을 확인합니다. 그다음 풀 노드에게 자신과 관련된 트랜잭션과 그 트랜잭션이 머클 트리 안에 있음을 보여 주는 머클 경로를 요청합니다. 머클 경로로 계산한 값이 헤더의 머클 루트와 일치하면 그 트랜잭션이 해당 블록에 들어 있음을 확인할 수 있고, 그 위에 쌓인 블록 수(컨펌)로 확정 정도를 판단합니다.

장점은 저장 공간과 대역폭을 크게 아낀다는 것입니다. 수백 GB에 이르는 비트코인 블록체인 대신 헤더만 저장하므로 스마트폰에서도 쓸 수 있습니다. 대신 한계도 분명합니다. SPV는 트랜잭션이 블록에 '포함되었는지'는 확인하지만 그 트랜잭션이 모든 합의 규칙을 지켰는지는 직접 검증하지 않고, 다수 채굴자가 정직하다고 가정합니다. 또 연결된 노드가 관련 트랜잭션을 숨길 수 있고, 요청 내용으로 사용자의 주소가 노출되는 프라이버시 문제가 있습니다.

과거에 쓰이던 블룸 필터 방식(BIP-37)은 프라이버시 문제가 커서, 이후 노드가 블록별 필터를 제공하고 클라이언트가 직접 판단하는 압축 블록 필터(BIP-157/158) 방식이 도입되었습니다.

SPV의 신뢰 모델을 정확히 이해하면 어떤 금액에 적합한지 판단할 수 있습니다. 일상적인 소액 결제에는 충분히 실용적이지만, 큰 금액을 받거나 사업적으로 입금을 처리한다면 풀 노드로 직접 검증하는 편이 안전합니다. 사토시의 백서도 결제를 자주 받는 사업자는 독립적인 보안과 빠른 검증을 위해 자체 노드를 운영하는 것이 좋다고 언급합니다.

블록체인·암호화폐에서는

일렉트럼 같은 비트코인 라이트 지갑과 많은 모바일 지갑이 SPV 원리를 활용합니다. 더 높은 보안과 프라이버시가 필요하면 자신의 풀 노드를 운영하고 지갑을 그 노드에 연결하는 것이 권장됩니다.

이더리움에서도 비슷한 목적의 라이트 클라이언트가 있으며, 2021년 비콘 체인의 알테어(Altair) 업그레이드로 검증자 일부로 구성된 동기화 위원회(sync committee)가 도입되어, 그 서명으로 헤더를 가볍게 검증하는 라이트 클라이언트가 가능해졌습니다. 원리는 다르지만 '전체를 받지 않고 최소한의 증거로 확인한다'는 목표는 같습니다.

쉽게 말하면

도서관의 모든 책을 집에 들이지 않고, 목차와 해당 페이지의 확인 도장만 받아 "이 내용이 이 책에 실려 있다"고 확인하는 것과 같습니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.