누군가 당신의 지갑을 털 수 있다?
최근에 블락체인 세미나를 다녀온 적이 있습니다. 그곳에서는 좀 놀라운 사실을 알게됐습니다. 아마 아시는 분은 아실 수도 있는 거지만 세상에 돈이 된다면 뭐든 하려고 하는 사람들이 있음을 또다시 느끼게 됐습니다.
개인키, 공개키, 주소
블락체인에서는 거래를 하려면 개인키, 공개키, 주소가 반드시 필요합니다. 이더리움 기준으로 말씀드리면 아래 그림과 같이 개인키, 공개키, 주소가 연관되어 있습니다.
1. 256비트의 값 중에 하나를 랜덤으로 뽑아냅니다. 이걸 개인키로 사용하는 것이죠.
87dcaaa4dbce8b7d5852c6a073c98e65799ea7cb5b0966e78a6e8f7802c88385
myetherewallet에 가서 테스트 용으로 하나 만들어 봤습니다. 위 숫자의 자리수는 총 64개입니다. 왜냐하면 각 16진수의 자리수는 4 bits를 차지하기 때문에, 64x4= 256 bits가 됩니다. 이렇게 개인키를 만들어도 되는 이유는 동일한 경우가 나올 확률이 극히 작기 때문입니다.
2^256= 1.1579209e+77
e+66은 0이 77개나 있다는 것입니다. 우주에 있는 수소의 총 원자수가 10^80개 정도라니깐 동일한 개인키가 나올 확률은 어마어마하게 낮습니다. 그래도 꾸준히? 하면 동일한 개인키가 나올 수는 있는 것입니다.
2. 개인키를 타원곡선함수에 넣어 공개키를 얻습니다.
결과적으로 512 bits의 숫자가 얻어집니다. 이 부분은 복잡해서 저도 아직 이해안하고 있어서 그냥 넘어갑니다. 한가지 이 타원곡선함수는 역방향으로는 계산되지 않는(확률이 매우 작은) 함수 입니다. 즉 타원곡선함수로 얻어진 숫자를 가지고, 개인키를 추적하기는 매우 매우 어렵다는 것입니다. 이더리움은 secp256k1를 사용한다고 하네요.
3. 공개키를 해쉬함수에 넣습니다.
- 512 bits의 숫자를
Keccak 256해쉬 함수에 넣어 256 bits 숫자를 얻습니다. - 256 bits의 숫자중 앞의 96 bits를 잘라내 없애고, 나머지 256-96= 160 bits 만 남습니다.
- 160 bits를 16진수로 표시하면 160/4= 40 자리가 됩니다. 이것을 문자열로 저장한 것이 이더리움 계정 주소입니다.
여기서Keccak 256해쉬 함수도 역방향으로 계산하기가 매우 어려운 함수입니다. 이런 함수를 비대칭 함수라고 하는데요, 주소를 가지고 공개키를 얻어내기가 매우 어렵다는 뜻입니다.
개인키를 추적해 낼 수 있는가?
이더리움이나 대부분의 암호화폐의 개인키, 공개키, 주소는 위와 같은 관계를 가지고 있습니다. 매우 비대칭적인 secp256k1 함수와 Keccak 256 해쉬 함수가 사용되어 주소로 부터 또는 공개키로 부터 개인키를 추적하는 것은 매우 어렵습니다. 그래서 다들 안심하고 블락체인을 사용하고 있고, 공개키는 말 그대로 남에게 공개되어 사용됩니다. 그런데 정말 개인키는 추적 불가능한걸까요?
참가한 세미나에서 한 사이트를 소개해 줬습니다. 바로 ethersecret이라는 사이트입니다.
http://www.ethersecret.com/
이름부터 뭔가 수상하죠? (지금은 사이트가 접속 오류가 발생합니다. 아래 그림은 캐쉬된 이미지입니다.)
이곳이 뭐하는 곳이냐 알게 되면 좀 놀라실 겁니다.
위에서 256 bits의 임의의 숫자로 개인키를 만들고, 이걸로 공개키를 만들고 또 계정을 만든다고 했죠? 이 사이트에서는 256 bits로 나올 수 있는 모든 개인키를 가지고 공개키를 만들고, 계정을 만들어서 해당 계정에 돈이 들어 있는지 찾아내는 것을 하고 있습니다. 즉 다음과 같은 작업을 하고 있는 것이죠.
- 개인키의 숫자 0부터 1씩 증가시킵니다.
- 공개키를 얻습니다.
- 계정을 얻습니다.
- 해당 계정의 balance를 얻습니다. balance는 누구에게나 공개되어 있죠!
- 해당 계정의 개인키를 알기 때문에 맘대로 쓸 수가 있습니다!
개인키에서 공개키, 계정을 생성하는 작업은 매우 쉽고, 금방 됩니다. 역방향으로 추적하는 것이 어려운 것이지 순방향 계산을 매우 빠릅니다. 그래서 암호와 관련해서 많이 사용되는 것이죠. 빨리 검증할 수 있지만 추적은 거의 불가능한 것이니까요. 따라서 개인키로 계정만들어서 계정에 돈이 있는지 검사하는 것은 매우 빠릅니다. 성능 좋은 컴퓨터로는 많은 작업을 할 수 있을 것이고, 만약 합동하여 이와 같은 작업을 한다면... 어떻게 될까요?
여기서 우연히 돈이 어느 정도 들어 있는 계정이 발견될 수 있는 것이죠. 만약 어마어마한 돈 뭉치가 들어있는 계정이 발견된다면??? 누구에겐 횡재?일 것이고 누구에겐 엄청난 재앙일 것입니다.
관련하여 아래와 같은 사이트에 사이트 만든 취지?를 적어놨네요.
https://github.com/Land3r/Ethersecret-scanner
Ethersecret-scanner
An automated scanner for ethersecret addresses.
EtherSecret Scanner is an autonomous scanner for the EtherSecret website (www.ethersecret.com).
The EtherSecret website is a project where people have generated the entire keyspace of possible private keys for ethereum (based on SHA-256) which gave all the possible 2^256(115792089237316195423570985008687907853269984665640564039457584007913129639936) keys.
This program automatically scraps pages looking for positive balance accounts.
Note that the chances of actually finding an account are very tiny.
혹시 이와 같은 논리 전개에 문제가 있다면 알려주십시오. 왠지 이렇게 쉽게만 개인키가 뚫리지 않을거 같기도 합니다.
향후 이와 같은 시도는 더욱 빈번해 질 것입니다. 컴퓨터의 계산 성능이 빨라지고, 암호화 함수들의 구멍이 뚫리면 아무리 블록체인이라도, 종이지갑에 개인키를 저장하고 있더라도(계정이 공개되어 있다면) 털릴 수 있습니다. 이런 점을 알고 있는 것은 매우 중요합니다. 내가 아무런 잘못을 하지 않아도 누군가는 우리의 돈을 쉽게 빼갈 수도 있으니까요.
며칠 전에 쓴 마이크로 칩과 블락체인이라는 글에서처럼 피부 속에 개인키를 마이크로 칩에 넣는 방식도 이와 같은 해킹 위험성에서는 자유롭지 못합니다.
마이크로 칩 이식과 블락체인
우리가 현재의 블락체인의 암호체계(개인키, 공개키, 계정)를 사용하는 한 개인키를 피부 속의 마이크로 칩에 넣고 암호화해서 사용한다고 해서 돈을 안전하게 보호할 수는 없습니다. 지금은 그 위험성이 매우 낮지만 향후 점점 올라갈 것은 분명합니다.
참고로 계정 생성되는 과정 캡쳐로 알려드립니다.
Keystore파일이란 것은 개인키를 암호환 것으로, 거래할 때 개인키로 사인할 때 사용됩니다. 즉 개인키가 직접 사용되는 것이 아니라 이 keystore에 저장된 암호화된 것이 사용되는 것이죠. 즉 이 keystore 파일만 있어도 거래를 할 수는 있습니다. 개인키를 직접 사용하는 것보다 안전하겠죠? keystore 파일을 잃어버려도 개인키를 알고 있으면 다시
오늘의 실습: 여러분들은 자신의 자산, 계정을 어떻게 안전하게 보호하고 계신가요? 설마 스티밋에서 아직도 개인키나 Active key로 포스팅을 하고 계신건 아니시죠???

음..안전한건 없군요. 포스팅은 포스팅키로만 써야 겠군요. 그리고 한가지 잘 모르겠는게 있는데요 고팍스에서 스팀을 사서 고팍스에 놔두지 않고 스팀잇으로 옮기는건 보다 안전해서 그런것인가요?
포스팅은 포스팅키로 꼭 하세요~
고팍스는 잘 모르겠네요~ 스팀 파워업을 하지 않는데 굳이 스팀잇으로 옮길 필요는 잘 모르겠네요.
거래소는 보통 2중 보안이 갖춰져 있는데 스티밋은 active 키, 마스터 키 도난당하면 바로 털리는 구조입니다.
자신의 자산은 스스로 잘 지켜야 겠죠! 스팀잇에도 가끔 해킹당한 분들이 계신데... 개인키 잘 관리 해야할듯 합니다...
https://steemit.com/kr/@tomkim1981/3amgbr 스팀잇 해킹이 의심이 된다면 비번 바꾸셔야 합니다.
네 개인키가 정말 중요하죠~
개인키를 몸 속에 마이크로 칩에 넣어서 다니면 될거 같긴 해요 ^^;
이런 얘기 했더니 그럼 팔 잘라간다고 ㅎㅎ
해킹하는 나쁜넘들 싫어요..ㅠㅠㅠ 왜 도둑질을...ㅠㅠㅠ 내 재산은 내가 잘 관리하자!!ㅋㅋ
돈이 관련된 곳은 항상 지저분해지더라구요~
블록체인 기술의 가장 큰 단점(?)이라고 해야할까요.. 그게 바로 개인정보를 자신이 책임져야한다는 거 같아요. 이게 지금까지와는 좀 마니 다른 편이라. 이젠 정말 거래소도 못 믿겠고. 걍 자신이 책임지는 거 밖에는 없는 거 같네요.ㅎ
블락체인은 거래하라고 되어 있는거라서 마냥 종이지갑에 묻어 둘 수도 없고.. 더 좋은 방법들이 나올 거라고 봅니다~ 개인 책임은 더욱 중요해 질거구요~
제가 알기론 저렇게 해서 돈이 들어있는 계정을 찾을 확률보다 로또의 확률이 몇천만배 높아서 계정 한개 찾을때쯤 로또를 수도 없이 맞을 수 있다고 알고 있습니다. 그래서 안전한거죠
역시 그렇죠? 안그러면 너무 허술한거죠~
그래도 심심풀이로 찾아낼 수도 있을거 같은 생각이 드네요~
한동안 포스팅키로 포스팅하다가 몇가지 번거로워서 다시 마스터키로 돌아왔어요. 또 고민이 생기는군요. 블록체인도 안전하지 않다니 참 기술이 좋긴 합니다.
헉 포스팅은 포스팅키로 하시는게 제일 좋습니다~
@etainclub You have earned a random upvote from @botreporter because this post did not use any bidbots.
이런 문제가 있었군요.. 보안 문제가 좀 더 업그레이드된 시스템이 아쉽네요.
확률상으로 매우 매우 작지만 그래도 왠지 찝찝하죠~
소름 돋네요... 저렇게 하나하나 대입하는 속도가 나중에 엄청 빨라진다면
보안을 어떻게 적용할 지도 문제군요
빨라져도 워낙 경우의 수가 많아서 확률이 낮다고 합니다.
그래도... 누군가 특정 계정을 찾아내는 알고리듬을 개발해낸다면... 이런 생각도 가끔 들더라구요.