[EOS Launch D-4] Private Key 확인

in #kr7 years ago

카운트다운

안녕하세요? 트리입니다.
이제 정말 EOS의 카운트다운이 시작되고, 4일만 지나면 마지막 EOS의 ICO가 종료됩니다.
메인넷 런칭을 앞두고 BP 후보들도 분주하게 움직이고 있고, 투자자 분들도 기대반 걱정반으로 기다리고 계실 겁니다.

GET_EOS

이제 eos.io 사이트에서도 마지막 8백만개의 토큰 판매만을 남겨두고 있습니다.
저기 표시된 992000000 EOS 라는 숫자를 보니 이제 정말 거의 다 온 것 같습니다.​



EOS의 메인넷 런칭을 앞두고 우리가 준비해야 할 것은 EOS의 Public Key - Private Key의 안전한 생성과 확인이죠.
오늘 오전에 @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

Sort:  

네..
몇일 안남았네요 ^^*

벌써 거래소들은 입출금 금지 공지 떳어요
거래만 가능 하지 런칭 끄날때까지는 입출금 할수 없다구요

아, 한빗코라는 거래소는 30일(이제 오늘)까지 입금이 가능합니다. ㅎ
다만 31일 00시로 넘어가면 스왑대상에서 누락된다고 하구요.
30일까지 입금할 경우 EOS/BTC 페어에 대한 거래수수료가 평생 무료라고 이벤트 하길래 저도 엊그제 1 EOS 정도 입금해 놨습니다. ㅎㅎ

추가. 한빗코만 생각나서 답글에 썼는데, 지금 보니 코인원이나 다른 곳들도 아직까지 입금은 받는 곳이 있네요! ^_^

이래 어려운걸 어찌하나요?아무것도 몰라서 지인에게 다 전송했다는.....^^;;

그 지인 분은 저처럼 이렇게 하고 계실지도 모릅니다. ㅋㅋㅋㅋ

궁금해서 그러는데요? 어디 물어볼때도 없고..
그냥 거래소에 가지고 있으면 안되는건가요?
전환해준다는 공지도 못본거같아서 불안불안.. ㅠ
(앗 업비트 해준다는거 금방 확인했어요~)

아, EOS 코인으로 스왑해준다는 거래소에 갖고 계셔도 되는데요~
EOS 제네시스 스냅샷을 기반으로 한 에어드랍이 있는 경우에는 거래소에서 모두 지원하지 않을 수 있거든요~
그래서 좀 불편해도 개인 지갑으로 갖고 있는 거구요.
수량이 많지 않으시고, 익숙하지 않으시다면 거래소에 갖고 계시는 게 낫습니다!
(거래소의 Private Key가 털리지는 않을테니.. 그렇..겠죠? ㅋㅋ)

아 에어드랍문제도 있었네요
거래소.. OTP사용하지만 털렸다는 이야기를 들어서
무섭네요 ㅠ ㅠ

최근들어 해킹의 이야기가 많더라구요.
저는 아예 구글 계정도 OTP 걸어놨어요.
번거롭긴 하지만, 이쪽 세상에선 안전이 우선이라.. ㅠ

저는 스팀에 몰빵이라서 이오스는 없지만, 거래소에서 해주지 않으면 어려워 하시는 분도 많을 것 같네요.ㅠㅠ

대부분(?) 거래소에서 EOS 자체의 스왑은 지원해 주는 것 같더라구요~
정말 은근히 어렵습니다. ㄷㄷ;;
스팀도 가즈아~!!

어...트리님 덕분에 잠이 잘올것 같습니다...@.@ㅎㅎ

앗.. 고맙습니다~ ㅋㅋㅋ

개인키는 검증 노출 안하는게 맞습니다

네- 말씀대로 검증을 굳이 하지 않는게 훨씬 안전합니다!!
혹시라도 개인키 검증을 하고 싶으시다면 이런 방법이 있다..는 정도로 봐주셨으면 했거든요. ^^;

지갑 등록할때 Private Key와 Public Key를 잘 메모해 놨는데 이 작업을 해야할까요?
불안한데요
고민스럽네요 ㅎ

굳이 안하셔도 됩니다!!!
비교해 보니 저도 맞더라구요!! : )

인터넷 off는 와이파이 사용할 경우 와이파이 차단하면 될까요? 비행기 모드라든지....

넵! 비행기 모드도 좋죠!
저는 그냥 유선이라 선을 빼버렸거든요. ㅋㅋ
인터넷 차단 하시고 브라우저 띄워서 네이버 접속 한번 시도해 보시고 안되면 끊겼다고 생각하심 편합니다. ㅎㅎ

감사합니다^^

제가 괜시리 불안하게 만들어 드린게 아닌지 싶기도 합니다.
어차피 잘 보관하신 분들은 굳이 필요없는 절차이기도 해서요.. ^^;;

시간이 다가오니 확인 안하고는 못 버티겠어서
인터넷 off하고 부들부들 떨면서 확인한 결과 이상이 없더라구요 ㅎㅎ
암튼 확인하고 나니 맘은 편해지네요 감사합니다 트리님

마음이 편해지셨다니 다행입니다. ㅎㅎ
즐거운 주말 되세요! ^^

퍼블릭키도 따로 보관을 해야 하는건가요? 아 너무 어려워요 ㅠㅠ

퍼블릭키는 일단.. 주소라고 보시면 될 것 같고, 프라이빗키는 비밀번호로 보시면 될 듯 해요. ㅎ
참 복잡하죠. ㅠ_ㅠ

와~트리님 코딩도 잘 아시나 봐요. 멋지시네요!^^
보안은 정말 중요하니까 몇 번씩 검증해봐도 나쁘지 않은 거 같아요.

직접 현업에서 코딩에 손을 놓은지는 꽤 되었는데요..
간혹 소스를 보긴 해요. ㅎㅎ
인터넷 선 빼고 검증하려니 불편하긴 하지만, 그래도.. 그게 안전하니.. ㅎㅎ

무슨 말인지 하나도 모르겠습니다. 그냥 이오스 사라는 건가요?

아니예요!!! 절대 아닙니다!! ㅎㅎ
뭐든지 사고 파는 건 직접 분석해 보신 뒤 이해가 되고, 스스로 납득이 되어야지요! : )