Blockchain Basics
BIP-39 사양은 니모닉 문구(기억하기 쉬운 단어 집합)를 기반으로 결정론적 지갑을 생성하는 알고리즘과 프로세스를 주로 설명합니다.
사양은 두 가지 주요 부분으로 구성됩니다.
니모닉 문구를 생성하는 방법.
생성된 니모닉을 바이너리 시드로 변환하는 방법.
결정론적 지갑을 생성하는 방법을 알아보기 위해 먼저 이 두 부분을 설명하겠습니다.
니모닉 단어 생성
니모닉 단어를 생성하는 알고리즘 흐름은 다음과 같습니다.
프로세스는 다음과 같습니다.
128~256비트(스텝 크기 32비트)의 랜덤 시퀀스(엔트로피)를 생성합니다.
이전 단계에서 생성된 랜덤 시퀀스에 대해 SHA256을 수행하여 해시 값을 생성하고, 해시 값의 처음 N 비트(엔트로피 길이/32, 예를 들어 128비트, N=4)를 랜덤 시퀀스의 체크섬으로 사용합니다.
첫 번째 단계에서 생성된 랜덤 시퀀스의 끝에 체크섬을 추가합니다. 그러면 그림의 예에서 체크섬이 포함된 랜덤 시퀀스는 128 + 4 = 132비트가 됩니다.
이전 단계의 랜덤 시퀀스를 11비트 조각(분할)으로 나누어 128비트 엔트로피 길이의 시퀀스에 대해 12개의 조각이 생성됩니다(132/11 = 12).
이 시점에서 11비트 세그먼트를 포함하는 각 값은 미리 정의된 2048개 단어 사전에 매핑됩니다.
잘라내기 순서로 생성된 마지막 단어 세트가 니모닉입니다.
니모닉에서 시드 생성
니모닉이 생성된 후 키 생성 기능을 사용할 수 있습니다.PBKDF2알고리즘은 시드를 생성합니다.
PBKDF2 니모닉과 솔트라는 두 가지 매개변수가 필요합니다. 솔트의 목적은 크래킹을 더욱 어렵게 만드는 것이며 BIP-39에서는 시드를 보호하기 위한 추가 보안 요소로 비밀번호를 도입할 수 있습니다.
"PBKDF2는 RSA 실험실 공개 키 암호동물학 표준(PKCS) 제품군, 특히 PKCS #5 v2.0의 일부입니다.Internet Engineering Task Force의 RFC 2898로도 게시되었습니다. "
위의 니모닉 단어가 생성된 후, 다음 그림은 시드 생성 알고리즘을 보여줍니다.
PBKDF2의 첫 번째 매개변수는 위에서 생성된 니모닉 구문입니다.
PBKDF2의 두 번째 인수는 일반적으로 문자열과 사용자가 제공한 비밀번호 문자열의 선택적 연결로 구성되는 솔트입니다.
PBKDF2는 2048개의 해시를 사용하여 512비트 값을 시드로 생성하는 HMAC-SHA512 알고리즘을 사용합니다.
시드에서 HD 지갑 생성
위에서 생성된 시드는 HD 지갑의 루트 시드 역할을 하며, HD 지갑의 루트 시드는 전체 HD 지갑을 다시 생성할 수 있습니다.
HMAC-SHA512 알고리즘에 루트 시드를 입력하면 512비트 해시가 생성되며, 왼쪽 256비트는 마스터 개인 키로 사용되고 오른쪽 256비트는 메인 체인 코드로 사용됩니다. 후에,마스터 공개키(264비트)는 마스터 개인키 m으로부터 생성될 수 있습니다.
위 그림에서 볼 수 있듯이 HD 키는 다음과 같은 매개변수를 통해 생성됩니다.
상위 개인 키 또는 상위 공개 키. (둘 다 비압축 256비트 ECDSA 키입니다.)
256비트 상위 체인 코드.
32비트 정수 인덱스 번호입니다.
게다가 위의 과정은 재귀적이다. 그림에서,하위 개인 키다음 단계로 사용할 수 있습니다.상위 개인 키。
HMAC-SHA512 알고리즘에 (상위 공개 키, 상위 체인 코드, 인덱스 번호)를 입력하면,하위 키를 생성할 수 있으며 색인 번호를 조정하여 동일한 수준의 여러 하위 키를 생성할 수 있습니다.
확장 키 정보
키 파생 함수는 단방향이므로 하위 키는 형제 상위 또는 자매 키를 파생할 수 없습니다.모든 하위 키 및 하위 체인코드는 상위 키 및 상위 체인코드(상위의 상위 키 및 체인코드에 의해 생성됨)를 통해서만 파생될 수 있으며 이후에 해당 하위 공개 키 및 주소를 생성하여 트랜잭션에 서명할 수 있습니다.
키와 체인코드의 조합을 확장키라고 하며, 확장키를 이용하면 여기 아래의 모든 브랜치를 생성할 수 있습니다.
확장키에 제공되는 키는 개인키 또는 공개키일 수 있으며, 각각 (k, c) 및 (K, c)로 표시되는 "확장 개인키" 및 "확장 공개키"라는 체인 코드와 결합됩니다. 여기서 공개키 K = 지점 (k)입니다.
확장된 개인 키에서 확장된 공개 키를 파생할 수 있고 그 반대로도 가능하므로 일부 거래 시나리오(예: 전자 상거래)의 경우 지불을 받기 위해 각 거래에 대해 새로운 공개 키와 주소가 생성될 수 있습니다.확장된 개인 키는 종이 지갑이나 하드웨어 지갑에 저장할 수 있으며 오프라인 거래에 안전하게 서명하는 데 사용할 수 있습니다. 확장된 공개키의 보안성이 상대적으로 높다는 것을 알 수 있다.다음 그림은 상위 공개 키를 확장하여 하위 개인 키를 파생시키고 하위 공개 키를 생성하는 전송 메커니즘을 보여줍니다.




