의견.png

"SPV"의 두 판 사이의 차이

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

2019년 7월 4일 (목) 17:13 판

SPV(Simple Payment Verification)란 거래에 대한 모든 블록체인을 저장하지 않고도 트랜잭션을 검증하는 방법이다. 라이트 웨이트 노드(lightweight node)라고도 불린다.

개요

SPV는 비트코인을 받았다는 거래에 대해 모든 블록체인을 다운로드 하지 않고 검증하는 간이 결제 확인 방법이다. 이는 사토시 나카모토의 비트코인 백서에서도 소개되고 있는 부분이다. 라이트 노드(light node)는 모든 블록 정보를 가지고 있지 않기 때문에 새로운 거래 정보를 수신받았을 경우 이 거래가 정상적인지 검증할 수 없다. 게다가 2018년 1월 기준 비트코인 블록체인 데이터는 150GB를 넘어서 시간이 지남에 따라 점점 증가하고 있어 이 많은 양의 데이터를 스마트폰에 저장하기에는 어려움이 따른다. 반면 풀 노드(full node)는 모든 데이터를 가지고 있기 때문에 로컬에 있는 블록 정보를 조회하여 검증을 할 수 있다. 라이트 노드에서 거래를 검증하기 위해 풀 노드에게 블록 정보를 요청하여 머클트리를 통해 이 거래가 검증된 거래인지를 확인하는 방법이 바로 SPV이다.[1]

특징

SPV는 풀 노드로부터 머클 증명과 일부 블록헤더만 받아와서 트랜잭션의 유효성을 검증하는 방법이다. 따라서 SPV는 비트코인 네트워크를 사용하지만 실제로는 풀 노드로써의 기능을 하지 않아 풀 노드] 다르게 가볍다는 특징을 가진다. 블록체인 사본을 보관하지도 않고 트랜잭션 검증 과정에 참여하지 않기 때문에 네트워크 보안에도 기여를 하지 않는다. 즉 SPV는 전체 블록 데이터를 다운로드하거나 소유하지 않으며, 일부 블록 안에 트랜잭션이 포함되어있는지 여부만을 확인하는 방법이기 때문에 다른 풀 노드의 정보에 의존하여 거래를 진행한다.[2][3]

  • 블록 헤더 구성
    • 버전 : 4바이트
    • 이전 블록해시 : 32바이트
    • 머클루트 해시 : 32바이트
    • 블록 시간 : 4바이트
    • 비츠 : 4바이트
    • 논스값 : 4바이트로 구성되어있으며, 총 80바이트로, 1년 동안 발생하는 52,560개의 블록 헤더 용량이 4MB 정도이니 현재 150GB를 넘긴 풀 노드에 비해 매우 가볍다고 할 수 있다.

단점

SPV는 풀 노드들에 정보를 요청해야만 거래를 진행할 수 있기 때문에 풀 노드에 대한 정보의 의존도가 높다. 또한 풀 노드의 경우 처음부터 블록체인을 저장해왔고 최종적으로 돈이 들어 있는 계좌(UTXO)를 블록체인이 아닌 데이터베이스에 저장하기 때문에 더 빠른 속도로 처음부터 자신의 잔고를 확인할 수 있지만, SPV의 경우 다른 풀 노드에 의지하기 때문에 처음부터 제대로 된 정보를 주느냐가 문제이다. 악의적 노드가 끼어들게 되면 SPV로써는 구분할 수 없기 때문에 큰 문제로 이어질 수 있으며 다른 노드들이 거래를 취소를 시켜버림으로써 거래지연이 발생하게 된다.[2]

또한 SPV가 트랜잭션이 아닌 블록에 있다고 생각하도록 속일 수는 없지만, 그 반대는 가능하다. 전체 노드는 누락으로 인해 SPV가 트랜잭션이 발생하지 않았다고 쉽게 믿을 수 있으며, 이는 서비스 거부(Denial of Service)의 한 형태로 간주 될 수 있다. 하나의 완화 전략으로는 다수의 전체 노드에 연결하여 각 노드에 요청을 보내는 것이고, 정체성은 본질적으로 무료이기 때문에 대역폭을 많이 소모할 수 있기 때문에 네트워크 파티셔닝이나 시빌 공격으로 이 문제를 해결할 수 있다. SPV가 정직한 노드에서 끊어지지 않도록 주의해야 한다.

SPV는 자신이 소유한 키에 해당하는 전체 노드의 트랜잭션만 요청한다. SPV가 모든 블록을 다운로드하고 불필요한 패킷을 버리면 매우 많은 대역폭이 소모되지만 사용자가 특정 노드와 특정 트랜잭션이 있는 블록을 요청하게 되면 전체 노드가 해당 사용자에 해당하는 공용 주소를 볼 수 있어, 정보 누출 위험이 생기게 되며, 전체 노드를 실행하는 사람들이 불만을 느끼며 클라이언트, 사용자 또는 주소에 대한 서비스 거부와 같은 기법을 허용하게 되고, 연결도 간단히 허용하게 된다. SPV는 단순히 가짜 트랜잭션 요청을 스팸 메일로 처리할 수 있지만, SPV에 큰 부담이 되며 씬 클라이언트의 목적을 완전히 상실할 수도 있다. 하지만 블록 데이터 요청의 난독 화 및 압축 방법으로 구현된 블룸필터를 활용하여 어느 정도 문제를 완화할 수 있다.[4]

각주

  1. GitHub, 〈비트코인 SPV〉, 《티스토리》, 2018-01-17
  2. 2.0 2.1 twinbraid, 〈풀노드와 라이트노드를 알아보자〉, 《스팀잇》, 2017-11-03
  3. 바이낸스 아카데미, 〈노드란 무엇인가요?〉, 《바이낸스 아카데미》, 2017-11-03
  4. Soori, 〈SPV의 잠재적 약점〉, 《위키독스》, 2018-02-24

참고자료

같이 보기


  의견.png 이 SPV 문서는 블록체인 기술에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.