×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,701,144명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
728x90
반응형

https://blockchain.info


위의 사이트는 블록체인의 실시간 현황을 알 수 있는 사이트이다.


검색 버튼을 누르고 블록 번호 1번을 조회해보자.(검색창에 1이라고 검색하면 된다.)


검색 결과는 아래 주소와 같다.

https://blockchain.info/block/00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048



1번 블록은 비트코인 제작자 사토시 나카모토의 블록이다.


블록 체인의 높이는 당연히 처음 생긴 블록이니 1이 될 것이고


타임 스탬프는 생성된 시간을 의미한다.


난이도또한 최초의 블록이니 1을 나타내고 있다.


이때 Bits와 난이도가 결합되어 target라는 것이 나타나는데 target값 이하인 해시 값을 찾아야 블록이 생성된다.

(보통 난이도는 해시값 앞에 0이 몇개 등장하는지로 결정한다고 생각하면 된다.)


블록보상은 50BTC로 시작하여 4년마다 1/2씩 줄어든다. (현재는 1블록당 12.5의 보상을 받는다.)




https://anders.com/blockchain/


이번에는 블록체인이 어떻게 돌아가는지 간단하게 알아보자.



https://anders.com/blockchain/hash.html


Hash버튼을 누르면 위의 사이트로 연결된다.


블록체인은 SHA256으로 해싱한 값들을 이용한다.


SHA256은 2^256개의 해시 결과값을 가지므로 충돌률이 0%에 가깝다.


이제 다양한 데이터를 넣어보자.


Data부분에는 우리가 블록체인에 넣을 내용들이 들어가는 부분이다.

예를들면 "kkw564가 5비트코인을 crocus에게 보냈습니다." 

혹은 "kkw564 send 50 bitcoins to crocus"이러한 내용들이 담기게 된다.


이러한 내용들을 작성하면 그 input(message)에 맞는 해시값이 나타난다.



https://anders.com/blockchain/block.html


Block 버튼을 눌러보면 위의 사이트로 연결된다.


여기서 data부분에 아무 값을 넣고 Mine(채굴)을 해보자.


Block번호도 #1로 일정하고, data도 일정한데 Nonce와 Hash가 바뀌었다.


이 사이트는 난이도가 해시값 앞에 0이 4개 나타나야 정답으로 처리한다고 생각해볼 수 있다.


다시 시도해보자.


이제 Data를 입력하면 해시값 앞에 0이 4개 나타나지 않고 다른 값이 나타난다.


Mine을 누르면 nonce가 0부터 시작하여 block 번호, nonce, data 3개를 조합한 해시 값을 찾아가기 시작하는데


이때 해시값 앞에 0이 4개가 나타나면 그 해시값이 정당한 값이 되고 채굴이 완료되는 것이다.

(이 사이트는 튜토리얼이라 해시값 앞에 0이 4개가 나타나지, 실제로는 0이 몇개가 나타나는지 난이도에 따라 다르다.)




https://anders.com/blockchain/blockchain.html


위의 링크를 타고가서 이제 블록들을 이어보는 블록체인을 만들어보자.


5개의 블록이 현재 나타나있다.


1번 블록에 데이터를 입력하면 1번부터 5번까지 블록이 모두 붉은색으로 변할 것이다.


그 이유는 1번 블록의 해시값이 변함으로써 2번의 prev값(1번 해시값)이 변하게 되고 결국 2번의 해시값도 변하게 되고

마지막 5번까지 변하게 되기 때문이다.


따라서 우리는 각각 다시 마이닝을 해야 정당한 블록으로 인정 받을 수 있게 된다.


이때 1번만 마이닝한다고 2번도 정당한 블록이 될 수 없는 이유는 1번의 해시값이 바뀌면 2번의 해시값도 바뀌기 때문이다.




https://anders.com/blockchain/distributed.html


위의 링크를 누르면 distributed block가 나오게 된다.


블록체인에서 정당한 블록체인이 되기 위해서는 남들보다 긴 블록체인이 되어야 한다.


peer A,B,C가 있는데 만약 A의 2번 블록의 데이터가 생겨 해시가 변화하면 A는 2번부터 계속해서 채굴을 해 나가야 한다.


하지만 B,C는 5번 이후로 6,7,8...을 채굴하게 되고 결국 A가 B,C보다 더 길게 마이닝을 성공하지 못한다면


A의 2번 블록 데이터의 수정은 무산으로 돌아가게 된다.




https://anders.com/blockchain/tokens.html


블록에서 데이터를 좀더 상세하게 표기를 한다.


money, from, to는 위의 링크처럼 표현 될 수 있다.


https://anders.com/blockchain/coinbase.html


위의 링크는 코인까지 표현해주는 상태이다.





https://anders.com/blockchain/public-private-keys/


위 사이트는 블록체인에 이용되는 public key, private key를 간단히 소개해주는 사이트이다.


블록을 변조하였을 때 그 블록이 원래 유효한 블록인지 확인하기위해 공개키 비공개키를 이용하여 디지털 서명을 하게 된다.


한번 위의 사이트를 이용하여 알아보자.




https://anders.com/blockchain/public-private-keys/keys.html 


위의 사이트를 통해 우선 공개키, 비공개키를 생성해볼 수 있다.


비공개키는 자신이 돈을 보내는 지갑이 되고, 공개키는 자신이 돈을 받는 지갑이 된다.


따라서 돈은 어디서든 받아도 무관하니 공개키를 통해 거래를 하고, 비공개키를 이용하여 자신의 지갑의 유효성을 증명해줄 수 있다.


https://anders.com/blockchain/public-private-keys/signatures.html


다음으로 위의 사이트로 들어가면 서명을 할 수 있는 기능이 생긴다.


메시지에 내용을 입력하고 private key를 이용하여 Sign을 누르면 Message Signature에 값이 생기게 된다.


이 값은 메시지 내용을 내가 보냈다는 것을 증명할 수 있게 되는 단서가 된다.


그 이유는 메시지 + 내비공개키 = Message Signature가 되기 때문이다.


이제 그 옆의 탭인 verify를 눌러 서명의 정당성을 확인해보자.


내가 보낸 메시지가 변조되지 않았다면 메시지 + publickey + signature = 유효하다고 판정될 것이다.


어떻게 메시지와 publickey와 signature로 유효한지는 타원 곡선 알고리즘을 이용하여 판단하고 해시를 이용하여 판단하는 것은 아니다.



추가적인 블록체인 튜토리얼 사이트 :: https://blockchaindemo.io/






반응형