간편 지불 검증(SPV)
간편 지불 검증(Simplified Payment Verification, SPV)은 비트코인 전체장부를 내려받지 않고도 거래가 블록에 포함되었는지 확인하는 방식입니다. SPV를 구현한 경량 서명 장치 앱은 휴대폰처럼 저장 공간과 통신량이 제한된 기기에서도 사용할 수 있습니다. 서명 장치 앱에서 개인키로 거래에 서명하는 기능과 SPV로 기록을 확인하는 기능은 다릅니다. SPV 검증 자체에는 개인키가 필요하지 않습니다. 가벼운 앱이라고 해서 모두 SPV를 수행하는 것은 아니며, 서버의 조회 결과에만 의존하는 앱도 있습니다.
전체장부 대신 블록 헤더를 받는다
비트코인 장부 전체는 거래 기록이 쌓이면서 계속 커집니다. 반면 블록 헤더는 하나에 80바이트로, 거래 본문을 포함한 전체 블록보다 저장 공간을 훨씬 적게 차지합니다. 휴대폰이나 작은 기기에도 저장하기가 쉽습니다.
블록 헤더에는 앞 블록의 해시와 작업증명을 확인할 수 있는 정보가 들어 있습니다. 따라서 헤더만 이어 보아도 전체장부의 연결 관계를 따라가고, 어느 체인이 더 많은 누적 작업량을 쌓았는지 비교할 수 있습니다.
다만 헤더만으로는 블록 안에 담긴 거래의 구체적인 내용이나 그 내용이 모든 규칙에 맞는지까지 알 수 없습니다. 목차만으로 책의 장과 순서는 알 수 있지만 본문을 읽을 수는 없는 것과 비슷합니다. (Bitcoin Developer Guide)
거래가 포함되었는지 확인하는 방법
SPV를 구현한 앱은 서버에 자신의 거래가 어느 블록에 포함되었는지 묻습니다. 서버는 거래의 위치와 함께 블록에 포함되었다는 것을 보여 주는 증명 자료를 보냅니다.
앱은 이 자료를 직접 계산해 블록 헤더에 기록된 값과 대조합니다. 결과가 맞으면 해당 거래가 그 블록에 포함되었다고 확인할 수 있습니다. 이후 헤더 위에 몇 개의 블록이 더 쌓였는지도 세어 거래가 얼마나 묻혔는지 확인합니다.
이 과정은 도서관의 목차와 사서를 함께 이용하는 일과 닮았습니다. 사서에게 내 이름이 어느 장에 있는지 묻되, 사서가 알려 준 쪽수가 내가 가진 목차와 맞는지는 직접 대조하는 방식입니다.
풀노드와 확인 범위가 다르다
SPV는 풀노드와 같은 범위의 검증을 하지 않습니다.
- 풀노드는 전체장부를 내려받아 거래와 블록이 규칙에 맞는지 직접 검사합니다.
- SPV는 블록 헤더와 증명 자료를 이용해 거래가 블록에 포함되었는지 확인합니다.
- SPV는 거래 내용 자체가 모든 규칙에 맞는지까지 독립적으로 검증하지 않습니다.
따라서 SPV는 가벼움을 얻는 대신 검사 범위를 좁힌 선택입니다. 포함 여부와 확인 횟수는 직접 확인하지만, 거래의 유효성은 모든 규칙을 직접 검사해 판단하지 않습니다. 백서 8절은 정직한 측이 네트워크의 계산 능력에서 우위를 유지한다는 조건을 설명합니다.
편리함에 따르는 비용
SPV를 구현한 경량 서명 장치 앱은 휴대폰에서도 실행할 수 있고 처음 동기화하는 부담도 작습니다. 어떤 앱이 헤더와 포함 증명을 직접 검증하는지, 아니면 서버의 조회 결과에 의존하는지는 해당 앱의 기술 문서를 확인해야 합니다.
조회 방식에 따라 앱이 자신의 주소와 거래 내역을 조회 서버에 알려야 할 수 있습니다. 포함 증명을 직접 확인해도 서버가 거래 정보를 누락하거나 응답을 끊을 수는 있습니다. 여러 서버에 물어보는 방식으로 한 서버에 대한 의존을 줄이기도 하지만, 풀노드와 같은 범위를 검증하는 것은 아닙니다. 비트코인 개발자 문서는 이런 정보 누락과 사생활 노출 문제를 설명합니다.
선택의 중간 지점
모든 것을 외부 서버에 맡기는 방식과 전체장부를 직접 검증하는 방식 사이에는 여러 선택지가 있습니다. 집에 풀노드를 두고 휴대폰 서명 장치 앱을 그 노드에 연결하면, 휴대폰의 가벼움과 자신의 노드에 기반한 조회를 함께 추구할 수 있습니다.
어떤 방식을 사용할지는 저장 공간, 편리함, 사생활, 직접 확인하려는 범위를 어떻게 정하느냐에 따라 달라집니다.
간편 지불 검증을 한 문장으로 정리하면
SPV는 블록 헤더와 증명 자료를 직접 검증해 거래가 블록에 포함되었는지 확인하는 방식입니다. 전체장부를 직접 검증하지 않는 대신 적은 저장 공간으로 사용할 수 있습니다. 사용하는 앱이 실제로 어떤 자료를 직접 검증하는지 확인하면, 가벼움과 독립 검증 사이에서 무엇을 선택했는지 알 수 있습니다.