"SPV"의 두 판 사이의 차이
(→약점) |
(→약점) |
||
22번째 줄: | 22번째 줄: | ||
# SPV가 트랜잭션이 아닌 블록에 있다고 생각하도록 속일 수는 없지만 그 반대는 가능하다. 전체 노드는 누락으로 인해 SPV가 트랜잭션이 발생하지 않았다고 쉽게 믿을 수 있으며, 이는 서비스 거부 (Denial of Service)의 한 형태로 간주 될 수 있다. 하나의 완화 전략으로는 다수의 전체 노드에 연결하여 각 노드에 요청을 보내는 것이고, 정체성은 본질적으로 무료이기 때문에 대역폭을 많이 소모 할 수 있기 때문에 네트워크 파티셔닝이나 Sybil 공격으로 이 문제를 해결할 수 있다. SPV가 정직한 노드에서 끊어지지 않도록 주의해야한다. | # SPV가 트랜잭션이 아닌 블록에 있다고 생각하도록 속일 수는 없지만 그 반대는 가능하다. 전체 노드는 누락으로 인해 SPV가 트랜잭션이 발생하지 않았다고 쉽게 믿을 수 있으며, 이는 서비스 거부 (Denial of Service)의 한 형태로 간주 될 수 있다. 하나의 완화 전략으로는 다수의 전체 노드에 연결하여 각 노드에 요청을 보내는 것이고, 정체성은 본질적으로 무료이기 때문에 대역폭을 많이 소모 할 수 있기 때문에 네트워크 파티셔닝이나 Sybil 공격으로 이 문제를 해결할 수 있다. SPV가 정직한 노드에서 끊어지지 않도록 주의해야한다. | ||
− | # SPV는 자신이 소유한 키에 해당하는 전체 노드의 트랜잭션만 요청한다. SPV가 모든 블록을 다운로드하고 불필요한 패킷을 버리면 매우 많은 대역폭이 | + | # SPV는 자신이 소유한 키에 해당하는 전체 노드의 트랜잭션만 요청한다. SPV가 모든 블록을 다운로드하고 불필요한 패킷을 버리면 매우 많은 대역폭이 소모되지만 사용자가 특정 노드와 특정 트랜잭션이 있는 블록을 요청하게 되면 전체 노드가 해당 사용자에 해당하는 공용 주소를 볼 수 있어, 정보 누출 위험이 생기게 되며, 전체 노드를 실행하는 사람들이 불만을 느끼며 클라이언트, 사용자 또는 주소에 대한 서비스 거부와 같은 기법을 허용하게 되고, 연결도 간단히 허용하게 된다. SPV는 단순히 가짜 트랜잭션 요청을 스팸 메일로 처리할 수 있지만, SPV에 큰 부담이 되며 씬 클라이언트의 목적을 완전히 상실할 수도 있다. 하지만 블록 데이터 요청의 난독 화 및 압축 방법으로 구현된 블룸필터를 활용하여 어느 정도 문제를 완화할 수 있다.<ref>Soori, 〈[https://wikidocs.net/14577 SPV의 잠재적 약점]〉, 《위키독스》, 2018-02-24</ref> |
{{각주}} | {{각주}} |
2019년 7월 4일 (목) 14:18 판
SPV(Simple Payment Verification)란 전체 블록체인의 풀 노드를 저장하고 있지 않고도 트랜잭션을 검증할 수 있는 방법이다. 또한 다른 말로는 라이트웨이트 노드(lightweight node)라고도 불린다.
개요
2018년 1월 기준으로 비트코인 블록체인 데이터는 150GB를 넘어서 시간이 경과함에 따라 점점 커지고 있다. 스마트폰에 저장하기엔 너무 크기 때문에 스마트폰에서 풀노드를 구동하기 어려워, 비트코인을 받았다는 사실을 전체 블록체인을 다운로드하지 않고도 머클트리를 통하여 검증하는 방법이며, 사토시 나카모토의 백서에도 소개되고 있다.[1]
특징
SPV(Simplified Payment Verification)는 풀 노드로부터 머클 증명과 일부 블록의 헤더만 받아와서 트랜잭션의 유효성을 검증할 수 있는 방법이다. 따라서 SPV는 비트코인 네트워크를 사용하지만 실제로는 풀 노드로써의 기능을 하지않아 풀 노드와 다르게 가볍다는 특징을 갖게 되는것이다. 블록체인 사본을 보관하지도 않고, 트랜잭션 검증, 검증 과정에 참여하지 않기 때문에 네트워크 보안에도 기여를 하지 않는다. 즉 SPV는 전체 블록 데이터를 다운로드 하거나 소유하지 않으며, 일부 트랜잭션의 블록 안에 포함되어있는지 여부만을 확인하는 방법이기 때문에 다른 풀 노드의 정보에 의존하여 거래를 진행한다.[2][3]
- 블록 헤더 구성
- 버전 (4바이트)
- 이전 블록해시 (32바이트)
- 머클루트 해시 (32바이트)
- 블록 시간 (4바이트)
- nBits (4바이트)
- nonce (4바이트)로 구성되어있으며, 총 80바이트로, 1년 동안 발생하는 52560개의 블록 헤더 용량이 4MB 정도이니 현재 150GB를 넘긴 풀 노드에 비해 매우 가볍다고 할 수 있다.
단점
SPV(Simplified Payment Verification)는 풀 노드에 의한 정보의 의존도가 높다는 것이다. 즉, 다른 풀 노드들에게 정보를 요청해야만 거래를 진행할 수 있다. 또한 풀 노드의 경우 처음부터 블록체인을 저장해왔고 최종적으로 돈이 들어있는계좌(UTXO)들을 블록체인이 아닌 데이터베이스에 저장하기 때문에 더 빠른 속도로 처음부터 자신의 잔고를 확인할 수 있지만, SPV(Simplified Payment Verification)는 다른 풀 노드를 의지하기 때문에 처음부터 제대로된 정보를 주느냐가 문제인 것이다. 악의적 노드가 끼어들게 되면 SPV(Simplified Payment Verification)로써는 구분할 수 없기 때문에 큰 문제로는 이어지지는 않지만 다른 노드들이 거래를 취소를 시켜버림으로써 거래지연이 발생하게 된다.[2]
약점
단순하게 구현되는 SPV에는 몇 가지 약점이 존재한다.
- SPV가 트랜잭션이 아닌 블록에 있다고 생각하도록 속일 수는 없지만 그 반대는 가능하다. 전체 노드는 누락으로 인해 SPV가 트랜잭션이 발생하지 않았다고 쉽게 믿을 수 있으며, 이는 서비스 거부 (Denial of Service)의 한 형태로 간주 될 수 있다. 하나의 완화 전략으로는 다수의 전체 노드에 연결하여 각 노드에 요청을 보내는 것이고, 정체성은 본질적으로 무료이기 때문에 대역폭을 많이 소모 할 수 있기 때문에 네트워크 파티셔닝이나 Sybil 공격으로 이 문제를 해결할 수 있다. SPV가 정직한 노드에서 끊어지지 않도록 주의해야한다.
- SPV는 자신이 소유한 키에 해당하는 전체 노드의 트랜잭션만 요청한다. SPV가 모든 블록을 다운로드하고 불필요한 패킷을 버리면 매우 많은 대역폭이 소모되지만 사용자가 특정 노드와 특정 트랜잭션이 있는 블록을 요청하게 되면 전체 노드가 해당 사용자에 해당하는 공용 주소를 볼 수 있어, 정보 누출 위험이 생기게 되며, 전체 노드를 실행하는 사람들이 불만을 느끼며 클라이언트, 사용자 또는 주소에 대한 서비스 거부와 같은 기법을 허용하게 되고, 연결도 간단히 허용하게 된다. SPV는 단순히 가짜 트랜잭션 요청을 스팸 메일로 처리할 수 있지만, SPV에 큰 부담이 되며 씬 클라이언트의 목적을 완전히 상실할 수도 있다. 하지만 블록 데이터 요청의 난독 화 및 압축 방법으로 구현된 블룸필터를 활용하여 어느 정도 문제를 완화할 수 있다.[4]
각주
- ↑ GitHub, 〈비트코인 SPV〉, 《티스토리》, 2018-01-17
- ↑ 2.0 2.1 twinbraid, 〈풀노드와 라이트노드를 알아보자〉, 《스팀잇》, 2017-11-03
- ↑ 바이낸스 아카데미, 〈노드란 무엇인가요?〉, 《바이낸스 아카데미》, 2017-11-03
- ↑ Soori, 〈SPV의 잠재적 약점〉, 《위키독스》, 2018-02-24
참고자료
같이 보기