#15 - 트랜잭션 검증 원리에 대한 개념정리 / 비트코인 거래원리(3/N)

in #kr7 years ago (edited)


main.jpg



안녕하세요. 어미새입니다.


지난 포스팅에서는 아래와 같이 공개키 암호화 알고리즘에 대한 개념정리를 하였습니다.


  1. 공개 키 암호화 알고리즘에는 공개 키와, 개인 키 정보가 있다.
  2. 공개 키는 누구나 알 수 있지만 개인 키는 반드시 본인만 알아야한다.
  3. A와 B가 메시지를 주고 받고자할 때 A의 '개인 키'로 암호화하여 B에게 전송했을 경우 B는 A의 공개 키로만 복호화가 가능하다. 또한 공개 키는 모두가 알고 있기 때문에 모든 사람이 메시지를 해석할 수 있다.
  4. A의 '개인키'로 암호화 된 문서는 오직 개인키를 알고 있는 A만 만들 수 있기 때문에 '전자서명'으로 사용될 수 있다.
  5. A가 B의 공개키로 메시지를 암호화 했을 경우 B의 개인키로만 메시지를 복호화 할 수 있기때문에 정보의 기밀성을 보장하면서 메시지를 전달 할 수 있게된다.


오늘 포스팅의 목표는 비트코인의 거래시 트랜잭션의 검증이 어떻게 이루어지는지에 대한 개념정리를 목표로 포스팅을 진행하겠습니다!



트랜잭션 전파



이해를 돕기 위해서 비트코인 거래의 전체적인 흐름을 한번에 설명하지 않고 나눠서 하나씩 채워가는 형태로 설명을 하겠습니다.


비트코인을 거래하기 위해서는 거래 정보를 작성해야합니다. 예를 들어서 'Bird'가 'Dog'에게 1.0 BTC를 보낼 것이라고 메시지를 작성합니다. 이렇게 작성된 메시지를 '트랜잭션'이라고 표현하며, 해당 트랜잭션은 비트코인 네트워크에 연결된 노드(지갑)들에게 전파됩니다. 트랜잭션을 수신 받은 각 노드들은 거래 내역을 업데이트하고 또 다시 다른 노드들에게 해당 트랜잭션을 전파하게 됩니다.



20_0.png


위의 그림 처럼 새롭게 생성된 트랜잭션을 각 노드들에게 전파 됩니다. 트랜잭션을 수신한 노드는 반드시 해당 트랜잭션이 올바른 트랜잭션인지 검증하는 수단이 필요합니다.


'Caw'가 'Bird'의 돈을 훔치기 위해서 'Dog'와 짜고 가짜 거래내역을 만들어내서 비트코인 네트워크에 연결된 노드들에게 전파하면 어떡하죠?



20_1.png


예전 포스팅을 통해 어떤 거래가 이루어지면 각 노드는 해당 거래가 '진짜'인지를 검증하고 검증된 거래내역만 업데이트 한다고 설명해 드린적이 있습니다! 그렇다면 어떻게 검증이 이루어질까요? 해당 거래가 '진짜' Bird가 보냈는지에 대한 유효성 검증을 하기 위해서는 디지털 서명(Digital Signature) 혹은 전자 서명이 필요합니다.



전자 서명



지난 포스팅에서 '개똥'이와 '소똥'이의 예제를 통해서 공개키 암호화 알고리즘을 이용하여 '전자 서명'을 하는 방법에 대하여 언급하였습니다. 기억하시나요?


암호화 알고리즘은 비대칭 암호화 방식으로 '개인 키'로 암호화 데이터는 오직 '공개 키'로만 해석할 수 있다고 설명해드렸습니다. 그리고 이 방식은 '공개 키'를 가지고 있는 사용자라면 그 누구라도 암호화된 데이터 내역을 복호화 할 수 있지만 반대로 이러한 암호화 데이터는 오직 '개인 키'를 가진 사람만 할 수 있다고 설명해 드렸습니다.


비트코인을 거래하기 위해서는 원본 데이터와 전자 서명된 데이터를 함께 보내어 해당 트랜잭션의 데이터 내용이 수정되었거나 올바른 메시지인지 '검증'을 하게됩니다. 'Caw'가 'Bird'인척 트랜잭션을 전파했을 경우의 예를 들어보겠습니다.



20_2.png


위의 그림 과정을 설명해드리면 아래와 같습니다.

  1. 'Caw'가 거래 내용을 마치 'Bird'가 'Dog'에게 BTC를 송금한것 처럼 메시지를 작성한 후 자신의 개인 키 정보를 이용하여 전자 서명 후 비트코인 네트워크에 있는 노드들에게 해당 거래내역을 전파합니다.
  2. 트랜잭션을 수신 받은 노드는 해당 메시지를 확인 후 Bird가 보낸 메시지가 맞는지 확인하기 위하여 Bird가 가지고 있는 공개 키 정보로 디지털 서명을 복호화 합니다.
  3. Bird의 공개키로 암호화된 데이터를 복호화 하였지만, 복호화한 데이터와 트랜잭션의 원본 내용이 일치하지 않기 때문에 해당 거래내역은 '가짜' 혹은 조작된 거래내역으로 판별하고 해당 트랜잭션을 무시하게됩니다.


위의 시나리오는 조작된 거래에 대하여 판별하는 시나리오 입니다. 다음은 정확한 검증 시나리오를 살펴봄으로써 정확하게 트랜잭션의 유효성 검사가 어떻게 이루어지는지 확인해보겠습니다.


1. 원본 데이터를 자신의 '개인키'로 암호화를 진행하여 '전자서명'을 진행합니다.



20_3.png


2. 원본 데이터와 '전자 서명'된 데이터를 노드에 전파합니다.



20_4.png


3. 노드는 해당 트랜잭션이 '진짜'인지에 대한 검증을 위해 트랜잭션을 송신한 'Bird'의 공개키를 이용하여 난독화를 진행합니다.



20_5.png


4. 난독화된 거래 데이터와, 원본 데이터를 비교하여 수정된 데이터가 있는지 데이터의 무결성을 검증합니다.



20_6.png


5. 수신 받은 트랜잭션이 '진짜'거래로 판단될 경우 블록체인에 해당 트랜잭션을 업데이트 하고 블록체인 네트워크에 연결된 노드들에게 해당 트랜잭션을 전파하게 됩니다.



20_7.png




자 그럼 다시한번 최종적으로 위의 내용을 정리해보도록 하겠습니다.

  1. 노드에 전파된 트랜잭션이 '진짜'인지 검증을 하기 위하여 '전자서명'이 필요하다.
  2. 공개키 암호화 알고리즘에 의해 송신자의 '개인 키'로 암호화 했을 경우 '전자 서명'된 데이터를 만들 수 있다.
  3. 트랜잭션에는 '원본 데이터'와 '전자 서명'이 포함되어 있으며 각 노드로 전파된 트랜잭션이 진짜 인지를 검증하기 위해 사용된다.
  4. 노드는 '전자 서명'된 데이터를 난독화 하여 난독화된 데이터와 원본 데이터가 완전히 일치했을 경우에만 유효한 트랜잭션으로 인정하고 해당 거래를 업데이트 후 주변 노드들에 해당 트랜잭션을 전파한다.


어느정도 이해가 되셨나요? 현재 설명한 내용으로는 비트코인 거래원리를 100% 설명했다고 할 수 없습니다. 다음 포스팅에서도 계속해서 비트코인 거래원리에 대한 포스팅을 이어가도록 하겠습니다!


이상 긴글 읽어주셔서 감사합니다.(보팅, 리스팀은 제게 큰 힘이됩니다!)



[참고 자료]
https://ko.wikipedia.org/wiki/%EA%B3%B5%EA%B0%9C_%ED%82%A4_%EC%95%94%ED%98%B8_%EB%B0%A9%EC%8B%9D
https://steemit.com/kr/@jsralph/5f59rf-1
https://withkairos.wordpress.com/2015/06/14/mastering-bitcoin-2-%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8%EC%9D%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94%EA%B0%80-how-bitcoin-works/

Sort:  

스스로 홍보하는 프로젝트에서 나왔습니다.
오늘도 좋은글 잘 읽었습니다.
오늘도 여러분들의 꾸준한 포스팅을 응원합니다.

감사합니다:) 즐거운 스팀잇되세요!

잘 읽고 갑니다. 보팅 드립니다.

감사합니다! 안녕히 주무세요 흐:)

좋은 내용 감사합니다.
그러니깐 전자서명은 노드끼리 전파를 할 때 사용되고,
그 반대인 상대방의 공개키로 암호화를 하는 건 거래 내역을 전송할 때 사용하는거군요?

맞습니다. 상대방의 공개키로 비트코인을 전송하면 이 공개키의 주인만이 주인이라는것을 검증 할 수 있게됩니다.
그리고 보내는 사람의 데이터가 진짜인지 확인하기 위해서 전자 서명이 필요한겁니다~
다음 포스팅에서 이부분에대해서 자세히 다뤄보겠습니다.
늘 방문해주셔서 감사합니다:)

좋은 내용 잘 봤습니다. 어떤 원리가 더 숨어있는지 보러 갑니다

감사합니다:) 아마 포스팅 2회 정도 더 작성하면 거래원리에 대한 정리가 거의 끝나지 않을까 싶네요~ 자주 방문해주셔서 감사합니다 ^^

공개키 방식에 대해 친근한 편인데도 헷갈리네요. 리스팀해두고 좀 더 봐야겠어요. 전자서명 알고리즘도 sha 256이 되는건가여?

추가로 공개키에서 사용되는 암호학 방식이 무엇인지 찾아보고 알려드릴께요~ sha256이 아닐수도 있다는 생각이 드네요 흐흐:)

힛 공개키 암호와 알고리즘에는 SHA256 방식이 아닌 타원곡선 암호화 방식이 적용되어 있습니다. 이와 관련된 포스팅 링크도 드려요!
https://steemkr.com/kr/@icoreport/key-1-rsa

오우 그렇군요. 대칭형(aes)과 비대칭형(rsa) 그리고 해쉬함수인 sha로 정리되는것 같군요. 다시한번 머릿속에 넣었습니다. 감사합니다.

덕분에 한번더 찾아볼 수 있었습니다!
아 참 그리고 UTXO에서 사용하는 알고리즘은 Greedy 알고리즘이라고합니다!(다음 포스팅에 이 주제도 욕심이나더라구요.. 흐흐:)

매우 심플 & 재미있습니다.

핫 감사합니다~ ^^

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 64036.76
ETH 2647.26
USDT 1.00
SBD 2.78