용어집 / 노드와 소프트웨어
Electrum 서버
별칭은 Electrum server입니다.
- Electrum 서버란 무엇입니까?
- Electrum 서버는 블록체인을 스크립트별로 색인으로 정리하고, 가벼운 지갑의 주소 조회에 응답합니다. 그래서 그런 지갑은 블록체인을 직접 내려받지 않고도 즉시 잔액을 확인할 수 있습니다.
검색은 누군가가 해야 합니다. 풀 노드는 어떤 코인이 아직 사용되지 않았는지는 알지만 주소에서 그 내역으로 이어지는 지도를 보관하지 않습니다. 그래서 그 내역을 한 시간이 아니라 1초 만에 원하는 지갑은 그 지도를 만들어 둔 서버에 질문합니다. 표준적인 방식은 자신의 노드와 함께 자신의 서버를 운영하는 것입니다. 다른 방법을 택하면 자신이 보유한 주소의 전체 목록을 낯선 사람에게 넘기게 되기 때문입니다.
작동 방식
Electrum 서버는 Bitcoin Core와 지갑 사이에 위치하여 양쪽 사이를 통역합니다.
서버는 노드에서 각 블록이 도착할 때마다 이를 읽어 모든 출력 스크립트를 추출하고, 그 스크립트와 그 스크립트를 건드린 트랜잭션 사이의 대응 관계를 저장합니다. 그러면 지갑은 줄 단위의 단순한 JSON 프로토콜로 접속합니다. 포트 50001의 평문 텍스트 또는 포트 50002의 TLS를 사용하며, 질문을 하거나 구독하여 답이 바뀌면 알림을 받습니다. 구독 덕분에 Electrum 지갑은 즉각적으로 느껴집니다. 지갑이 반복해서 묻는 대신, 서버가 결제가 들어오는 순간 알림을 밀어 보내기 때문입니다.
지갑은 그 연결로 주소를 보내지 않습니다. 대신 스크립트 해시를 보냅니다. 이는 출력 스크립트의 SHA-256 다이제스트에서 바이트 순서를 뒤집은 값으로, 프라이버시를 위한 조치가 아니라 프로토콜의 관례입니다. 그래도 서버는 여러분이 정확히 어떤 코인을 지켜보고 있는지 알게 됩니다. 그 해시의 내역을 돌려주고, 자신의 색인에서 대응하는 주소를 잠깐 사이에 찾아낼 수 있기 때문입니다. 스크립트 해시를 익명성으로 받아들이는 것이 이 소프트웨어에 관한 가장 흔한 오해입니다.
지갑이 스스로 지키는 것은 검증입니다. 지갑은 블록 헤더 체인을 내려받고 서버가 각 트랜잭션에 대해 제시하는 머클 증명을 확인합니다. 따라서 서버가 실제로 일어나지 않은 결제를 만들어 내려면 실제 작업 증명으로 뒷받침되는 가짜 헤더 체인까지 만들어야 합니다. 그래도 서버는 트랜잭션이나 지출을 숨기는 방식으로 누락시켜 거짓말할 수 있으며, 이는 더 작지만 실재하는 위험입니다.
세 가지 구현이 거의 모든 구축 사례를 담당합니다. 색인이 작아 선호되는 Rust의 electrs, 조회 속도로 선호되는 C++의 Fulcrum, 그리고 원조인 Python의 ElectrumX입니다. Electrum Personal Server는 다른 방식을 택합니다. 체인 전체를 색인하지 않고 설정 파일에 나열한 지갑만 지켜보므로 디스크를 거의 차지하지 않지만, 다른 사람의 주소에 대해서는 아무것도 답하지 않습니다.
확인할 수 있는 곳
Electrum 서버는 대부분의 데스크톱 비트코인 지갑에서 보이지 않는 절반입니다.
2011년 11월에 Thomas Voegtlin이 처음 공개한 Electrum 자체는 따로 지정하지 않는 한 자원봉사자들이 운영하는 공개 서버에 접속합니다. Sparrow, Specter, BlueWallet은 모두 같은 프로토콜을 사용합니다. Umbrel, Start9, RaspiBlitz, myNode를 포함한 모든 인기 노드 번들은 electrs 또는 Fulcrum을 함께 제공합니다. 바로 노트북의 지갑이 자신의 기기에서 조회하고 다른 누구도 여러분의 주소를 알지 못하게 하기 위해서입니다.
이것이 중요한 이유는 가정이 아닙니다. 2018년 12월 말부터 공격자들은 공개 Electrum 네트워크에서 악성 서버를 운영하며 3.3.3 이전 버전의 취약점을 악용했는데, 그 취약점에서는 서버가 오류 메시지로 임의의 리치 텍스트를 반환할 수 있었습니다. 결제를 보내려던 사용자는 업데이트를 설치하라는 공식 안내처럼 보이는 화면을 보았고, 내려받은 파일은 악성코드였습니다. 보고된 손실은 수백 비트코인에 이르렀습니다. 클라이언트는 서버 메시지에서 서식을 제거하도록 바뀌었지만, 교훈은 남아 있습니다. 공개 서버는 여러분의 지갑이 끊임없이 대화하는 신뢰할 수 없는 상대입니다.
Electrum 서버 vs Neutrino
Electrum 서버는 여러분 대신 검색을 하고 여러분이 무엇을 찾고 있었는지 알게 됩니다. Neutrino는 원재료를 여러분에게 보내므로 거의 아무것도 알지 못합니다. Electrum 방식은 저렴합니다. 조회 한 번에 몇 킬로바이트이고 답은 즉각적이며, 그래서 하드웨어 기기와 함께 쓰는 데스크톱 지갑에서 주류를 이룹니다. Neutrino 방식은 모든 블록에 대해 압축 필터를 내려받아 로컬에서 검사하며, 어떤 스크립트가 일치했는지 드러내지 않기 위해 훨씬 많은 대역폭을 씁니다. 서버가 여러분의 것일 때는 서버 방식을 택하고, 그럴 수 없을 때는 필터 방식을 택하십시오.