검수요청.png검수요청.png

"SPV"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
 
(사용자 4명의 중간 판 60개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''SPV'''(Simple Payment Verification)란 전체 블록체인의 풀 노드를 저장하고 있지 않고도 [[트랜잭션]]을 검증할 수 있는 방법이다.
+
'''SPV'''<!--Simple Payment Verification, SimplePaymentVerification, spv-->(Simple Payment Verification)란 거래에 대한 모든 [[블록체인]]을 저장하지 않고도 [[트랜잭션]]을 검증하는 방법이다. '''라이트 웨이트 노드'''(lightweight node) 또는 '''경량노드'''<!--경량 노드-->라고도 불린다.
  
 
== 개요 ==
 
== 개요 ==
2018년 1월 기준으로 [[비트코인]] 블록체인 데이터는 150GB를 넘어섰다. 스마트폰에 저장하기엔 너무 크기 때문에 [[스마트폰]]에서 [[풀노드]]를 구동하기 어려워, 비트코인을 받았다는 사실을 전체 블록체인을 다운로드하지 않고도 [[머클트리]]를 통하여 검증하는 방법이며, [[사토시 나카모토]]의 백서에도 소개되고 있다.
+
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는 풀 노드로부터 머클 증명과 일부 [[블록헤더]]만 받아와서 트랜잭션의 유효성을 검증하는 방법이다. 따라서 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바이트
 +
** 이전 블록해시 : 32바이트
 +
** 머클루트 해시 : 32바이트
 +
** 블록 시간 : 4바이트
 +
** 비츠 : 4바이트
 +
** 논스값 : 4바이트로 구성되어있으며, 총 80바이트로, 1년 동안 발생하는 52,560개의 블록 헤더 용량이 4MB 정도이니 현재 150GB를 넘긴 풀 노드에 비해 매우 가볍다고 할 수 있다.
 +
 +
== 활용 ==
 +
*Simplified Payment Verification (SPV) 및 SPV Wallet
 +
SPV는 개발자 나 브랜드 이름이 아니라 기술이다. SPV는 간단한 결제 확인을 의미한다. 그리고 그것은 새로운 것이 아니다. 간단히 말해서 SPV를 사용하면 다른 사람의 거래에 대해 걱정할 필요없이 거래의 유효성을 확인할 수 있다. spv는 거래가 블록 내에 있음을 보장하며 추가 블록이 체인에 추가된다는 확인 (작업 증명)을 제공한다. 따라서 SPV 지갑 정의는«핫 지갑»또는«콜드 지갑»과 동일하다 - 비트코인 지갑 유형으로 보안 및 데이터를 활성 체인에 보장한다.
 +
*Bitcoin SPV 지갑 클라이언트
 +
GitHub에는 Bitcoin SPV 지갑 클라이언트라고하는 지갑이 있다.
 +
Native Bitcoin SPV 클라이언트 이지만 아직 실험적이며 GitHub에서 작성된 개발자처럼 현재 프로덕션 환경에서는 사용하고 싶지 않다. BitcoinSPV는 여전히 진행 중이며 결국에는 엄청난 수정이 이루어질 것이다. 몇 가지 기본적인 것들이 남아 있다.
 +
Lightning Network , OpenBazaar 및 btcd 개발을 사용하여 Bitcoin 용 SPV Wallet 클라이언트 수정 .
 +
*API wallet 대 SPV 지갑
 +
[[Bitrated]]의 창시자 인 [[Nadav Ivgi]]에 따르면 2017년 말에 가장 인기있는 지갑은 중앙 집중식 API 서버를 사용하여 블록체인 데이터를 가져왔다. SPV를 사용하는 제품은 예외이다 -  Bread Wallet 및 Android Bitcoin Wallet이 유일하게 인기있는 SPV 지갑이다.<ref>〈[https://en.bitcoinwiki.org/wiki/Simplified_Payment_Verification spv]〉, 《비트코인위키》</ref>
 +
 +
==장점==
 +
* 간소화
 +
SPV는 새로운 것이 아니다. 그것은 사토시 나카모토의 원래 백서인 Bitcoin : [[Peer]]-to-Peer Electronic Cash System 의 8절에서 설명되었다 . [[Electrum]] 과 같은 [[Bitcoin]] 지갑은 아무런 문제없이 SPV를 수년간 성공적으로 사용 해왔고 사용자가 전체 네트워크 노드를 유지 관리해야하는 번거로움을 덜어준다.
 +
*SPV 작동방식
 +
SPV를 사용하면 다른 사람의 거래에 대해 걱정할 필요없이 거래를 확인할 수 있다.
 +
SPV는 2 가지 중요한 요소를 제공한다
 +
a) 거래가 블록 내에 있음을 보장합니다.
 +
b) 추가 블록이 체인에 추가된다는 확인 (작업 증명)을 제공합니다. 실제로 거래가 유효한지 알아야 된다 .
 +
*SPV 보안제한
 +
SPV지갑은 블록의 다른 트랜잭션을 확인하지 않기 때문에 이론적으로 블록이 유효하지 않을 수 있다. 99.99 %의 시간이지만 많은 다른 노드에 연결할 수 있고 모든 사람들이 동일한 블록체인에 동의할 수 있기 때문에 이것은 문제가 되지 않는다.
 +
때로는 비정상적인 상황이 발생할 수 있다. 예를 들어, 새로운 컨센서스 규칙이 채택되고 비교적 큰 그룹의 노드는 업그레이드를 잊어 버리기 때문에 새로운 규칙을 사용하지 않는다.
 +
이러한 비준수 노드가 네트워크에서 분리되기까지 오래 걸리지는 않지만 그 동안 SPV 클라이언트는 업그레이드되지 않은 노드가 올바른 최장 체인을 가지고 있다고 생각하도록 일시적으로 속일 수 있다. (블록을 몇 개 더 추가하면 가장 긴 유효한 체인이 다시 명확해진다.)
 +
따라서 전체 노드를 실행하면 '빠른'보안이 제공된다. 모든 거래를 직접 확인할 수 있다면 이런 종류의 드문 경우를 해결하는 추가 확인을 기다릴 필요가 없다. 또한 SPV 클라이언트가 전체 노드와 통신하고 특정 주소와 트랜잭션에 대한 정보를 요청해야하기 때문에 전체 노드를 이론적으로 실행하면 더 높은 프라이버시를 제공한다.
 +
보안성
 +
이론적으로 공격자는 많은 수의 불량 노드를 설정해야 하며 '실제' Bitcoin 네트워크에서 정직한 노드를 찾지 못하게 해야 된다.
 +
SPV 지갑이 단 하나의 정직한 노드를 찾으면 정직한 노드에 작업 체인의 가장 긴 증거가 포함되어 있는지 확인할 수 있기 때문에 공격을 할 수 없다.
 +
또한 공격을 지속하기 위해 침입자는 체인을 계속 연장하기 위해 현재의 난이도 수준에서 광산 블록을 유지해야 한다. 이것은 엄청난 양의 해싱 파워를 필요로 할 것이고, 이는 매우 비싸고 따라서 경제적으로 실행 불가능하다.<ref>Jonald Fyookball, 〈[https://medium.com/@jonaldfyookball/why-every-bitcoin-user-should-understand-spv-security-520d1d45e0b9 모든 Bitcoin 사용자가 "SPV 보안"을 이해해야하는 이유]〉, 《미디움》, 2017-05-21</ref>
 +
 +
== 문제점 ==
 +
SPV는 풀 노드들에 정보를 요청해야만 거래를 진행할 수 있기 때문에 풀 노드에 대한 [[정보]]의 의존도가 높다. 풀 노드의 경우 처음부터 블록체인을 저장해왔고 최종적으로 돈이 들어 있는 계좌(UTXO)를 블록체인이 아닌 [[데이터베이스]]에 저장하기 때문에 더 빠른 속도로 처음부터 자신의 잔고를 확인할 수 있지만, SPV의 경우 다른 풀 노드에 의지하기 때문에 처음부터 제대로 된 정보를 주느냐가 문제이다. 악의적 노드가 끼어들게 되면 SPV로써는 구분할 수 없기 때문에 큰 문제로 이어질 수 있으며 다른 노드들이 거래를 취소를 시켜버림으로써 거래지연이 발생하게 된다.<ref name="라이트노드"></ref>
 +
 +
== 중요성 ==
 +
SPV가 필요한 이유는 용량이 큰 데스크탑의 경우에는 모든 데이터를 저장하고 있어도 상관이 없지만, 용량이 작은 모바일의 경우에는 모든 데이터를 저장하기에 무리가 있다.
 +
그리고 블록체인은 참여자가 많을 수록 네트워크가 견고해짐 이때 라이트 노드가 SPV 수행함으로써 블록체인 네트워크를 크게 만들어 더 안전하게 한다.
 +
따라서 SPV는 트랜잭션을 검증하며 풀노드보다는 간단한 작업을 하지만 필수불가결적인 요소가 된다.
 +
 +
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
 
+
*GitHub, 〈[https://joojis.tistory.com/entry/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8-SPV 비트코인 SPV]〉, 《티스토리》, 2018-01-17
 +
*twinbraid, 〈[https://steemit.com/kr/@twinbraid/3ncb5r 풀노드와 라이트노드를 알아보자]〉, 《스팀잇》, 2017-11-03
 +
*바이낸스 아카데미, 〈[https://www.binance.vision/ko/blockchain/what-are-nodes 노드란 무엇인가요?]〉, 《바이낸스 아카데미》, 2017-11-03
 +
*Soori, 〈[https://wikidocs.net/14577 SPV의 잠재적 약점]〉, 《위키독스》, 2018-02-24
 +
*〈[https://en.bitcoinwiki.org/wiki/Simplified_Payment_Verification spv ]〉, 《비트코인위키》
  
 
== 같이 보기 ==
 
== 같이 보기 ==
15번째 줄: 65번째 줄:
 
* [[머클트리]]
 
* [[머클트리]]
  
{{블록체인 기술|토막글}}
+
{{블록체인 기술|검토 필요}}

2019년 9월 1일 (일) 16:24 기준 최신판

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를 넘긴 풀 노드에 비해 매우 가볍다고 할 수 있다.

활용[편집]

  • Simplified Payment Verification (SPV) 및 SPV Wallet

SPV는 개발자 나 브랜드 이름이 아니라 기술이다. SPV는 간단한 결제 확인을 의미한다. 그리고 그것은 새로운 것이 아니다. 간단히 말해서 SPV를 사용하면 다른 사람의 거래에 대해 걱정할 필요없이 거래의 유효성을 확인할 수 있다. spv는 거래가 블록 내에 있음을 보장하며 추가 블록이 체인에 추가된다는 확인 (작업 증명)을 제공한다. 따라서 SPV 지갑 정의는«핫 지갑»또는«콜드 지갑»과 동일하다 - 비트코인 지갑 유형으로 보안 및 데이터를 활성 체인에 보장한다.

  • Bitcoin SPV 지갑 클라이언트

GitHub에는 Bitcoin SPV 지갑 클라이언트라고하는 지갑이 있다. Native Bitcoin SPV 클라이언트 이지만 아직 실험적이며 GitHub에서 작성된 개발자처럼 현재 프로덕션 환경에서는 사용하고 싶지 않다. BitcoinSPV는 여전히 진행 중이며 결국에는 엄청난 수정이 이루어질 것이다. 몇 가지 기본적인 것들이 남아 있다. Lightning Network , OpenBazaar 및 btcd 개발을 사용하여 Bitcoin 용 SPV Wallet 클라이언트 수정 .

  • API wallet 대 SPV 지갑

Bitrated의 창시자 인 Nadav Ivgi에 따르면 2017년 말에 가장 인기있는 지갑은 중앙 집중식 API 서버를 사용하여 블록체인 데이터를 가져왔다. SPV를 사용하는 제품은 예외이다 -  Bread Wallet 및 Android Bitcoin Wallet이 유일하게 인기있는 SPV 지갑이다.[4]

장점[편집]

  • 간소화

SPV는 새로운 것이 아니다. 그것은 사토시 나카모토의 원래 백서인 Bitcoin : Peer-to-Peer Electronic Cash System 의 8절에서 설명되었다 . Electrum 과 같은 Bitcoin 지갑은 아무런 문제없이 SPV를 수년간 성공적으로 사용 해왔고 사용자가 전체 네트워크 노드를 유지 관리해야하는 번거로움을 덜어준다.

  • SPV 작동방식

SPV를 사용하면 다른 사람의 거래에 대해 걱정할 필요없이 거래를 확인할 수 있다. SPV는 2 가지 중요한 요소를 제공한다 a) 거래가 블록 내에 있음을 보장합니다. b) 추가 블록이 체인에 추가된다는 확인 (작업 증명)을 제공합니다. 실제로 거래가 유효한지 알아야 된다 .

  • SPV 보안제한

SPV지갑은 블록의 다른 트랜잭션을 확인하지 않기 때문에 이론적으로 블록이 유효하지 않을 수 있다. 99.99 %의 시간이지만 많은 다른 노드에 연결할 수 있고 모든 사람들이 동일한 블록체인에 동의할 수 있기 때문에 이것은 문제가 되지 않는다. 때로는 비정상적인 상황이 발생할 수 있다. 예를 들어, 새로운 컨센서스 규칙이 채택되고 비교적 큰 그룹의 노드는 업그레이드를 잊어 버리기 때문에 새로운 규칙을 사용하지 않는다. 이러한 비준수 노드가 네트워크에서 분리되기까지 오래 걸리지는 않지만 그 동안 SPV 클라이언트는 업그레이드되지 않은 노드가 올바른 최장 체인을 가지고 있다고 생각하도록 일시적으로 속일 수 있다. (블록을 몇 개 더 추가하면 가장 긴 유효한 체인이 다시 명확해진다.) 따라서 전체 노드를 실행하면 '빠른'보안이 제공된다. 모든 거래를 직접 확인할 수 있다면 이런 종류의 드문 경우를 해결하는 추가 확인을 기다릴 필요가 없다. 또한 SPV 클라이언트가 전체 노드와 통신하고 특정 주소와 트랜잭션에 대한 정보를 요청해야하기 때문에 전체 노드를 이론적으로 실행하면 더 높은 프라이버시를 제공한다. 보안성 이론적으로 공격자는 많은 수의 불량 노드를 설정해야 하며 '실제' Bitcoin 네트워크에서 정직한 노드를 찾지 못하게 해야 된다. SPV 지갑이 단 하나의 정직한 노드를 찾으면 정직한 노드에 작업 체인의 가장 긴 증거가 포함되어 있는지 확인할 수 있기 때문에 공격을 할 수 없다. 또한 공격을 지속하기 위해 침입자는 체인을 계속 연장하기 위해 현재의 난이도 수준에서 광산 블록을 유지해야 한다. 이것은 엄청난 양의 해싱 파워를 필요로 할 것이고, 이는 매우 비싸고 따라서 경제적으로 실행 불가능하다.[5]

문제점[편집]

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

중요성[편집]

SPV가 필요한 이유는 용량이 큰 데스크탑의 경우에는 모든 데이터를 저장하고 있어도 상관이 없지만, 용량이 작은 모바일의 경우에는 모든 데이터를 저장하기에 무리가 있다. 그리고 블록체인은 참여자가 많을 수록 네트워크가 견고해짐 이때 라이트 노드가 SPV 수행함으로써 블록체인 네트워크를 크게 만들어 더 안전하게 한다. 따라서 SPV는 트랜잭션을 검증하며 풀노드보다는 간단한 작업을 하지만 필수불가결적인 요소가 된다.

각주[편집]

  1. GitHub, 〈비트코인 SPV〉, 《티스토리》, 2018-01-17
  2. 2.0 2.1 twinbraid, 〈풀노드와 라이트노드를 알아보자〉, 《스팀잇》, 2017-11-03
  3. 바이낸스 아카데미, 〈노드란 무엇인가요?〉, 《바이낸스 아카데미》, 2017-11-03
  4. spv〉, 《비트코인위키》
  5. Jonald Fyookball, 〈모든 Bitcoin 사용자가 "SPV 보안"을 이해해야하는 이유〉, 《미디움》, 2017-05-21

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 SPV 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.