김보안의 블로깅
  • 🏠 Home
  • 📚 Project
    • Blockchain
      • 🎦 PickMe
      • 🎦 IoTC
      • 🎦 Blackchain
      • 📃 Gemology
      • 🎦 PickMe
      • 🎦 PickMe
    • AI
      • 👋 A.I. Dream Reader
      • 🎦 A.I. Dream Reader
    • Security
      • 🎦 SNAC
    • Education
      • 🎦 Smart Lecture
  • 🤸‍♂ Hobby
    • Music
      • Violin
      • Guitar
      • Piano
      • Drum
    • Flower
      • Flower Certificate
    • Sport
      • Ski
      • Skateboard
      • Golf
      • Boxing

2019년 3월 25일 월요일

Coin Wallet Account - 12 단어의 비밀 (mnemonic 복구 원리)

 SecureKim     오전 12:43     12단어, 15단어, 복구, 원리, Blockchain, HD wallet, mnemonic, restore, wallet, wallet restore     3 comments   


필요 선행 지식 : Hash, Metamask 등 생성 경험

12 단어, 그 찜찜함

메타마스크도 그렇고 어카운트 생성할 때 항상 12개의 단어를 어디에 잘 적어두라고 하죠?

https://iancoleman.io/bip39/#korean


저는

참석 한문 다행 최악 결과 언덕 공기 영상 다음 근로 마요네즈 사실 사용 운명 청바지

이렇게 15단어가 나왔는데요. 지갑 분실시 이 mnemonic 으로 복구가 가능하므로 메모가 필요하다고 합니다.

갑자기 궁금하지 않나요? 대체 이 문자들이 무엇이며 어떻게 복구가 가능한 것일까요?

아니 이렇게 쉬운 단어들만 갖고 내 월렛이 복구가 된다고!!!? 한번 정확히 짚어보고 싶군요.


월렛의 역사

사토시가 처음 비트 코인을 고안 했을 때를 생각해 봅시다.

이제 막 '개인키를 갖고 거래를 하겠다' 라는 개념을 도입 했을 것이고

개발 초기에는 하나의 개인키로 거래를 했을 겁니다.

그러다보니 한가지 문제점을 깨닫게 된 것 입니다. 추적이 가능하다!?

네, 하나의 개인키와 공개키 세트로 거래를 하다보니 한 계정의 자산 규모가 대강 나오더라는 것이죠.

그래서 개인키 공개키를 매번 랜덤하게 만들도록 했더니 그걸 본인이 다 로컬에서 관리해야 해서 난감합니다.

로컬의 개인키를 잃어버리기라도 하면 눙물이...

그래서 키 관리 시스템 월렛 이 나오게 된 것이죠.

제 생각에는 카드라고 이름을 붙였다면 혼란이 덜하지 않았을까 싶네요.

실제 월렛도 카드처럼 현금(코인)은 없고 키 그리고 블록체인에 존재하는 코인을 전송하기 위한 로직만 있으니까요.

여튼 최근의 월렛은 HD(Hierarchical Deterministic) 월렛으로, 하나의 시드만을 사용해 계층적으로 관리가 가능합니다.


월렛의 원리

일단 복구를 이해하려면 먼저 월렛의 키가 어떻게 생성되고 관리되는지 알아봐야 할 것 같네요.

가장 먼저, 랜덤하게 생성한 128bits 값에 Hash를 적용해서 Digest 를 만들고,

사전 단어 리스트에 매핑합니다.



정확히는
1. Random 하게 128bits 생성하고
2. SHA256 돌린다음 앞에 4bits 를 떼서
3. 기존 128bits 뒤에 붙입니다
4. 11bits 씩 12개로 나눕니다
5. 사전 단어에 매핑합니다

즉, 12개의 랜덤한 단어가 랜덤한 순서로 생성되게 됩니다.

그 다음 키 스트레칭을 합니다.

DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)

  • PRF: 난수 알고리즘. (HMAC-SHA512 를 사용합니다.)
  • Password: 패스워드. (위에서 만든 12개의 단어로 이루어져 있습니다.)
  • Salt: 암호학 솔트. (mnemonic + 패스워드로 이루어져 있습니다.)
  • c: 원하는 iteration 반복 수. (2048 번 반복합니다.)
  • DLen: 원하는 다이제스트 길이. (길이는 512.)
월렛 표준 중 하나인 BIP-0039 에서 마스터 시드는 괄호 안의 값을 바탕으로 생성됩니다. 

즉, 입력 받은 랜덤한 단어와 패스워드를 바탕으로 512길이의 Digest를 생성하는 것입니다.


왜 근데 하필 단어 12자를 넣도록 했을까요?

랜덤한 128bits 는 외우기도 어렵고 숫자 0 이랑 영문자 O 등등 헷갈리니까요.

즉, 사람의 편의를 위해서 입니다.


이후 이렇게 생성된 마스터 시드(Digest) 를 기반으로 개인키를 생성 하므로,

우리는 12개의 단어 및 순서와 패스워드만 알면 개인키를 생성 할 수 있게 됩니다.

즉, 어딘가 저장되어있는 개인키를 Restore 하는 것이라기 보다는 Re-Generation 한다는 개념이 맞습니다.

실제로는 온라인에서 생성하면 안되겠죠?

참고로, 제가 생성한 것은 왜 15단어 일까요...?

BIP39 스펙의 디폴트는 12단어이지만 커스텀하게 생성가능합니다. 

다만 더 적은 단어로 생성하게 되면 엔트로피가 낮아서 안전하지 않습니다. 

아래 표를 참고하세요.

(순서대로 엔트로피 길이, 체크섬, 총 길이, 단어 개수입니다.)
| 128 | 4 | 132 | 12 |
| 160 | 5 | 165 | 15 |
| 192 | 6 | 198 | 18 |
| 224 | 7 | 231 | 21 |
| 256 | 8 | 264 | 24 |


요약 .

1. 랜덤한 128bits 키로 12개의 랜덤한 단어를 생성한다.
2. 위에서 생성한 단어들과 패스워드 조합으로 개인키를 생성한다.
3. 즉, PKI 와 다르게 개인키를 즉석에서 Derive 할 수 있기 때문에 딱히 로컬에서 개인키를 잘 관리할 필요는 없고 단어와 패스워드만 잘 기억해두면 된다.
4. 무작위 seed 대입을 통해 위에서 만든 개인키를 생성하려면 패스워드가 없다고 가정해도 괴에에엥장히 오랜 시간(최악의 경우 내 PC로 약 2500000000000000000000000년 정도)이 걸린다.


  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
이메일로 전송BlogThis!X에 공유Facebook에서 공유
최근 게시물 이전 게시물 홈

댓글 3개:

  1. 익명2020년 6월 16일 오후 5:18

    근데 12단어가 아니라 15단어인데요...

    답글삭제
    답글
    1. SecureKim2020년 8월 25일 오전 11:58

      넵, BIP39 스펙의 디폴트는 12단어이지만 커스텀하게 생성가능합니다. 다만 더 적은 단어로 생성하게 되면 엔트로피가 낮아서 안전하지 않습니다. 아래 표를 참고하세요.
      (순서대로 엔트로피 길이, 체크섬, 총 길이, 단어 개수입니다.)
      | 128 | 4 | 132 | 12 |
      | 160 | 5 | 165 | 15 |
      | 192 | 6 | 198 | 18 |
      | 224 | 7 | 231 | 21 |
      | 256 | 8 | 264 | 24 |

      삭제
      답글
        답글
    2. 익명2022년 9월 14일 오전 10:15

      꼭 저렇게 딴지거는 사람들 있더라구요.

      삭제
      답글
        답글
    3. 답글
댓글 추가
더 로드하기...

페이지

  • 홈
  • Hobby

Categories

  • AI
  • AWS
  • Blockchain
  • Hardware
  • Javascript
  • Node.js
  • Plasma
  • Security
  • Study
  • Video
  • android
  • mysql
  • review
  • windows

Popular Posts

  • 블랙보드 강의 녹화 영상 다운로드 가능한 방법 (노설치)
    별도의 설치도 필요 없고 아주 쉽습니다. 구글 크롬브라우저 에서 블랙보드 녹화 영상에  다운로드 가능한 메뉴가 나오게 하는 코드입니다.  먼저 블랙보드 강의자료에 입장하고, 재생 버튼을 클릭 하지 않은 상태로 F12 를 입력합니다. 재생을 클릭하지 마...
  • 다빈치리졸브로 영상의 음성 보정 (잡음 노이즈 없애기)
      잡음 없애는 방법 1. 음악 쪽 들어가서 음악에서 소스 우클릭 - Normalize Audio Levels 2. 우측의 Mixer에서 Dynamics 더블클릭, Effects아래 +누르고 Metering에 Meter 그럼 아래처럼 나오는데  Gat...
  • 회사 프록시와 인증서에 고통받는 그대를 위한 글 (Bash, Gradle, Python, wget, nodejs(npm), apt-get, cURL, git, yarn, androidStudio)
    대기업에 입사하면 장단점이 있는데, 단점 중에 하나가 회사에서 프록시를 사용하여 트래픽 감시를 하므로 프록시 설정을 해주어야 한다는 점 입니다. 특히, 회사에서는 https 트래픽도 감시를 하므로 인증서도 설정해 주어야 합니다. 그런데 문...

Blog Archive

  • ►  2024 (2)
    • ►  11월 (2)
  • ►  2023 (2)
    • ►  10월 (1)
    • ►  1월 (1)
  • ►  2022 (10)
    • ►  12월 (1)
    • ►  11월 (3)
    • ►  9월 (1)
    • ►  8월 (1)
    • ►  6월 (2)
    • ►  3월 (2)
  • ►  2021 (9)
    • ►  12월 (3)
    • ►  11월 (1)
    • ►  6월 (1)
    • ►  5월 (2)
    • ►  4월 (2)
  • ►  2020 (12)
    • ►  10월 (1)
    • ►  9월 (2)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (5)
    • ►  4월 (1)
    • ►  2월 (1)
  • ▼  2019 (14)
    • ►  10월 (2)
    • ►  7월 (1)
    • ▼  3월 (4)
      • 루트스탁 (RSK) 개념 잡기
      • Coin Wallet Account - 12 단어의 비밀 (mnemonic 복구 원리)
      • 루트스탁(RSK) 실전 - Bitcoin Smartcontract
      • 회사 프록시와 인증서에 고통받는 그대를 위한 글 (Bash, Gradle, Python, ...
    • ►  2월 (2)
    • ►  1월 (5)
  • ►  2018 (14)
    • ►  12월 (2)
    • ►  11월 (4)
    • ►  10월 (1)
    • ►  8월 (2)
    • ►  5월 (4)
    • ►  1월 (1)
  • ►  2017 (12)
    • ►  10월 (2)
    • ►  9월 (9)
    • ►  5월 (1)
  • ►  2016 (8)
    • ►  10월 (2)
    • ►  8월 (1)
    • ►  6월 (1)
    • ►  1월 (4)
  • ►  2015 (6)
    • ►  12월 (3)
    • ►  10월 (1)
    • ►  6월 (1)
    • ►  5월 (1)
  • ►  2014 (10)
    • ►  11월 (1)
    • ►  9월 (1)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (3)
    • ►  4월 (1)
    • ►  3월 (2)
  • ►  2013 (28)
    • ►  12월 (3)
    • ►  11월 (6)
    • ►  10월 (6)
    • ►  9월 (6)
    • ►  8월 (1)
    • ►  7월 (3)
    • ►  6월 (3)

구독

글
Atom
글
댓글
Atom
댓글

로드 중입니다...

각오

직접 해보지 않은 것은 포스팅 하지 않겠습니다.

Copyright © 김보안의 블로깅 | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates