You are viewing a single comment's thread from:

RE: 블록체인에 대해 공부해보자! - 소프트웨어의 중앙화

in #kr6 years ago

궁금한게 있는데 질문하나 드려도 되나요? 거래가 일어나면 모든 노드에 동시에 거래가 기록되는 건가요? 그리고 노드중 하나에서 블럭을 만들고 블럭이 생성되면 각 노드들은 해당블럭의 진위여부만 검증하고 저는 그런식으로 알고 있었는데 만일 누군가가 악의적인 내용의 거래를 장부에 기록하면 모든 노드에 있는 장부에 동시에 기록되는게 아닌건가요? 이미 형성된 블록은 해킹이힘들다는 건 알겠는데 블록이 형성되기 전에는 헛점이 있는게 아닌건가요? 궁금하네요

Sort:  

쉽게 쉽게 그리고 물리적으로 생각하시면 됩니다.
거래가 일어나면 거래내역을 당사자가 네트워크상에 업로드하게 됩니다.
그러면 옆에 노드가 그걸 받고 검증후 옳은 내용이면
옆으로 전달합니다. 그걸 무한 반복하여 전체로 퍼뜨립니다.
당연히 물리적으로 업로드와 동시에 빛의 속도로 전체에 동시에 도달할 순 없고 어느지역은 네트워크 문제로 느리게 가고 어디는 빨리가고..
또 어떤 노드는 컴터가 꺼진다던가.. 여러가지 사정으로 다들 순차적으로
받게 됩니다. 그래도 한번 확산되기 시작하면 지금의 네트워크 속도에선
모든 노드가 같은 내용을 공유하게 되는 것은 순식간이죠.

그리고 위에서 언급했듯이 받고 막 뿌리는게 아니라 받은 노드들이
거래내역 자체를 검증하고 뿌립니다. 블록만 검증하는게 아니죠.
그래서 악의적 거래내역은 사실상 확산자체가 불가능합니다
검증이 실패한 노드에서는 그걸 폐기해버리고 더는 안뿌리니까요.

그러므로 형성된 블록도 해킹이 불가능하지만
블록이 형성되기전 악의적 거래내역을 퍼뜨리는것도 불가능합니다.

일반적으로 채굴자들은 각기 다른 트랜잭션이 담긴 블록들을 채굴하는데요.(중복된 트랜잭션이 있는 경우도 있습니다) 채굴에 성공한 채굴자는 자신이 채굴한 블록을 다른 노드들에게 전파합니다.

'나 채굴했어!'

하고 말이죠. 그리고 그 블록을 전파받은 채굴자들은 이후 블록 생성을 위해 트랜잭션을 담아 채굴하기 시작합니다. 답을 드리자면, 거래가 일어나면 동시다발적으로 모든 장부에 기록되지 않습니다.

두 번째 질문에 답해드리자면, 비트코인 코어에 누군가 악의적으로 거래를 기록할 수가 없는 구조입니다. 사용자가 거래를 생성할 때 자신의 개인키를 이용하여 전자 서명을 하게 되는데 전자 서명이 다를 시 소프트웨어에 의해 유효하지 않다고 판단하여 해당 트랜잭션은 제외됩니다.

추가적으로, merkle tree 방식을 사용하기 때문에 거래 내역이 하나만 바뀌어도 merkle root의 값이 바뀌기 때문에 트랜잭션에 대한 위변조는 거의 불가능하다고 알고 있습니다.

풀노드를 사용하는 네트워크 참여자들은 주변 노드들의 블록체인을 대조하여 검증하는 방식을 사용하기 때문에 위변조된 거래를 받아들일 가능성은 없다고 보시면 됩니다.

제가 글에서 말씀드린 부분은 소프트웨어 자체의 검증 생략 버그입니다. 지금은 이 버그가 수정이 되었습니다. 소프트웨어로 블록 생성과 검증이 이루어지기 때문에 소프트웨어에 대한 업데이트는 주기적으로 이루어져야 합니다. 스팀의 경우, 증인 노드가 소프트웨어 업데이트를 하지 않으면 증인 순위에서 밀려나죠.

질문 주셔서 감사합니다! 언제든 편안하게 질문해주세요!