[Blockchain] 블룸필터

yooni·2022년 3월 13일
0

Blockchain

목록 보기
27/36
post-thumbnail
post-custom-banner

1. SPV 노드

SVP 노드 (Simple Payment Verification Node, 단순 지불 검증 노드)
저장 공간의이나 전력에 제한이 있는 기기에서 가동되도록 설계된 노드이다. Ligitweight 노드 혹은 경량노드라고도 불린다.

비트코인 블록체인 데이터는 점점 증가하고 있어 이 많은 양의 데이터를 스마트폰에 저장하기에는 어려움이 따른다. SPV 노드는 블록 헤더만 다운로드 하고 각 블록에 들어있는 거래들은 다운르도 하지 않는다. 풀노드보다 1,000배 작다. SPV 노드는 전체 트랜잭션 정보를 가지고 있지 않기 때문에 이웃 풀노드들에게 블록 정보를 요청하여 의지하는 방식으로 거래를 검증한다.

풀노드는 UTXO가 소비되지 않았다는 사실을 확인하기 위해 노드 아래 수천 개의 블록으로 구성된 체인 전체를 체크해야 하지만, SPV 노드는 노드 위에 있는 몇 개의 블록을 가지고 해당 블록이 묻혀있는 깊이가 어떻게 되는지 확인한다. 검증하고자 하는 블록의 깊이가 일정 깊이가 되면 네트워크 상의 다른 노드들이 해당 블록을 승인하여 이후 새로운 블록을 연결시켰다는 의미이기 때문에 해당 거래는 검증되었음을 의미한다.

SPV 노드는 특정 거래를 검증하기 위해 해당 거래를 검색해야 하기 때문에 프라이버시가 노출될 수 있다. 각 블록 내에서 모든 거래를 수집하는 풀노드와 달리 SPV 노드는 특정 데이터에 대해 요청할 경우 지갑 내의 주소가 의도치 않게 노출될 수 있다. 또한 악의적 노드가 끼어들게 되면 SPV로써는 이를 구분해낼 수 없기 때문에 큰 문제로 이어질 수 있다. 비트코인 개발자들은 SPV 노드의 프라이버시 노출 문제를 해결하기 위해 블룸필터 기능을 추가하였다.



2. SPV 노드와 블룸 필터

블룸필터는 특정 원소가 집합에 속하는지 검사하는데 사용할 수 있는 확률형 자료 구조이다. 블룸필터는 프라이버시를 보호하면서 검색 패턴을 표현하기 위한 효율적인 방법을 제공한다. SPV 노드가 블룸필터를 사용해 이웃 노드들에게 특정 거래를 제공해 줄 것을 요청하는데 이 때 노드가 검색중인 주소가 정확히 어떤 주소인지 밝힐 필요는 없다.

블룸필터는 길이 N의 이진 배열(Binary array)과 1부터 N까지의 출력값을 갖는 M개의 해시함수로 이루어져 있다. N과 M을 조절함으로써 정확도와 프라이버시 보호 수준을 조절할 수 있다.

입력된 패턴이 블룸필터의 일부인지 확인하기 위해 해당 패턴은 M개의 해시 함수로 해싱되고 그에 따른 비트 결과값을 비트 배열과 비교한다. 해시 함수에 의해 성성된 비트가 모두 1로 설정되어 있다면 해당 패턴은 아마도 블룸필터에 기록되어 있을 것이다. 이는 확률적 개념이며 그럴 가능성의 개념이다.

반대로 패턴을 검증하여 결과값중 하나라도 0으로 남아있다면 이는 해당 패턴이 블룸필터의 일부가 아니라는 사실을 입증한다. 이는 확률이 아닌 확실성으로 절대적 부정의 개념이다.

블룸필터가 없는 SPV 노드는 검증하고자 하는 주소 목록을 명확하게 나열하기 때문에 심각한 프라이버시 침해가 발생한다. 블룸필터가 있다고 해도 시간이 지남에 따라 SPV 클라이언트의 지갑에 들어있는 주소를 알아낼 수도 있다.



📌 Reference
https://younghoon_moon.gitbooks.io/personal-blockchain-study/content/be44-d2b8-cf54-c778-ae30-bcf8-bitcoin-basics/be14-b8f8-d544-d13028-bloom-filter.html

profile
멋쟁이 코린이
post-custom-banner

0개의 댓글