저자: 제임슨 롭
관련 자료:
원본 링크:
https://blog.lopp.net/bitcoins-security-model-a-deep-dive/
관련 자료:첫 번째 레벨 제목
보안 모델에 대한 오해
또한 모든 블록체인 시스템은 제네시스 블록을 노드 소프트웨어에 하드코딩합니다. "공유 기록"(즉, 원장)을 일종의 사회적 계약으로 생각할 수 있습니다. 일단 블록이 충분히 오래되면 네트워크의 모든 참가자 간에 블록이 롤백되지 않을 것이라는 합의가 있습니다. 개발자가 이전에 채굴된 블록을 가져와서 체크포인트를 생성하는 데 사용할 때 이는 기록에 대한 객관적인 설명이라기보다 허용되는 온전성 검사에 가깝습니다.
체크포인트 외에도 노드가 자체 부팅을 구현하는 방법도 문제입니다. 현재 비트코인 노드의 부트스트래핑 프로세스는 노드가 이전에 피어로부터 학습한 데이터를 로컬에 저장했는지 확인하는 것입니다. 그렇지 않은 경우 노드는 소프트웨어에 하드코딩된 "DNS 시드" 집합을 쿼리합니다. 이 시드는 잘 연결된 비트코인 노드 목록을 유지 관리하고 이 목록을 노드로 반환하는 역할을 합니다.
코드에서 볼 수 있듯이 Bitcoin Core 0.13은 현재 Pieter Wuille, Matt Corallo, Luke Dashjr, Christian Decker, Jeff Garzik 및 Jonas Schnelli가 운영하는 DNS 시드를 사용합니다. 누구나 Pieter Wuille의 비트코인 시드 생성기 소프트웨어 또는 Matt Corallo의 소프트웨어를 사용하여 DNS 시드를 실행할 수 있습니다. 그러나 상대방의 소프트웨어에 자신의 DNS 시드 호스트를 추가하려면 개발자에게 전체 노드 구현을 설득해야 합니다.
새 노드의 부트스트래핑 프로세스는 6개의 DNS 시드에만 의존하며, 이는 또 다른 극도로 중앙 집중화된 단일 문제 지점으로 보입니다. 그러나 비트코인의 보안 모델은 Sybil 공격에 충분히 저항할 수 있는 정직한 피어 노드에 연결하기만 하면 된다는 점을 잊지 마십시오.
따라서 새 노드는 정직한 노드의 IP 주소를 반환하는 손상되지 않은 DNS 시드에만 연결할 수 있으면 됩니다. 그러나 어떤 이유로 모든 DNS 노드에 연결할 수 없게 되는 경우 소프트웨어에 하드코딩되고 새 릴리스가 나올 때마다 업데이트되는 신뢰할 수 있는 노드 IP 주소 목록인 폴백이 있습니다.
첫 번째 레벨 제목
절대적인 보안은 없다
더 깊은 수준에서 전체 노드를 실행하면 실행 중인 하드웨어와 소프트웨어를 어느 정도 신뢰합니다.
그림
첫 번째 레벨 제목
비트코인의 분산형 수표와 잔액
Bitcoin 시스템의 다양한 행위자 간의 관계를 살펴보기 시작하면 안개 속에서 자신을 찾을 수 있습니다.
풀노드를 운영하는 목적은 금융 주권을 보호하는 것입니다. 이것이 의미하는 바는 소프트웨어의 특정 버전을 설치하고 실행하면 해당 소프트웨어 및 다른 모든 네트워크 참여자와 계약을 체결한다는 것입니다. 소프트웨어의 규칙을 준수할 뿐만 아니라 다른 네트워크 참여자도 이 규칙을 준수해야 합니다. 뒤따랐다.
따라서 사람들이 소프트웨어 규칙에 대해 이전 버전과 호환되지 않는 변경을 수행하려는 경우 해당 규칙 변경에 대한 명시적인 동의를 표시하기 위해 새 버전의 소프트웨어를 실행해야 합니다. 반면 이전 버전과 호환되는 규칙 변경인 경우 동의하지 않더라도 네트워크에서 시행할 수 있습니다.
그림
비트코인 거버넌스의 세 가지 주요 지점:
전체 노드(채굴자와 개발자를 거부할 수 있음)
광부(개발자에게 거부권을 행사할 수 있음)
개발자(다른 사람들이 특정 거부권을 우회하도록 도울 수 있음)
전체 노드 소프트웨어는 자동으로 업데이트되지 않으며 이는 의도된 것입니다. 자동 업데이트는 개발자에게 유리한 힘의 균형을 제공하여 개발자가 노드 및 채굴자의 허가 없이 규칙 변경을 강제할 수 있도록 합니다.
기술적인 수준에서 규칙 변경이 이전 버전과 호환될 수 있지만, 충분히 창의적인 소프트 포크가 이전 버전의 규칙을 위반하는 변경 사항을 구현할 수도 있음을 수년간의 경험을 통해 알 수 있습니다. 예를 들어, Vitalik Buterin은 비트코인의 블록 시간이 소프트 포크를 통해 10분에서 2분으로 단축되어 필연적으로 비트코인 발행 속도가 빨라질 것이라는 아이디어를 언급한 적이 있습니다.
불리한 소프트 포크에 직면하여 전체 노드에는 트럼프 카드가 있습니다. 하드 포크를 사용하여 소프트 포크를 지원하는 다른 광부와 명확한 선을 그립니다. 이것은 (설계상) 집행하기 어렵고 합의를 측정하고 경제적 가중치가 높은 노드를 찾는 방법에 대해 많은 질문을 제기합니다.
기술적으로 이러한 하드 포크는 마이닝 알고리즘을 이중 SHA256에서 다른 해시 함수로 변경하여 달성할 수 있습니다. 일단 성공하면 모든 SHA256 ASIC 채굴자는 비트코인을 채굴할 수 없습니다. 따라서 노드 운영자는 비트코인 생태계의 변화에 항상 주의를 기울여야 하며, 채굴자가 권한을 초과할 경우 교체될 위험이 있음을 상기시켜야 합니다.
첫 번째 레벨 제목
SPV 보안
많은 비트코인 사용자는 강력한 보안을 제공하면서도 훨씬 적은 리소스를 소비하기 때문에 전체 노드가 아닌 경량 클라이언트를 사용하여 네트워크에 액세스합니다.
그림
나카모토 사토시(Satoshi Nakamoto)는 백서에서 SPV 클라이언트가 "트랜잭션 자체를 검증할 수는 없지만 트랜잭션을 블록체인과 연결함으로써 네트워크의 노드가 트랜잭션을 수락했음을 알 수 있다. 체인에서 네트워크가 트랜잭션을 수락했음을 추가로 확인합니다." SPV는 X 블록 확인 후 트랜잭션 위조가 매우 비용이 많이 든다고 가정합니다.
SPV는 풀 노드만큼 안전해 보이지만 추가 가정을 도입합니다. 블록 헤더와 작업 증명이 유효한 한 여기에 포함된 모든 트랜잭션도 유효합니다. SPV 클라이언트는 본 논문의 섹션 1에서 언급한 모든 합의 규칙을 검증하지 않기 때문에 트랜잭션 쿼리 요청에 응답하는 노드가 이미 합의 규칙을 검증했다고 가정합니다.
또 다른 사소한 보안 차이점은 피어가 정보를 보류할 가능성이 있다는 것입니다. 전체 노드를 실행하면 피어가 확인되지 않은 트랜잭션과 블록을 숨길 수 있습니다. 그러나 동료로부터 블록을 받으면 아무도 해당 블록의 트랜잭션을 숨길 수 없습니다. 반면에 SPV 클라이언트를 실행 중인 경우 피어가 블록 헤더를 제공한 다음 해당 블록에서 트랜잭션을 보류할 수 있습니다.
SPV 클라이언트는 주소의 관련 트랜잭션을 쿼리할 수 있습니다. 피어가 가짜 트랜잭션(충분한 PoW로 블록을 채굴해야 함)으로 SPV 클라이언트를 속이는 데 비용이 많이 들지만 SPV 클라이언트가 트랜잭션을 쿼리하는 데 사용하는 Bloom 필터(블룸 필터)가 결과가 없다고 거짓말할 수 있습니다. 주목해야 할 또 다른 점은 SPV가 Bloom 필터의 결함으로 인해 심각한 개인 정보 침해를 겪고 있다는 것입니다.
BitcoinJ에는 SPV의 보안 모델에 대한 훌륭한 기사가 있습니다. 확인되지 않은 거래에 대해 다음과 같이 명시합니다.
SPV 모드에서는 연결된 노드가 트랜잭션을 전달하는 한 트랜잭션이 유효한 것으로만 믿을 수 있습니다. 공격자가 연결된 노드가 모두 자신의 노드임을 확인할 수 있는 경우 완전히 잘못된 거래(존재하지 않는 돈 지출)를 보낼 수 있으며 거래가 유효한 것으로 수락합니다.
첫 번째 레벨 제목
Bitcoin 네트워크에는 127.0.0.1이 없습니다.
전체 노드를 실행하지 않는 경우(실제로 이를 사용하여 트랜잭션을 확인하는 경우) 제3자를 어느 정도 신뢰하는 것이므로 보안 모델에 차이가 있습니다. 이것은 모든 사용자와 기업이 Bitcoin Core의 RPC API 위에 직접 소프트웨어를 구축할 것을 요구하지 않는다는 점에 유의하십시오.
일부 대체 인프라 구성에는 다음이 포함되지만 이에 국한되지는 않습니다.
그림
2) SPV 노드 라이브러리(예: BitcoinJ)에 애플리케이션을 구축하고 이러한 애플리케이션을 자신의 전체 노드에만 연결하도록 설정합니다. BitcoinJ에서는 자신의 SeedPeer를 정의하고 초기화 중에 PeerGroup에 전달함으로써 이를 달성할 수 있습니다. libbitcoin을 사용하면 이 예제를 사용하여 특정 노드에 대한 네트워크 연결을 정의할 수 있습니다.
풀 노드: 자유를 위하여
풀 노드: 자유를 위하여
분명히 자신의 전체 노드를 실행하는 것이 가장 안전한 옵션이며 가장 적은 가정이 필요합니다. 신뢰할 수 있는 전체 노드를 실행할 수 있는 컴퓨터를 구축하는 데 드는 비용은 수백 달러에 불과합니다. 재정적인 주권을 보호하기 위해 지불할 가치가 있는지 수학을 해보고 결정할 수도 있습니다.
이 기사를 검토하고 피드백을 제공한 Kristov Atlas, Eric Martindale, Andrew Miller 및 Kiara Roble에게 감사드립니다.