티스토리 뷰

비트코인 비밀키는 내가 임의로 선택할 수 있지만,

선택된 비밀키로부터 파생되는 비트코인 주소는 내가 마음데로 선택할 수가 없다.

 

주소값은 비밀키로부터 계산된 결과이기 때문에 당연하다.

(주소값으로부터 비밀키를 얻는 것은 당연히 불가능하다)

 

그런데 가끔 의미있는 단어를 포함하는 주소를 볼 때가 있다. 아래는 유명한 bitaddress.org 사이트의 관리자 후원 비트코인 주소이다. 재미나게? 닌자라는 단어로 주소가 시작된다.

 

 

이러한 주소는 어떻게 가질 수 있을까?

 

비트코인 전체 주소에 정확히 매칭되는 비밀키를 찾는 것은 불가능하지만,

비트코인 주소의 일부만 매칭되는 비밀키를 찾는 것은 크게 어렵지 않다.

 

예를 들자면,

1bitOOOOOOOOOOOOOOOO 와 같이 앞 4글자만 원하는 글자가 새겨진 비트코인 주소의 비밀키를 찾는 일은 어렵지 않다.

 

특별히 우아한 방법이 있는 것은 아니고,

1bit 로 시작하는 주소값이 나올때까지 비밀키를 무작위로 대입해 보는 것이다.

(사실 이것이 바로 채굴자가 비트코인을 채굴하는 연산 방법이다!)

 

파이썬을 이용하면 아래와 같이 코드를 작성할 수 있다.

from bitcoin import *

for i in range(10000000) :
  priv = random_key()
  addr = privtoaddr(priv)
  if i % 500 == 0 :
    print(i, priv, addr)
  if addr.startswith('1bit') or addr.startswith('1Bit') :
    print('** done ** ')
    print(i, priv, addr)
    break

** 미리 알아 둘 것 **

  1. 옛날 방식의 비트코인 주소는 항상 1로 시작한다.
  2. 비트코인 주소는 숫자 영(0), 대문자 오(O), 소문자 엘(l), 대문자 아이(I)를 제외한 나머지 숫자와 영문자(대소문자 포함)로 구성된다.

 

** 알고 있으면 좋은 것 **

  1. 비트코인 주소 한글자가 정확히 맞을 확률은 1/58 이다.
  2. 그러므로 맨앞 1을 제외하고 3글자가 정확히 일치할 확률은 1 / 58^3 이 되고 이는 약 20만분의 1의 확률이다.
  3. 그러므로 루프가 20만번 정도 수행되면 원하는 비밀키와 주소를 찾을 수 있을 것으로 기대할  수 있다. 하지만 이를 보장할 수는 없다.
  4. 테스트 결과 위 코드로 1만개의 비밀키&주소 쌍을 체크하는데 약 30초 정도 소요되었다. 물론 로컬 PC 성능에 따라 소요시간은 달라질 수 있다.
  5. 찾고자 하는 글자의 개수가 1개 늘어날 때마다 전체 소요시간은 이전 대비 58배씩 늘어나게 될 것이다.

 

실행결과

 


 

https://youtu.be/wr6wIWRseMA

 

728x90
반응형
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함