개발하기좋은날

니모닉 생성 - 1 (니모닉 이란) 본문

BlockChain

니모닉 생성 - 1 (니모닉 이란)

devbi 2022. 7. 15. 20:53
반응형

니모닉(Mnemonic)이란 결정적 지갑에서 난수를 12개의 영단어로 인코딩한 영단어 그룹, BIP39 에서 제안 

- 기존의 시드 키는 숫자와 문자로 구성된 난수이기 떄문에 사용자가 기억하기 어려웠지만, 니코닉 코드 단어의 경우 사용자가 기억하고 사용하기 쉬운 형태로 구성되어 있다는 장점이 있다.

 

시드키 & 니모닉

블록체인에서 니모닉은 지갑을 복구하기 위한 일반적인 단어들의 조합이다 

 

메타 마스크 니모닉을 활용한 지갑 복구

니모닉 Wallet 

- 니모닉을 사용하여 비밀키 관리를 용이하게 해주는 암호화폐 지갑

- 사용자는 비밀 키를 잃어버릴수 있다는 위험성 떄문에, 비밀키 복구할때 니모닉을 사용

- 니모닉 Wallet은 암호화폐 지갑의 핵심인 비밀키 관리를 용이하게 해줌 

- 암화화폐 지갑에 화폐 자체가 들어있는것은 아님 

- 암호 화폐 지갑은 키를 관리하는 키 매니지먼트 시스템 

ex) 내 계정에 있는 이더리움을 내것이라고 증명 할 수 있는 비밀키를 지갑이 관리한다고 보면됨 

 

니모닉이 필요한 이유 

- 암호 화폐 지갑은 공개키와 비밀키를 둘다 사용하는 비대칭 키 방식 

- 암호 화폐 지갑에서는 공개키로는 주로 계좌 번호 처럼 주소로 사용됨 

- 비밀키는 공개키로 계산이 되지만 공개키로는 비밀키 계산이 현실적으로 불가능함 

- 암호화폐 지갑은 비대칭 키 암호 방식을 사용하는데  여기서 비밀키를 사람이 쓰기 편하게 만든게 니모닉

- 영단어 그룹으로 된 문자열 배열을 초기 배열대로 나열하지못하면 지갑을 열수없는 구조

 

 

니모닉 코드와 시드 생성 과정 (9단계)

 

니모닉 코드는 해시 함수를 재귀적으로 반복하는 키 스트레칭 과정을 거쳐 마스터 시드를 생성하고, 마스터 시드는 HD 지갑 주소 생성의 바탕이됨 

 

BIP-39에 정의도니 니모닉 코드와 시드 생성 9단계는 아래와 같다 

 

 

니모닉 단어 12-word 생성 과정

1. 128bit 또는 256bit 길이의 난수 생성 

 

2. 난수를 SHA-256 해싱 -> 해시값에서 (시드 키의 길이 / 32) 만큼을 떼어냄

2-1. 떼어낸 4bit는 체크섬으로 만든다 ex) 길이가 128bit 라면 128/32 = 4bit 을 앞에서 뗴어내 체크섬으로 만듬 

 

3. 체크섬을 난수 뒤에 붙인다 

 

4. 체크섬을 붙인 난수를 11bit 단위로 잘라냄

 

5. 각 11bit 단어를 사전에 정의된 단어로 치환

 

6. 각 11bit의 순서를 유지하여 일련의 니모닉 코드를 만든다

 

 

결과적으로 128~256bit 길이의 엔트로피를 표현하는 니모닉 코드가 생성된거다

이후 이 코드를 이용하여 키 스트레칭 함수 PBKDF2를 사용하여 더긴(512bit) 시드를 파생시키면된다 

 

 

솔트를 사용하여 512bit 코드를 파생

7. 이전 단계에서 만든 12글자 니모닉 코드 

8. 솔트(Salt)는 문자열 상수 "mnemonic" 과 선택적으로 사용되는 지정된 암호문을 연결한 값 

9. HMAC-SHA512 알고리즘을 사용하여 최종적으로 512비트 값인 seed 생성 

 

 

 

솔팅 

- 해커들의 레인보우 테이블 공격에 대비하기 위해서 문자열에 + "임의의 값" 첨가하여 해싱하여 저장하는 방식 

- 공격자는 솔트를 모르면 레인보우 테이블 공격을 할수가 없다 

 

문자열에 솔트를 추가하여 해시를 돌려 저장

 

 

 

키 스트레칭 

- 솔팅을 여러번 반복하는 과정 

솔팅을 여러번하는 키스트레칭 과정

 

반응형

'BlockChain' 카테고리의 다른 글

트릴레마 (Trilemma) 와 해결 방법  (0) 2022.07.21
니모닉 생성 - 2 (니모닉 개발)  (0) 2022.07.20
다양한 지갑  (0) 2022.07.13
크립토 이코노미 와 거버넌스  (0) 2022.07.12
암호화폐 -2 (코인과 토큰)  (0) 2022.07.11
Comments