"BIP39"의 두 판 사이의 차이
yueun970422 (토론 | 기여) |
yueun970422 (토론 | 기여) |
||
32번째 줄: | 32번째 줄: | ||
# 3번에서 만든 시퀀스와 체크섬의 연결을 11 bits 단위로 자른다. | # 3번에서 만든 시퀀스와 체크섬의 연결을 11 bits 단위로 자른다. | ||
# 각 각의 11 bits를 2048(2^11)개의 미리 정의 된 단어로 치환한다. | # 각 각의 11 bits를 2048(2^11)개의 미리 정의 된 단어로 치환한다. | ||
− | # 단어 시퀀스로부터 순서를 유지하면서 니모닉 코드를 생성한다. | + | # 단어 시퀀스로부터 순서를 유지하면서 니모닉 코드를 생성한다. |
+ | |||
+ | ==== 엔트로피에 따른 니모닉 길이 ==== | ||
+ | * ENT : 초기 엔트로피의 길이 | ||
+ | * CS : 체크섬의 길이 | ||
+ | * MS : 생성 된 니모닉 시퀀스의 길이 | ||
+ | CS = ENT / 32 | ||
+ | MS = (ENT + CS) / 11 | ||
+ | |||
+ | | ENT | CS | ENT + CS | MS | | ||
+ | + ------- + ---- + -------- + ------ + | ||
+ | | 128 | 4 | 132 | 12 | | ||
+ | | 160 | 5 | 165 | 15 | | ||
+ | | 192 | 6 | 198 | 18 | | ||
+ | | 224 | 7 | 231 | 21 | | ||
+ | | 256 | 8 | 264 | 24 | | ||
=== 시드 추출 === | === 시드 추출 === | ||
− | 엔틑로피는 키 스트레칭 함수 | + | 엔틑로피는 키 스트레칭 함수 PBKDF2를 통해서 512 bits의 시드를 만드는데 사용된다. 키 스트레칭 함수는 니모낙과 솔트(salt)라는 두 개의 파라미터를 사용한다. 솔트의 목적은 brute-forcce 공격을 가능하게 하는 lookup table 생성을 힘들게 하는 것이다. |
+ | #+6 | ||
{{각주}} | {{각주}} |
2019년 7월 4일 (목) 17:06 판
BIP39(Bitcoin Improvement Proposal 39)란 결정적 지갑을 생성하기 위해 기억하기 쉬운 단어 그룹인 니모닉 코드 또는 니모닉 문장을 구현하는 방법을 설명한다. [1]
목차
개요
BIP39는 복구 단어를 만든는 방식과 관련되어있다. 복구 단어는 니모닉 코드를 사용하고 니모닉 코드 단어(mnemonic code words)라고 한다. 니모닉 코드 단어는 순서대로 나열된 영어 단어에서 시드(seed)를 만드는 방법이다. 니모닉 코드를 사용하면 HD 지갑을 쉽게 복원할 수 있다. 니모닉 코드 단어열은 12 ~ 24 단어로 구성된다.[2]
시드와 니모닉 코드
개인 키의 안전한 백업과 복구를 위한 인코딩 방법은 여러가지다. 현재 가장 선호하는 방법은 연속 된 단어를 이용하는 것으로, 올바르 순서로 단어를 입력하면 개인 키를 다시 만들 수 있다. 이것을 니모닉이라고 부르며 BIP39에서 표준화되었다. 요즘 많은 암호화폐 지갑에서 이 표준을 사용한다. 호환 가능한 니모닉을 상ㅇ하여 백업과 복구를 위해 임포트, 익스포트가 가능하다. [3]
결정적 지갑에 사용되는 시드 비교
실제로 나열 된 16진수를 받아 쓸 때 오류가 발생할 확률은 매우 높다. 하지만 니모닉 단어에서 알려진 단어들의 목록을 다루는 것은 쉽다. 왜냐하면 단어 쓰기는 많이 반복해왔기 때문이다. 만약 실수로 철자가 틀리게 "INZECT"가 기록되었다면 지갑 복구를 위해서 "inzect"는 유효하지 않은 단어이고 대신 "insect"를 사용해야 되는 것을 빠르게 판단이 가능하다.[3]
- 16진수 표현
FCCF1AB3329FD5DA3DA9577511F8F137
- 니모닉 단어 12개 표현
wolf juice proud gown wool unfair wall cliff insect more detail hub
니모닉 코드 단어
니모닉 코드 단어는 결정적 지갑을 유도하기 위한 시드로 사용되는 난수를 인코딩한 단어 나열이다. 이 나열 된 단어들은 시드를 다시 만들 수 있고, 그것으로 지갑과 모든 파생 된 키들을 다시 만들 수 있다. 니모닉 단어를 사용하는 결정적 지갑을 구현한 지갑 어플리케이션은 지갑을 처음 만들 때 12개에서 24개의 나열 된 단어들을 보여준다. 이 단어들의 나열이 지갑 백업이고 같거나 호환되는 지갑 어플리케이션에서 모든 키를 복구하고 다시 만드는데 사용된다.[3]
브레인 지갑과 차이점
브레인 지갑이란 사람들이 비밀 키를 잘 관리할 수 있도록 만들어진 기술이다. 기억하기 쉬운 단어나 글자를 가지고 키를 생성해주는 방식이다.[4] 니모닉 단어와 브레인 지갑의 가장 큰 차이점은 브레인 지갑은 사용자가 선택한 단어들로 구성되고, 니모닉 단어는 지갑이 랜덤하게 생성한 단어를 사용자한테 보여준다, 니모닉 단어는 난수 생성 소스로 만들어지기 때문에 이 중요한 차이점이 니모닉 단어를 보다 더 안전하세 한다.[3]
니모닉 코드 생성 및 추출
BIP39에 정의 된 니모닉 코드와 시드 생성을 9단계에 걸쳐 설명할 수 있다.
니모닉 코드 생성
- 암호학적으로 랜덤한 128 ~ 256 bits의 시퀀스 S를 만든다.
- S의 SHA-256 해시 값 중에서 앞(왼쪽)에서 S의 길이 / 32 bits 만큼을 체크섬으로 만든다.
- 2번에서 만든 체크섬을 S의 끝에 추가한다.
- 3번에서 만든 시퀀스와 체크섬의 연결을 11 bits 단위로 자른다.
- 각 각의 11 bits를 2048(2^11)개의 미리 정의 된 단어로 치환한다.
- 단어 시퀀스로부터 순서를 유지하면서 니모닉 코드를 생성한다.
엔트로피에 따른 니모닉 길이
- ENT : 초기 엔트로피의 길이
- CS : 체크섬의 길이
- MS : 생성 된 니모닉 시퀀스의 길이
CS = ENT / 32 MS = (ENT + CS) / 11 | ENT | CS | ENT + CS | MS | + ------- + ---- + -------- + ------ + | 128 | 4 | 132 | 12 | | 160 | 5 | 165 | 15 | | 192 | 6 | 198 | 18 | | 224 | 7 | 231 | 21 | | 256 | 8 | 264 | 24 |
시드 추출
엔틑로피는 키 스트레칭 함수 PBKDF2를 통해서 512 bits의 시드를 만드는데 사용된다. 키 스트레칭 함수는 니모낙과 솔트(salt)라는 두 개의 파라미터를 사용한다. 솔트의 목적은 brute-forcce 공격을 가능하게 하는 lookup table 생성을 힘들게 하는 것이다.
- +6
각주
참고 자료
같이 보기