비트코인 블록체인 거래 및검증 프로세스 질문 드립니다..
안녕하세요
비트코인 블록체인 검증 프로세스 관련하여 궁금한 점이 있어 질문 글을 올립니다.
비트코인 블록체인 검증 프로세스로 알고 있는 부분에 대해 먼저 글을 쓰고 그 중에 이해가 가지 않는 부분이 있어
도움을 받고자 글을 올립니다.
비트코인 거래 및 검증 시스템에서
비트코인 코어 설치 후 블록 동기화가 진행되며 제네시스 블록부터 시작하여 블록 하나하나에 대한 검증이 이루어지며
블록 내에 포함된 UTXO들을 DB에 저장하는 것으로 알고 있습니다.
그렇게 모든 블록에 대한 UTXO set 이 DB에 저장되게 되고 이러한 Set들을 이용하여 거래를 생성하고 검증하는 것으로 알고 있습니다.
여기서
블록체인 상에 저장된 데이터가 현재 중요한 요소로 알려져 있지만, DB에 저장된 UTXO set의 위변조가 이루어지지 않는 것 또한 중요한 것 아닌가 하는 의문점이 생겼습니다.
악의적인 사용자가 사용자의 DB 내용을 변경할 시 블록체인 내용과 다른 내용을 통해 거래를 생성 할 수 있으며, 이러한 거래는 블록체인 전체 네트워크에 의해 막아질 수 있겠지만, 예방 차원의 블록체인 데이터와 DB 내 UTXO set 간의 일치성에 관하여 주기적인 검증이 이루어져야 하지 않나 하는 생각을 가지고 있습니다.
제가 질문 드리고 싶은 부분은.
1. 비트코인 블록체인 동기화시 UTXO를 구분할 수 있는 방법 과
2. DB와 블록체인 데이터 간의 연결성(일치??) 에 대해 검증하는 프로세스가 기존 비트코인 코어 서비스에 존재하는 가 하는 부분에 대해서 질문 드리고 싶습니다.
혹시 아시는 부분이 있으시거나 관련 자료 링크를 아시는 분이 있으시다면 알려주시면 감사드리겠습니다.
안녕하세요 :)
거래는 spent transaction과 unspent transaction(UTXO)로 나눠지게 되는데 풀 노드(full node)를 돌리실 때에는 단지 UTXO set이 아닌 spent transaction까지 포함한 전체 블록체인을 다운받게 되고 각 거래의 유효성(validity)을 모두 검증합니다. 비트코인의 풀 노드들은 신규 블록을 받을 때마다 신규 블록에 포함되어 있는 거래들은 UTXO set에 포함시키고 기존 UTXO 중 신규 거래들에 의해 참조된 UTXO는 배제시키는 방식으로 UTXO set을 지속적으로 업데이트해나가게 됩니다.
두 번째 질문에 대해서는 사용자가 각 거래를 생성할 때 자신의 개인키와 해시함수(hash function)을 사용하여 해당 거래에 전자서명(signature)을 하게 됩니다. 따라서 거래의 내용이 위변조되는 경우에는 거래의 서명 자체가 변경되기 때문에 비트코인 프로토콜에 의해 유효하지 않다고 판단되어 받아들여지지 않습니다. 또한 거래들은 merkle tree라는 구조에 의해 merkle root에 최종 해시값이 저장되는데 merkle root값은 거래 중 하나만 변경되어도 완전히 달라지기 때문에 실질적으로 거래 내용 자체를 단순히 위변조하는 것은 불가능하다고 보시면 됩니다.
도움이 되셨으면 좋겠습니다 :) 참고자료로는 Mastering Bitcoin(2nd Ed): https://github.com/bitcoinbook/bitcoinbook이 가장 좋다고 생각합니다.
안녕하세요 유튜브에서 영상 잘보고 있습니다~
첫번째로 답변해주신 부분은 이해가 가는데 두번째로 답변해주신 부분에서는 제가 질문 드린바와 다른 부분이 있는 것 같아 다시 한번 이야기드립니다.
기존 비트코인 시스템(PKI, 합의알고리즘)에 의해서 위변조된 거래가 막아지는것은 알고 있습니다. 제가 궁금한 점은 이 부분이 아닌 사용자의 편의성? 등을 위해서 악의적인 사용자가 한 노드의 DB를 위조하여 정상적인 거래 생성이 불가능하게 할 시에 이를 방지하기 위한 코어에 기반 장치? 등이 있는가 하는 의문점 입니다. 이 부분이 없어도 정상적으로 비트코인 네트워크가 작동한다는 점은 이해하였지만, 혹시나 예방 차원의 방지 기술이 있는가 하는 점에 질문 드렸습니다.
빠르게 답변 해주셔서 감사드립니다!
악의적인 공격자가 다른 노드에 침입하여 DB를 위조하는 경우를 말씀하시는 건가요?
비트코인에는 전체 블록체인을 모두 저장하는 풀 노드(full node)와 블록의 헤더만을 저장하는 SPV(Simplified Payment Verification) 노드 (일종의 light client)가 있습니다. 풀 노드 같은 경우 거래 데이터를 받은 경우 전체 블록체인과 대조하여 해당 거래의 유효성을 검증하기 때문에 위변조된 거래를 받아들일 가능성이 없구요, SPV 노드 같은 경우에는 블록헤더와 머클경로(merkle path)를 사용하여 해당 거래가 특정 블록에 포함되어있는지를 우선적으로 확인하고 이후 6개의 블록이 특정 블록 위에 쌓였는지를 주변에 연결되어 있는 노드들을 통해 확인하게 됩니다.
기본적으로 비트코인 클라이언트를 돌리게 되시면 주변의 8개의 노드들과 소통을 하게 됩니다. 따라서 이들 중 하나라도 악의적이지 않은 노드가 있다면 잘못된 정보를 받는 것을 방지할 수 있습니다.
제가 정확히 질문을 이해하지 못하였을 수도 있는데 아마 위에서 말씀드린 책을 보시면 좀 더 이해가 되실 수 있을 것 같습니다 :)
답변 주셔서 감사드립니다.
제가 질문 드린 부분과는 다른 부분이 있는 것 같네요
책도 한번 보았는데 제가 질문 드린내용에 대해서는 내용이 없더라구요
위에서 언급하신 전체 블록체인과의 대조 부분에서 이부분은 데이터베이스에 저장된 UTXO 를 통하여 거래 검증을 뜻하는 것으로 아는데, UTXO set 이라는 부분이 초기 블록체인 싱크시 생성된 풀이며 추후에는 이에 대한 관리를 하지 않는 것으로 아는데, 임의로 UTXO set에 대한 조작이 발생할시 거래 검증이 제대로 이루어지지 않을 수 있냐 하는 뜻에서 질문 드린것입니다. 그래서 UTXO set에 대한 관리가 필요하지 않을까하는 의문에 질문 드렸습니다.
답변 감사드립니다!
Congratulations @freesam02! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!