비트코인 따라잡기 4
14 Mycelium의 address import기능
Mycelium같은 Hot wallet은 큰 금액을 보유하는 데는 추천하지 않는다고 했었다. 좀 큰 규모의 투자는 Hardware Wallet을 쓰는 것이 제일 안전하고 편리하지만 장만하는 데는 시간이 걸린다. 그러므로 당분간은 Paper wallet을 사용하는 것도 좋겠다.
Paper wallet을 사용하는 경우, 당신의 Address의 현 잔고를 알려면,blockchain.info Web site에 가서 검색란에 Address를 넣어 검색을 하면 되지만,이건 좀 번거롭다. Mycelium에게 당신의 Address(Private Key가 아니고,Address)를 import시켜 두면 당신의 현 잔고를 늘 실시간으로 보여주므로 편리하다.
(1)외부 Address의 import
이 과정은. . .
Bitcoin의 Address를 import하는 것이지,Private Key를 import하는 것이 아니다.
Account Tap을 열어 보면,최상단에 "+"기호에 열쇄 모양이 있는 icon이 보일것이다. 이것을 클릭후 나타난 화면에서 "Advanced"라는 Button을 클릭한다.
맨 위쪽에 "Scan"이란 Button이 보이고 약간 아래에 "Clipboard . . ."라는 Button이 보일 것이다.
"Scan"은 QR Code를 이용해서 Address를 입력받는 방법이고,
"Clipboard. . ."는 Smartphone의 Clipboard를 통해서 입력 받는 방법이다.
당신의 Paper wallet에, Address에 대응하는 QR code도 같이 전시되어 있으면,"Scan"을 눌러 입력할 수 있다.
QR code가 없으면,일단 Clipboard에 Address를 써 넣어야 하므로,
예를들어 "메모"앱 같은 Text Editor를 열어서 Address를 Miss type없이 Type한후 그 내용을 "Clipboard에 복사"를 한 후,
Mycelium으로 되 돌아와 보면, "Clipboard. . " Button이 저절로 활성화 되어 있을 것이다.
(혹시 Type를 잘못했거나 하여,clipboard내용이 Address의 형식과 다르면,활성화 되지 않는다)
활성화된 "Clipboard. . ."를 누르면 입력이 진행된다.
정상적으로 진행되면,Accounts Tap에 새로운 Account가 하나 생성된 것을 볼 수 있을 것이다.
그 Account는 좌측에 열쇄 표식이 나타나지 않을 것인데,
이 Account 가 Private Key의 정보는 없는, 잔고(balance)보고만을 위한,"Read only"의 계좌임을 나타내는 것이다.
(2)Private Key의 import
물론 Private key를 import하는 것도 가능하다. 절차는 위(1)과 동일하다,다만 Private Key를 import하는 것이 다를 뿐이다.
Mycelium은 data의 형식을 보고,그것이 Address인지 Private Key인지 인식한다. 만일 그 Private Key가 BIP-38규격에 따라 Encrypt되어 있는 경우라면, 추가로 Password나 passphrase같은 것을 더 물어올 것이다.
이렇게 import 하여 생성된 Account에는 그 좌측에 열쇄 표식이 나타나는데,이것은 이 Account는 Private Key도 확보하고 있어서 "Send"거래가 가능함을 말한다.
단, 이 경우 Mycelium에게 Private key정보를 넘기는 것이므로,큰 자금이면 보다 안전한 곳으로 옮기는 사후조치를 해야할 것이다.
Mycelium에 대해서,추가로 한마디만 더 한다면,어린아이가 천방지축 하듯이, 이것 저것 클릭해보면서 직접 많이 경험해보라고 말하고 싶다.
15 Coinb.in의 개요
Mycelium은 mobile용 앱으로써,기본적인 기능은 하지만,Bitcoin이 제공하는 다른 다양한 거래는 할 수 없다.
Coinb.in은 PC에서 사용할 수 있는 Bitcoin Utility software이다. Wallet기능도 포함되어 있지만, 다용도로 쓸수 있는 Bitcoin Utility라고 보는게 맞다. 이 Software는 Java Script가 포함된 html 문서이므로 Web Browser에서 가동된다. 필자는 Web Browser로 Chrome을 써서 사용해 봤지만,다른 Browser도 문제없을 줄 안다.
Bitcoin System을 이해하는데 도움을 주는 교육용Tool이기도 하다. 사용하는데는 두가지 방법이 있는데,
첫째는, 이 Service를 Online으로 제공하는 Web에 접속하여 사용하든가,
둘째는,관련 html 문서와 부속file등을 Down받아, 필요시 internet접속을 끊고,Off Line에서 사용하든가,
(1)Web에 접속하여 사용하기
다음 링크를 열되,마우스 우측버튼을 눌러 "새탭에서 링크열기"를 선택한다.
https://coinb.in
다음과 비슷한 Web화면이 뜰 것이다.
화면 위를 보면 +New,Verify,Sign,Broadcast,. . . 등등 6개의 Tap이 있는게 보일 것이다.
이들 각 Tap은 지정된 한가지 일만 독립적으로 수행한다. 가령,Sign Tap을 누르면 다음 같은 화면이 뜨는데,
Sign할 Private Key를 입력하고, 그아래의 Box에 거래서의 내용을 복사해서 넣은 후, "Submit" 버튼을 누르면,
그 아랫쪽에 출력Box가 나타나면서, Sign한 거래서 내용을 얻을 수 있다.
또,가령 Broadcast Tap을 누르면,위와 비슷한 화면이 나타난다. 입력 Box속에 Bitcoin의 Node에 전달할 거래서 내용을 (물론 Sign된 거래서이어야 유효함) 복사해 넣은후 "Submit"을 누르면 Broadcast가 된다는 식이다. 입력Box에 그때 그때 복사해 넣는 것은 우리가 알아서 해주어야 한다. 즉, 모든 Tap이 각기 독립적으로 작동한다.
Verify Tap이 무엇인지 궁금할 것인데, 거래서는 16진수(Hexa decimal Number)로 표현된 Binary라서, 보아도 뭐가 뭔지 알아 보기 어려우므로,이것을 이해하기 좋은 형태로 출력하여 주는 일을 한다. 그 내용을 보고 거래내용을 최종 점검할 수 있게 도와 주는 것이다. +New이외의 Tap은 더이상 설명이 필요 없을 것이다.
가장 유용하고,좀 자세한 설명이 필요한 Tap은 +New 인데, 여러 용도의 Key Pair를 생성할수 있고,
거래서를(Sign이 아직 않된)작성하는 기능이 포함되어 있다. 이 +New tap에 대한 것은 다음 절(16절)에서 따로 설명할 것이다. 지금은 각 Tap들을 클릭해서 이곳 저곳을 둘러보라. 특히 +New의 하부 메뉴들을 눌러서,"두려울 것이 없으니", 이런 저런 버튼을 눌러보며 조작도 해보고 하면서 맛보기 경험을 해보기 바란다.
(2) Off line에서 사용하기
이 Application이 유용하겠다 싶으면,Internet접속을 끊은 Off line에서도 사용할 수 있도록, 그 html문서등등을 아예 Down받도록 하자. 다음 링크를 방문하여,
github.com
잘 찾아보면 "Clone or Download "라는 녹색Button이 있는데,거기서 Zip file을 Down받도록 한다. Zip file을 풀은 다음, Folder에 들어가 보면 index.html이란 file이 보일 것이다. 이것을 마우스 우측 버튼을 써서 "연결Program"을 가령 Chrome Web Browser로 선택하면, Chrome에서 열릴 것이다.
+New에서 Transaction작성을 할때와 Broadcast를 할때만 Internet접속이 필요하고,기타 기능은
모두 Internet접속없이 사용할 수 있다.
필자는 Zip file을 푼 것을 USB memory에 복사해두고, 필요할때만 USB를 꼿아서 사용하고 있다.
16 Coinb.in에서 +New Tap 사용하기
이 +New tap은 2부류의 하부 메뉴가 있는데,그 한 부류는 4가지 종류의 Address를 생성하기 위한 것이고, 2번째는 Transaction 즉 거래서를 작성하기 위한 것이다.
(1)Address생성 4가지
New Address
맨 아랫쪽의 "Generate"버튼을 누를때 마다,새 Address가 생성될 것이다.
거기에는 Address ,Public Key,Private Key순으로 나타나 있지만,
생성은 Private Key가 생성되는 것이고 이어서,
Public Key-->Address 순으로 Deterministic한 방식으로 계산 되어짐은 이미 설명 한바 있다. 그리고,Public Key와 Address는 세상에 공개(share)해도 무방하고,오직 Private Key만은 본인만 알고 있어야 하는 데,가상화폐의 보안문제란 근본적으로 Private Key를 안전하게 지키는 것에 관한 문제인 것이다.
여기서 생성한 Private key,Public key,Address 이 셋을 가령 Text file내에 복사해서 Printer로 출력을 받아두면 이것이 Paper Wallet이다. 또는 USB Memory에 수록해 두어도 좋다.
만약을 위해서,Internet접속을 끊고 생성하기를 권장한다. 그리고,생성 작업후 PC에는 Private Key에 관한한 일절의 흔적을 남기지 않아야 할 것이다. 물론,Public key와 Address는 text file로 PC에 보관해도 무방하다.
한편,아랫쪽의 "Address Options"를 보면, "Custom seed or Brain Wallet"이라는 Option이 보이는데,
이것은 Random하게 Key를 생성하지 말고,가령 당신이 지정하는 독특한 long Password,또는
당신만이기억해 낼 수 있는 어떤 문장을 씨앗으로 해서 정해진 수학적 계산법에 따라 Key를 생성해 달라는 뜻이다. 이것은 Private Key자체를 기억하거나 보관해 둘 필요없이,이 문장을 머리속에 기억하고만 있으면(Brain),언제나 Private Key를 복원 할수 있으므로 대단히 유용할 수 있다. 한번 시험해 보라. 예를 들어 일부러 Spelling이 틀리게 하는 것도 좋은 idea이다.
이를테면,
"Bitcoin is here to stayy forever! Is it not?" 같은 문장을 Passphrase로 한다는가.
Address Options의 3번째 것은,뭔가 좀 아직 쓰기에 불편한듯 하여, 추천하고 싶지 않다.
Multisig Address
공동명의의 은행계좌를 개설할 수 있듯이,그 Address에서 출금시에는 지정한 3명 모두의 Sign이 필요하다든가, 3명중 임의의 2명의 Sign이 필요하다든가 하는, 그러한 Address를 만들 수 있다.
이른바 Multi Signature Address라 한다. "N of M"방식이라고도 한다.
예를 드는게 빠르겠다,
A,B,C 세사람중 임의의 2명의 Sign으로 출금이 가능한Address를 생성 한다고 하자.
(물론 그 Address에 입금하는 것은 이세상 누구나 할 수있다)
A의 한 Address를 A1이라 하고, 그에 대응하는 Public Key를 Pub(A1)이라 표시한다면,
Mutisig의 화면에서 Pub(A1),Pub(B1),Pub(C1)을 차례로 입력한다.
순서는 무관하다. "Enter the amount . . ."에서 2를 선택한다. 즉, "2 of 3" 방식인 것이다.
(일반적으로 N명중 M명의 Sign이 요하는 Address를 생성할 수 있다)
그리고 나서 "Submit"를 하면, 그 아래에 Address와 함께 "Redeem script"라는 것을 얻게 된다.
이렇게 얻은 Address와 Redeem script는 복사하여 3명이 모두 공유(共有)하도록 한다. Redeem Script는
그 Address에서 출금을 할때 필요하며,그 거래서는 Private Key인 Priv(A1),Priv(B1),Priv(C1) 중에서 임의의 2개로 Sign(Sign하는 순서는 무관)을 해야 효력을 갖는다.
즉, 일단 거래서가 작성되면, "Sign" Tap에 가서 Priv(A1)으로 1차 Sign하여 Sign한 거래서 출력을 얻고,그것을 입력Box에 복사한후 Priv(B1)으로 2차 Sign을 하여 얻은 최종출력은 효력을 갖는 거래서가 된다(2 of 3인 경우).
Sign하는 순서는 무관하다.
단,여기서 고려할 점이 한가지 있다. 가령,"3 of 3"로 했을 경우, 그중 한명이라도 Private Key를 분실(망각)했다든가 불의의 사고로 Private Key정보를 잃게 되면,그Address의 자금은 영영 찾을 길이 없다. 그런 경우, 어디에 하소연 할 수 있겠는가? Bitcoin은 주관하는 기관이나 조직이 없이 수학적 논리에 의해 돌아가는 체계므로 엄격하고 냉정하다.
애당초 "3 of 4"로 하고,신뢰하는 변호사를 포함하는 것도 좋은 방법일 것이다.
또한 ,Multisig Address를 만든후 이것이 제대로 동작하는지도 한번 확인을 해두는 것이 좋을 것이다.
+New에는 그외에도 Time Locked Address, HD Address의 메뉴가 있으나, 별로 유용성은 없어 보여 생략하겠다.
(2) Transaction 작성하기
Bitcoin에서의 거래란 내Address의 자금을 어떤 다른 Address로 보내는, "Push"거래다.
어떤 Address에서 내Address로 자금을 받아오는 거래,즉 "Pull"거래란 없다.
Transaction 메뉴에 들어가 보면, 제일 위에,
Address, WIF key or Multisig Redeem Script 라고 써있는 곳이 있다. 그 아래의 칸에,
- 출금 하고자 하는 내Address를 입력하거나,
- 만일 그 Address가 Multisig Address면 Address대신 Redeem Script를 입력해야 한다.
입력후 우측의 "Load" Button을 클릭해 준다. 이것은 internet의 Blockchain에 접속하여,해당Address(또는 Redeem script)에 관한 거래기록을 조사하여,
이제 작성하려는 거래서의 input부분에 자금의 근거로써 제시할 Unspent output에 관한 정보를 입수하려는 것이다. 따라서 Internet접속이 되어야 이 "Load" Button이 제대로 동작한다.
(거래서의 input과 output에 관한 것은 7절에서 설명하였다.)
그후 아래를 보면,output이란 tap과 input tap이 보일 것이다.
input tap을 클릭해서 보면, 과거 내Address로 송금한 거래들 중에서 아직 사용하지 않은 unspent output들이 쭉 전시될 것이다. 그 모두를 input에 열거할 필요는 없다. 예를 들어,지금 0.2BTC를 송금하려고 한다면, 0.24BTC 짜리 하나만 input으로 제시해도 충분하다. 우측 끝에 있는 "-"버튼을 누르면 그 항목을 제거 할 수 있다.
다 되면,output tap을 눌러,보낼 상대방 Address와 금액을 지정한다. 여러개의 Address와 Amount를
각각 지정할 수 있다. 그 때엔 우측에 있는 "+"버튼을 눌러라(제거하자면 "-"버튼을 누른다). 거스름 돈을 받기 위해,내 Address를 추가해도 좋다. 물론,output의 금액 합은 input tap의 총액보다는 약간 적어야 할 것이다.
input총액과 output총액의 차이는 Tx Fee로 채굴자에게 주게 된다. Tx Fee가 없거나 너무 적으면,요즈음엔 체증이 있어서 며칠 지나도 Blockchain에 등록되지 않을 수도 있다. Blockchain은 거래가 폭증하면서 요즈음 성장통을 겪고있다.
모든게 된듯하면,"Submit"을 눌러 거래서 작성을 지시한다. 그 아랫쪽에 Box가 나타나면서 거래서(Sign은 아직 안된)가 출력될 것이다. Verify를 하고 싶으면,이 출력을 마우스로 긁어 복사한후 Verify Tap으로 가서 그 입력Box에 복사해 넣은후 "Submit" 을 누르라. 자기가 의도한 데로의 내용인지 점검할 수 있다.
이후 수순은 Sign Tap에 가서, Private Key난에 내 Address의 Private Key를 넣고,
그 밑 입력Box난에 거래서 내용을 복사해 넣고나서 "Submit"버튼을 누른다.
Sign을 한 거래서의 출력이 그 밑에 나타날 것이다.
마지막으로, Broadcast Tap으로가, Sign한 거래서를 입력Box에 넣고 "Submit"하면 된다.
물론 Broadcast는 Internet접속이 필요하다. "Broadcast"라고는 하지만 실제로는 어느 한 Node에 거래서를 제출함에 불과하다.
Multisig의 경우는 거래서를 Sign할때 여러사람의 Private Key로 거듭Sign(필요한 만큼)한다는 점이 다르다.
17 Coinb.in으로 하는 PoE (Proof of Existence)
PoE(Proof of Existence)
Proof of Existence란 12절에서 잠깐 언급한바 있는데, "어떤 문서가 과거 특정시점에 이미 존재하고 있었
다" 라는 사실을 Blockchain의 기록과 그 Time Stamp에 의해서 완벽히 입증할수 있음을 말한다.
그런데,문서 그 자체를 Bitcoin Blockchain에 수록하는 것은 허락하지 않는다.
Bitcoin Blockchain은 그 크기를 최소한으로 하기 위해,거래에 필요한 최소의 정보만 허락하도록 Rule이 정해져 있다. 단,편법을 쓰면 40Byte 정도의 data를 수록할 수 있는 방법이 있으므로 그것을 이용한다.
우선,그 존재를 증명코자 하는 File들(영상file,Text file,음악file,. . )을 하나의 Folder에 넣고,그것을 하나의 Zip File로 압축한다. 그 Zip file을 Hash함수로 처리하여 출력을 얻는다. Hash출력을 얻기
위하여 가령 다음 링크를 이용할 수 있을 것이다. Filer을 Drag and Drop하면 된다.
md5file.com
Hash규격은 다양하나, 출력이 비교적 짧은 MD5 규격을 써도 좋고 Sha256을 써도 좋다. Hash출력을 얻었으면 이를 따로 잘 복사해둔다.
실례를 보이기 위해서, Hash출력이
c9a722669e7bab1fd8e7c2e5712a2fb658ce3f14a056aeab6e1339d40e42f0f1
이었다고 가정하자.
이 Hash출력을 Bitcoin Blockchain에 올리는 것이 목표다. 이를 위해서 Coinb.in의 Transaction에서 ,우선 "Advanced Options"를 클릭하여, "Allow data to be sent within the . . ."의 좌측에 있는 체크박스를 Check한다.
두 Address X와 Y를 준비하되 X에는 0.01BTC의 잔고가 있는 것으로 가정한다. 우리의 예에서,
X= 1Fzpm9KD8aTKYrWWiDKgGKobBKYti6wC69
Y= 1G714JkvwZn1VYuw5bVVRk4cmkABgkrZmU
라고 하자. X에서 Y로 보내는 금액은 0.0099BTC로 하고,0.0001BTC는 Tx Fee로 하자.
Address X에서 Y와 Z 두곳으로 송금하는 거래서를 다음 그림처럼 작성하되, Output tap의 두 Receipient Address 중 첫번째 칸에는 정상적 Address인 Y를 입력한다.
한편 두번째 Address 칸에는 Address를 넣지 않고 그대신 앞서 준비한 Hash출력값을 복사해 넣은 다음, 그 맨앞에 "6a"를 추가한다. (이 "6a"가 편법을 쓸수 있게 해주는 약속된 Code다)
따라서, Address Z에는 엉터리 Address인
6ac9a722669e7bab1fd8e7c2e5712a2fb658ce3f14a056aeab6e1339d40e42f0f1
를 입력하고 송금액은 0BTC로 한다.
이렇게 만든 거래서를 Sign한후 Broadcast하면 끝이다. 과연, Hash출력 내용이 Bitcoin Blockchain에 기록되었는지를
확인 해보자. 약 20여분쯤 후 Bitcoin Explorer에서 주소 X=1Fzpm9KD8aTKYrWWiDKgGKobBKYti6wC69 를 넣어서 검색해 보면, 다음 처럼 Address X가 관련된 모든 거래내용을 볼 수 있는데,
여기서 방금 우리가 했던 그 거래의 Txid(Transaction id)인
a9b2a444eda4d21a. . .
를 클릭하면 그 거래에 대한 보다 상세한 내용을 볼수 있는 화면이 나오는데 ,그 Page의 아랫쪽을 보면
다음 처럼 "출력 스크립트"의 내용중 2번째에 6ac9a722669e7bab1fd8e7c2. . . .가 보일것이다!
즉,Blockchain에 Hash출력 내용이 들어가 있는 것이다!
따라서 우리는 그 Hash출력의 입력File인 그 zip File이 " 2017년 6월30일 07시 34분 시점에서 존재하고 있었다" 는 확고부동한 증명을 할수 있는 것이다.
가령,미래를 보는 예지능력을 확고히 입증하고자 하는 사람이 있다면,관련 증거 자료를 zip file로 만들고 Hash출력을 얻어서 Blockchain에 올려 놓음으로써,다른 증언자의 도움이 없이도, 명백한 증거를 제시할수 있을 것이다. 그 신뢰성은 Blockchain이 결코 변조될 수 없다는 수학적 Logic에 근거를 둔 것이다.
Blockchain을 Truth Machine이라고도 부르는 이유인 것이다.
진품의 보증
다음 같은 가상의 시나리오를 생각해 보자.
2030년 홍길동씨는 최상급 포도주만을 취급하는 F사의 한 상품을 구입했다. 잘 포장된 Box에는 밀봉된 진품 보증서가 있었는데, 그속에는 이 제품의 일련Number와 Private Key가 하나 제시되어 있었다. 이 일련Number는 병 표지에 써있는 것과 일치했다. 한편, 보증서의 안내에 따라 F사의 Web site를 방문해 보니,그 일련Number에 연결된 한 Address를 확인할 수 있었는데,
홍길동씨가 자신의 Mobile Wallet에 위의 Private Key를 import해 보니,
과연 이Key에 대응하는 Address가 바로 그 Address임을 확인 할 수 있었다. Mobile Wallet으로 더 조사해 보니,과연 2017년 6월30일에, F사의 공식 대표Address인
1Fzpm9KD8aTKYrWWiDKgGKobBKYti6wC69
로부터 0.0099BTC가 그 Address로 송금되어온 기록이 있었다. Blockchain.info로 그 거래에 대해 더 조사해 본즉,한 Hash출력이 첨부된 거래였음을 알게 된다. F사의 Web site에서 그 Hash출력의 원본인 Zip file을 Down받아 Hash를 해보니 과연 Blockchain에 기록된 Hash와도 일치한다. 한편,Zip 압축을 풀고 내용을 들여다 보니,2017년 당시,이 제품에 표지가 붙고 병뚜껑이 밀봉되어, 숙성창고로 들어가던 당시의 상황을 기록한 동영상 File과 홍보자료 등등을 볼 수 있었다.
자기가 분명 F사의 그 제품을 산 것이 틀림없었다. 그리고,진품 보증서가 강조하는 바에 따라,홍길동씨는 그 Address에 있는 잔고 0.0099BTC 전부를 자신의 다른 개인Address로 송금을 하였다. 이제부터는,Blockchain에서 열람시 이 0.0099BTC는 "Spent"로 나오게 될 것이며,이는 홍길동씨가 이 제품을 사서 소비했음을 증명하는 것이 된다.
대화 가능하시면 카톡 친구추가 부탁드려봅니다.
부탁드려요
카톡 : moon3640