Bitcoin: A Work in Progress는 개발자 Sjors Provoost가 Bitcoin의 기술적 발전을 설명한 책입니다. 지갑이 주소를 어떻게 읽는지, 노드가 네트워크의 새 소식을 어떻게 받는지, 작은 변경에도 왜 주의가 필요한지처럼 사용자가 잘 보지 못하는 문제를 다룹니다.
프로그램 코드를 몰라도 Bitcoin을 사용할 수 있습니다. 그렇다고 더 개선할 것이 없다는 뜻은 아닙니다. Bitcoin Core에 기여하는 Sjors Provoost는 네트워크의 발전을 가능하게 하는 작업을 소개합니다. 첫 종이책은 2022년에 Purple Dunes에서 출간됐습니다. 책은 당시의 기술적 질문을 다루며, 나중에 원고 소스 파일이 수정됐다고 최초 출간 연도가 달라지지는 않습니다. [1] [2]
지인이 보낸 주소를 지갑에 붙여 넣는다고 생각해 보세요. 사용자에게는 결제의 시작입니다. 개발자에게는 오타를 어떻게 찾아내고 결제 목적지를 지갑에 어떻게 명확하게 전달할지의 문제이기도 합니다. 이 사례는 프로그래밍을 몰라도 책에 접근할 수 있도록 우리가 만든 예입니다. 책의 내용은 주소에서 노드 간 통신, 규칙 변경으로 이어집니다. 어려운 장은 이런 기초를 이해한 뒤 읽으면 더 잘 연결됩니다. [2]
주소는 지갑이 특정 금액을 나중에 사용하기 위한 조건을 구성할 때 쓰는 표현입니다. 조건은 결제에서 새로 만들어지는 부분인 트랜잭션 출력에 기록됩니다. 나중에 이를 사용하려면 보통 유효한 디지털 서명으로 조건을 충족했음을 증명해야 합니다. 따라서 네트워크가 사용자 이름으로 된 은행 계좌를 관리할 필요는 없습니다. Provoost의 장은 사람들이 주고받는 주소와 컴퓨터가 검증하는 규칙을 구별하도록 돕습니다. [3]
주소에는 복사나 입력 과정의 오류를 지갑이 찾도록 돕는 체크섬이 포함됩니다. 그러나 주소가 누구 것인지는 확인하지 않습니다. 앞선 예에서 다른 사람의 올바르게 표기된 주소를 실수로 붙여 넣으면 검사를 통과할 수 있습니다. 따라서 의도한 수취인도 확인해야 합니다. 지갑이 오류를 알리면 어떤 문자를 고칠지 추측하기보다 정확한 주소를 다시 받는 편이 안전합니다. [3] [4]
이제 조금 더 기술적인 내용입니다. Bech32와 Bech32m은 주소 인코딩 형식입니다. BIP 350은 witness 버전 0의 네이티브 주소에는 Bech32를, 버전 1부터 16까지에는 Bech32m을 사용하도록 정합니다. witness 버전은 이 유형의 출력을 검증하는 규칙을 구별하는 숫자입니다. 새로운 형식은 문자 삽입과 관련된 체크섬의 약점을 해결합니다. 모든 기존 주소가 무효가 됐다거나 사용자가 직접 변환해야 한다는 뜻은 아닙니다. [4]
노드는 Bitcoin 네트워크에 연결된 프로그램이며, Full Node는 트랜잭션과 블록의 규칙을 직접 확인합니다. 하지만 새 데이터는 다른 곳에서 받아야 합니다. Eclipse Attack에서는 공격자가 노드의 모든 연결을 장악해 네트워크 상황 일부를 숨길 수 있습니다. 노드는 여전히 유효하지 않은 블록을 거부하지만 정보는 불완전합니다. 받은 데이터를 검증하는 것과 필요한 데이터에 모두 접근하는 것은 다르다는 점을 책은 보여 줍니다. [5]
공격자가 고립된 노드에 아무 블록이나 강제로 받아들이게 할 수는 없습니다. 자신의 결제가 유효하게 확인됐음을 보이려면 요구되는 계산 작업의 증거인 Proof of Work를 충족하는 유효한 블록도 필요합니다. 연결이 복구되면 노드는 누적 작업량이 더 많은 다른 유효한 체인 분기를 발견할 수 있습니다. 그 분기로 전환했을 때 원래 결제가 없다면 이전 확인은 더 이상 성립하지 않습니다. 따라서 보안에는 규칙 검증과 공격에 견디는 네트워크 연결이 함께 필요합니다. [5]
주소처럼 직접 경험해 본 질문에서 시작하세요. 그런 다음 해결책이 무엇을 가능하게 하고 어디에 한계가 있는지 따라가면 됩니다. 이 개요는 판권 정보, 공식 목차, 주소와 Eclipse Attack에 관한 공개 내용 중 일부, BIP 350을 바탕으로 합니다. 책 전체나 그 바탕이 된 팟캐스트 전체에 대한 평가는 아닙니다. 당시 네트워크 수치와 개발 상태는 현재 소프트웨어와 구분해 읽어야 합니다. [1] [2] [3] [4] [5]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Bitcoin Core, Taproot, 합의 규칙, 지갑.
01프로그래밍을 몰라도 책에서 배울 수 있나요?+
주소나 노드 격리에 관한 문제를 이해하는 데 프로그래밍은 필요하지 않습니다. 다만 책에는 고급 기술을 다루는 장도 있습니다. 익숙한 상황에서 시작해 세부 사항을 차근차근 더하세요. 이 개요는 일부 주제만 설명합니다.
02올바른 주소와 나만의 Full Node가 있으면 안전한 결제가 보장되나요?+
각각 해결하는 문제가 다릅니다. 체크섬은 수취인을 확인하지 않으며, 직접 노드를 운영해도 네트워크 데이터를 받아야 한다는 점은 그대로입니다. 주소 확인, 규칙 준수, 체인에서의 확인은 서로 관련되지만 대신할 수는 없습니다.