본문으로 건너뛰기
buybitcoinsmart

용어집 / 채굴과 합의

머클 블록

별칭은 Merkle block입니다.

머클 블록이란 무엇입니까?
머클 블록은 라이트 지갑이 필터링된 블록 내용을 요청했을 때 받는 응답으로, 80바이트 헤더와 어떤 트랜잭션이 일치했는지 증명하는 데 필요한 만큼의 해시만 담고 있습니다.

BIP-37에 명시되어 있습니다.

BIP37은 지갑이 노드에 필터를 넘기고 일치한 것만 받도록 했으며, 그 결과는 아무것도 조작되지 않았다는 증명으로 감싸여 있었습니다. 이 설계는 프라이버시와 부하 양쪽에서 실패했습니다. Bitcoin Core는 2019년 11월에 출시된 버전 0.19.0에서 이 기능을 기본적으로 비활성화했습니다. 최신 라이트 지갑을 사용한다면, 거의 확실히 대신 컴팩트 블록 필터를 사용하고 있습니다.

작동 방식

상태: BIP37 블룸 필터링과 이를 제공하는 merkleblock 메시지는 프라이버시와 서비스 거부 문제를 이유로 2019년 11월에 Bitcoin Core 0.19.0에서 기본적으로 비활성화되었습니다. BIP157과 BIP158에 명시된 컴팩트 블록 필터가 이를 대체했으며, Bitcoin Core는 2021년 1월의 버전 0.21.0부터 피어에게 이를 제공할 수 있습니다.

머클 블록은 요약이 아니라 증명입니다. 그 구조는 네 부분으로 이루어집니다. 블록 헤더, 블록 내 트랜잭션의 총 개수, 정렬된 해시 목록, 그리고 플래그의 컴팩트 비트 필드입니다. 플래그는 블록의 머클 트리를 깊이 우선으로 순회하는 방식을 기술하며, 수신하는 지갑에게 가지로 내려갈지 아니면 목록의 다음 해시를 그 아래 전체를 대신하는 값으로 취할지를 알려줍니다. 지갑은 그 순회를 재현하여 루트에 도달하고, 전달받은 헤더의 루트와 비교합니다.

그 비교가 바로 핵심입니다. 악의적인 피어는 트랜잭션을 언급하지 않기만 하면 사용자에게서 숨길 수 있으며, 어떤 필터링 프로토콜도 이를 막을 수 없습니다. 다만 피어가 할 수 없는 일은 사용자가 받은 적 없는 트랜잭션을 만들어내는 것입니다. 조작된 해시는 실제 작업 증명이 뒷받침된 헤더와 일치하는 루트로 재구성되지 않기 때문입니다.

요청은 두 단계로 이루어지는 교환입니다. 지갑은 filterload 메시지로 필터를 업로드한 뒤, 일반 블록이 아닌 필터링된 블록이라는 인벤토리 유형을 사용해 블록을 요청합니다. 머클 블록이 먼저 돌아오고, 이어서 일치한 트랜잭션 전체가 별도의 메시지로 돌아옵니다. 트랜잭션 2,000개와 일치 항목 1개가 있는 블록의 경우, 지갑은 1메가바이트 이상 대신 헤더 1개와 해시 십여 개, 트랜잭션 1개만큼의 비용을 치릅니다.

사용되는 곳

머클 블록은 대부분 이미 사라진 한 세대의 모바일 지갑에 속합니다.

BitcoinJ 라이브러리가 이를 대중화했고, 그 위에 구축된 Android 지갑들은 2010년대의 대부분을 이 방식으로 동기화했습니다. 그런 앱의 오래된 빌드를 실행하는 사용자는 여전히 filterload 메시지를 보내면서 응답할 피어를 조용히 찾지 못하고 있을 수 있습니다. 제공하려면 운영자가 peerbloomfilters를 직접 다시 켜 두어야 하기 때문입니다.

이를 대체한 방식은 요청의 방향을 뒤집습니다. 컴팩트 블록 필터에서는 노드가 각 블록에 그 블록의 내용을 기술하는 작은 필터를 게시하고, 지갑은 필터를 내려받아 어떤 블록이 흥미로운지 로컬에서 판단한 뒤 그 블록 전체를 가져옵니다. 지갑의 주소에 관한 어떤 정보도 기기 밖으로 나가지 않습니다. 이것이 lnd의 Neutrino 백엔드와 그 위에 구축된 모바일 라이트닝 지갑의 모델입니다.

프라이버시 실패는 분명히 밝힐 가치가 있습니다. 그것이 전환의 이유이기 때문입니다. Arthur Gervais와 공저자들이 2014년에 발표한 연구는 블룸 필터링 클라이언트를 제공하는 노드가 그 클라이언트 주소의 대다수를 복원할 수 있음을 보였고, 같은 필터로 두 개의 블록을 요청하면 더 많은 정보가 드러남을 보였습니다. 지갑을 숨기기 위한 거짓 양성 패딩은 지갑을 숨기지 못했습니다.

머클 블록 vs 블룸 필터

블룸 필터는 지갑이 위로 보내는 것이고, 머클 블록은 아래로 돌아오는 것입니다. 필터는 누군가가 관심을 두는 주소와 아웃포인트에 대한 확률적이고 손실이 있는 기술이며, 제공하는 노드에 있습니다. 머클 블록은 특정 블록 하나에 대한 결정론적 증명이며, 응답 안에 있습니다. 둘은 한 쌍으로 폐기되었지만, 프라이버시 문제였던 것은 필터뿐이었습니다. 머클 증명 자체는 여전히 유효하며, 그래서 컴팩트 블록 필터는 증명이라는 아이디어는 유지하고 낯선 상대에게 자신이 무엇을 보유하는지 알려주는 부분은 버렸습니다.

혼동하기 쉬운 용어

자주 묻는 질문

머클 블록은 아직 사용됩니까?

드물게 사용됩니다. Bitcoin Core는 2019년 11월의 버전 0.19.0부터 블룸 필터 제공을 기본적으로 꺼 둔 채 배포되므로, 머클 블록을 요청하는 지갑은 응답할 피어를 자주 찾지 못합니다. 컴팩트 블록 필터가 현대적인 대체 방식입니다.

머클 블록이 제 주소를 유출했습니까?

실제로 그렇습니다. 2014년에 발표된 연구는 블룸 필터의 거짓 양성 패딩이 지갑이 감시하던 주소를 숨기기에 충분하지 않음을 보였으며, 따라서 사용자에게 서비스를 제공하던 노드가 대개 지갑의 대부분을 식별할 수 있었습니다.

관련 용어

채굴과 합의 분야의 다른 용어

이 페이지를 영어로 읽기