[EOS Launch D-4] Private Key 확인

mastertri(65)
Published in
#kr
Words
530
Reading
3 min
Listen
Play
8y

카운트다운
​
안녕하세요? 트리입니다.
이제 정말 EOS의 카운트다운이 시작되고, 4일만 지나면 마지막 EOS의 ICO가 종료됩니다.
메인넷 런칭을 앞두고 BP 후보들도 분주하게 움직이고 있고, 투자자 분들도 기대반 걱정반으로 기다리고 계실 겁니다.
​
GET_EOS
​
이제 eos.io 사이트에서도 마지막 8백만개의 토큰 판매만을 남겨두고 있습니다.
저기 표시된 992000000 EOS 라는 숫자를 보니 이제 정말 거의 다 온 것 같습니다.​
​


​
EOS의 메인넷 런칭을 앞두고 우리가 준비해야 할 것은 EOS의 Public Key - Private Key의 안전한 생성과 확인이죠.
오늘 오전에 selly@selly 님이 올려주신 EOS 프라이빗키 검증하기를 보고 저도 한 번 확인해 보았습니다.​
런던을 기반으로한 웹 개발 에이전시인 Webdigi의 github 공개 소스를 바탕으로 말이죠.
​
Private Key 검증 방법은 간단합니다.
​

  1. 소스를 다운로드 받고
  2. 압축을 풀고
  3. 인터넷을 끊고
  4. 다운받은 소스 중에서 index.html을 웹 브라우저에서 실행시키고
  5. Private Key를 입력하고
  6. Map to EOS public key 버튼을 클릭합니다.
    ​

​
그런데 이게 과연 믿을 수 있는 소스일까요?
그러면 소스를 뒤져 봐야죠.
의심해서 미안하지만 우리의 Private Key는 소중하니까요.
​
압축파일해제
​
압축파일을 해제하면 html 파일 하나, js 파일 3개, css 파일 하나, 그리고 md 파일 하나만 있습니다.(오! 소스가 몇 개 없어!!)
오프라인에서도 돌아갈 수 있게.. 깔끔하네요.
모든 소스를 열어봅니다.
​
소스분석
​
index.html 파일에서 시작하는데, 화면에서 입력받은 Private Key가 전송되거나 저장되는 부분이 있는지만 살펴보면 될 것 같습니다.
index.js 소스를 통해 generate() 함수가 실행되고요.
​

function generate() {
showPane('generate')
​
setTimeout(() => {
var privKey = byId('privKey').value;
privateKeyPair = webdigiKeyPair(privKey)
...생략...
​ }, 1000)
}
​ ​

webdigiKeyPair 라는 이름의 함수를 호출하는데, webdigi는 이 프로그램 만든 에이전시이고..
같은 파일 내의 다음 함수를 호출하는데, 입력받은 Private Key를 이용해 Public Key를 가져옵니다.
​

function webdigiKeyPair(privKeyInput) {
var {PrivateKey, PublicKey} = eos_ecc
var privkeyError = ''
var pubkeyError = ''
try{
var abc = PrivateKey.fromWif(privKeyInput);
var privkey = abc.toWif()
var pubkey = abc.toPublic().toString()
} catch(error){
privkeyError = 'Private key in invalid, please try again.'
}
이하 생략...

여기서 Wif은 Wallet import format의 약자로 인코딩된 지갑 주소 포맷을 말합니다.
Wif에 대해서는 비트코인 위키 링크를 참고해 보시면 됩니다.
​​
아무튼 여기 소스에서 보면 fromWif(), toWif() 등의 함수를 통해 가져오는데 이 함수들은 ecc.js 에 있는 함수들이네요.
​

static fromWif(_private_wif) {
var private_wif = new Buffer(base58.decode(_private_wif));
var version = private_wif.readUInt8(0);
assert.equal(0x80, version, Expected version ${0x80}, instead got ${version});
// checksum includes the version
var private_key = private_wif.slice(0, -4);
var checksum = private_wif.slice(-4);
var new_checksum = hash.sha256(private_key);
new_checksum = hash.sha256(new_checksum);
new_checksum = new_checksum.slice(0, 4);
if (checksum.toString() !== new_checksum.toString())
throw new Error('Invalid WIF key (checksum miss-match)')
​
private_key = private_key.slice(1);
return PrivateKey.fromBuffer(private_key);
}
​

이런 식으로 되어 있어서 내부적으로 포맷을 변형하고 검증합니다.
처음부터 ecc.js를 보면 워낙 다양한 라이브러리를 사용한 1만 7천라인짜르 소스인지라..
하나하나 변환하는 단계까지 알아볼 필요까지는 없을 거구요.(어차피 역량도..;;)
이걸 외부로 보내거나 저장하는 부분이 있는지를 확인하면 되는 거니..
file이나 http, buffer 등의 키워드로 검색해서 수상한 부분이 있는지를 한번 더 찾아 보았습니다.
​
여기까지 보고 제가 내린 결론은 이 프로그램을 사용해도 특별한 문제는 없는 것 같다.. 인데요.
혹시 이상한 부분이 있는지 발견하신 분이 계시면 알려주시면 좋을 것 같습니다.
(이럴 때 집단 지성을 이용해야죠!!)
​
참고로 EOS cafe에서도 EOS 키 검증 도구를 github로 제공하고 있습니다.
​이쪽은 소스를 간단히 보니 Vue.js를 이용하고, yarn을 이용해 패키지들을 갖다쓰는군요. 얼핏보니 비슷비슷한 모듈들이네요.
​
여기까지 확인하고 절차에 따라 오프라인에서 Private Key - Public Key 매핑 확인을 해 보았습니다.
다행히 제가 보관하고 있는 키가 맞네요.
두 번, 세 번씩 확인하고 있으니.. 스스로도 왜 이러나 싶기도 하지만 마지막까지 긴장을 놓을 수 없네요. ㅎㅎ
​
야야님_mastertri_new

[EOS Launch D-4] Private Key 확인 | Ecency