본문으로 건너뛰기
buybitcoinsmart

용어집 / 노드와 소프트웨어

경량 클라이언트

별칭은 Lightweight client, SPV node입니다.

경량 클라이언트란 무엇입니까?
경량 클라이언트는 블록체인의 사본을 보관하지 않고 다른 사람의 서버에 자신의 주소에 어떤 일이 있었는지 묻는 지갑입니다.

휴대폰에 설치된 비트코인 앱은 사실상 거의 모두 이에 해당합니다. 전체 체인은 2026년 8월에 759 GB를 넘어섰고, 어떤 휴대폰도 이를 저장하지 못하므로 지갑은 많아야 몇 메가바이트의 블록 헤더만 보관하고 나머지는 외부에 맡깁니다. 편리함은 분명하며 그 대가도 분명합니다. 다른 누군가가 사용자의 주소를 알게 되며, 사용자는 그들이 말하는 내용을 독립적으로 확인할 수 없습니다.

작동 방식

경량 클라이언트는 세 가지 계열로 나뉘며, 각각 사용자에 대해 누출하는 정보의 양이 다릅니다.

가장 오래된 계열은 풀 노드에 자신을 대신해 필터링해 달라고 요청합니다. BIP37에서는 지갑이 자신이 관심 있는 대상을 설명하는 블룸 필터(bloom filter)를 업로드하고, 피어들은 일치하는 트랜잭션을 해당 트랜잭션을 블록에 연결하는 머클 증명과 함께 돌려보냅니다. 이 방식은 광고했던 만큼 사생활을 보호한 적이 없습니다. 2014년에 발표된 학술 연구는 이 필터들이 숨기려던 주소를 그대로 노출한다는 점을 보여주었습니다. Bitcoin Core는 2019년 11월에 출시된 버전 0.19.0에서 이 기능을 기본적으로 껐는데, 그 필터를 제공하는 것이 노드의 디스크를 소진시키는 손쉬운 방법이기도 했기 때문입니다.

가장 흔한 계열은 그저 서버에 곧바로 묻습니다. Electrum 프로토콜을 사용하는 지갑은 감시하는 각 주소의 지문을 서버로 보내고, 서버는 그 내역과 잔액을 응답합니다. 즉시 이루어지고 모바일 연결이 나빠도 작동하기에 많은 소프트웨어가 이를 사용합니다. 이는 또한 한 운영자가 사용자의 코인, 주소, 그리고 사용자가 접속한 IP 주소의 전체 목록을 갖는다는 뜻입니다.

가장 최신 계열은 필터링의 방향을 뒤집습니다. BIP157과 BIP158에서는 노드가 모든 블록에 대해 압축 필터를 계산해 공개하고, 지갑은 그 필터들을 내려받아 어떤 블록이 관련 있어 보이는지 스스로 판단한 뒤에야 블록 전체를 가져옵니다. 사용자가 무엇을 찾는지 아무도 알 수 없습니다. Bitcoin Core는 2021년 1월의 버전 0.21.0 이후로 이런 필터를 제공할 수 있었으며, Neutrino는 대부분의 모바일 라이트닝 네트워크 지갑이 사용하는 구현체입니다.

이 지갑들은 대부분 80바이트 블록 헤더의 체인을 보관하며, 이를 통해 블록이 존재하고 작업 증명이 있음을 알게 됩니다. 블록이 약 960,000개일 때 그 체인의 무게는 대략 77 MB로, 휴대폰에 충분히 작지만 그 블록 안의 트랜잭션이 적법했는지 확인하는 데는 쓸모없습니다.

어디에서 볼 수 있나

설정을 1분 이내에 마친 지갑을 열면 경량 클라이언트를 보고 있는 것입니다.

주목해야 할 실패는 탈취가 아닙니다. 사용자의 키는 기기에 남아 있고, 서버는 아무것도 지출하거나 실제 작업 증명이 뒷받침되는 지급을 지어낼 수 없습니다. 서버가 할 수 있는 일은 침묵하는 것입니다. 받은 지급을 누락시키거나, 오래된 잔액을 보여 주거나, 단순히 고장 난 것이 아니라 악의적이라면 실제 노드라면 버렸을 체인을 보여 줄 수 있습니다. 그중 무엇이든 탐지하려면 경량 클라이언트에게 없는 것이 필요합니다.

업그레이드 경로는 짧습니다. 대부분의 데스크톱 지갑과 여러 모바일 지갑은 공개 서버 대신 사용자 자신의 노드를 가리키도록 설정할 수 있으며, 이렇게 하면 사생활 누출이 완전히 사라지고 이미 구입한 하드웨어 외에는 비용이 들지 않습니다.

경량 클라이언트 vs 간이 지급 검증

간이 지급 검증은 기법이고, 경량 클라이언트는 소프트웨어의 한 범주이며, 후자 중 상당수는 전자를 구현하지 않습니다. 진정한 간이 지급 검증은 작업 증명으로 헤더 체인을 구성하고 무언가를 믿기 전에 그 체인에 대해 머클 가지를 검증하는 것을 뜻합니다. Electrum 데스크톱 지갑은 서버가 주는 응답으로 정확히 그렇게 합니다. Electrum 서버를 빌려 쓰는 수많은 앱은 그렇게 하지 않고, 마케팅에서 "SPV wallet"이라고 하더라도 그저 넘겨받은 잔액을 표시할 뿐입니다. 어떤 종류를 실행 중인지 알고 싶다면, 헤더를 동기화하는지 여부를 확인하시기 바랍니다.

혼동하기 쉬운 용어

자주 묻는 질문

경량 클라이언트가 제 비트코인을 탈취할 수 있습니까?

서버는 그럴 수 없습니다. 개인 키는 기기를 떠나지 않으며 서버는 무엇에도 서명할 방법이 없습니다. 서버는 누락으로 거짓말을 하거나 지급을 숨기거나 오래된 잔액을 보여 줄 수 있으며, 어떤 주소가 사용자의 것인지 알게 됩니다.

어떤 경량 지갑이 정보를 가장 적게 누출합니까?

BIP157과 BIP158에 따른 압축 블록 필터를 사용하는 지갑입니다. 지갑이 필터를 내려받아 서버에 사용자의 주소를 알리는 대신 가져올 것을 로컬에서 결정하기 때문입니다. 어떤 지갑이든 사용자 자신의 노드를 가리키게 하면 누출이 완전히 사라집니다.

다음에 읽을 글

관련 용어

노드와 소프트웨어 분야의 다른 용어

이 페이지를 영어로 읽기