블록체인과 블록체인 노드에 대해 궁금합니다
블록체인에 대해 궁금한게 생겨서 질문드립니다
블록체인이 p2p형식으로 같은 블록체인들을 노드들이 가지고 있다고 하는데요
모두가 같은 블록체인을 가지고 있기에 지금까지의 데이터를 누군가가 임의로 바꾸기 힘들다는 건 알겠습니다
그런데 새로운 데이터는 최초의 노드들 사이에서 만들어지고 이데이터가 p2p형식으로 모든 노드들에게 퍼지는것일탠데요
예를 들어 a와 b가 1비트코인을 거래했다 라는 데이터가 a노드와 b노드사이에서 만들어져서 모든 노드들에게 퍼지는 것처럼요
그럼 이 새로운 데이터를 다른 노드들에게 퍼트리기 전에 이 두 사람이 짜고쳐서 a와b가100비트코인을 거래했다 라고 바꿔버리고 버트리면 해결책이 없지않나요??
처음 퍼지기 전에 최초의 데이터가 정확하다라는 보장은 어떻게 할 수 있나요??
그냥 블록체인이 궁금해서 찾아보는 평범한 학생이라 터무니없는 질문일 수도 있습니다만 친절한 설명 부탁드립니다 ㅠㅠ
질문자께서 질문해주신 내용을 중심으로 답변을 드리도록 하겠습니다.
새로운 데이터를 다른 노드들에게 퍼트리기 전에 이 두 사람이 짜고쳐서 a와b가100비트코인을 거래했다 라고 바꿔버리고 버트리면 해결책이 없지않나요?? 처음 퍼지기 전에 최초의 데이터가 정확하다라는 보장은 어떻게 할 수 있나요??
질문자께서 질문해주신 내용은 결국 51% 공격이 성공하느냐에 따라 다를 것이라고 생각합니다.
일반적으로는 트랜젝션이 처리되는 도중에 블록 내부 정보를 조작하거나 정보를 탈취하여 수신자의 주소를 변경할 수는 없습니다. 왜냐하면 공개 키와 개인 키로 트랜젝션이 암호화되어 처리되기 때문입니다.
A와 B가 암호화폐를 전송하는 거래를 한다고 할 때 A가 자신의 개인 키로 트랜젝션의 내용을 암호화하고 자신의 공개 키 주소를 통해 B에게 전송하게 됩니다. 이때 A의 최초 거래 데이터가 정확하다는 것은 이전까지의 블록에 저장된 거래 내역을 통해 검증이 가능하고 보장이 됩니다. 예를들어 전 블록까지 A의 지갑에 잔고가 1BTC가 있다면 새로운 트랜젝션을 생성하면서 잔고보다 많은 2BTC를 전송할 수는 없는 것입니다.
계속해서 A가 자신의 개인 키로 트랜젝션의 내용을 암호화하고, 자신의 공개 키 주소를 통해 B에게 전송했다고 할 때, B와 다른 노드들은 A의 공개 키를 통해 트랜젝션의 내용을 복호화하여 트랜젝션이 유효하다는 것을 확인하게 됩니다.
이때 A가 브로드캐스팅한 암호화된 트렌젝션에는 암호화폐를 B의 공개 키 주소로 전송했다는 것이 나와 있고 앞서 트랜젝션이 유효함을 검증한 상태이므로, 이 거래에서 B의 공개 키에 대응되는 B의 개인 키가 없이는 A가 보낸 암호화폐를 탈취할 수 없게 되는 것입니다.
하지만 처음 말씀드렸듯이 51% 공격이 일어나는 경우에는 이야기가 달라질 수 있습니다. 전체 해시 파워의 51% 이상을 장악하고 위, 변조된 트랜젝션을 발생시켜 블록을 생성한 다음 그것을 유효한 거래로 처리하여 기록하고 메인 체인과 연결시켜 버릴 경우에는 블록의 정보를 조작하는 것이 가능할 수 있겠습니다.
답변이 도움이 되길 바랍니다.