크립토 월렛 분석과 검토를 통한 개인키 관리 및 사례 연구
04. 크립토 월렛의 개인키 관리 분석
제3절 크립토 월렛에서 개인키 관리를 위한 기술
크립토 월렛에서 개인키를 관리하기 위한 기술적 요소가 있다. 대표적으로 BIP-32, BIP-39가 있다. BIP(Bitcoin Improvement Proposals)란 비트코인을 개선하고자 제안하는 개선 제안서이다. 크립토 월렛에서 사용하는 핵심 기술에 대해 알아본다.
1. HD 월렛(Hierarchical Deterministic Wallets)
BIP-32 HD 월렛은 결정론적 지갑을 위한 표준 규격으로 하나의 시드(Seed)로부터 여러 개의 키 쌍 체인을 파생시키는 방법을 정의한다. HD 월렛에는 트리 구조에서 생성된 키를 담고 있다. 이 구조에서는 부모 키가 자식 키 열을 만들어 낼 수 있고 각각의 자식 키는 손자 키 열을 만들어 낼 수 있으며 이 과정이 무한대로 반복된다.
HD 월렛은 무작위(비결정적) 키에 대해 두 가지 주요한 장점을 제공한다. 첫째, 유기적인 의미를 표현하기 위해 트리 구조가 사용될 수 있다. 둘째, 사용자가 해당 개인키에 접근하지 않고도 일련의 공개키를 생성할 수 있다. 이러한 특성 때문에 안전하지 않은 서버상에서나 수신 기능이 있는 서버에서도 HD 월렛을 사용할 수 있고 각각의 거래에 대해 다른 공개키를 발급하게 된다. 이러한 트리 구조는 <그림 3-1>에 나와 있다.
HD 월렛은 단일 시드(Seed)에서 시작하여 각각의 하위 체인에서는 하위 키들을 파생시키기 위해 이전 키와 체인에 대한 정보를 사용한다. HD 월렛 구조는 아래와 같다.
<표 3-1> HD 월렛의 주요 구성요소
구성요소 | 설명 |
Master Seed | HD 월렛의 뿌리가 되는 값으로 암호학적으로 안전한 난수(random number)를 생성해서 만든다. 이 값은 모든 계정(account) 및 하위 체인의 개인키를 생성하는 데 사용된다. |
Master Node | Master Seed에서 파생된 최상위 키값을 의미하며 모든 계정 및 하위 체인의 개인키 생성에 사용되며 Master Private Key와 Master Public Key 값을 갖는다. |
Wallets/Accounts | HD 월렛은 하나 이상의 계정으로 구성된다. 각 계정은 독립적인 하위 체인을 가지며 각각의 계정에서 사용하는 모든 키 쌍은 Master Node에서 파생된다. 하나의 HD 월렛 내에 여러 개의 계정을 만들 수 있으며 이러한 계정은 각각 서로 다른 목적으로 사용될 수 있다. |
Wallet Chains | 각 계정은 하나 이상의 하위 체인을 가질 수 있으며 하위 체인은 각각 독립적인 인덱스 값을 갖는 다수의 키 쌍으로 구성된다. 하위 체인은 같은 계정 내에서 생성되며 Master Node를 사용해 파생된다. |
Address | HD 월렛은 다수의 주소를 포함하며 각각의 주소는 하위 체인에서 파생된 공개키의 해시값으로 만들어진다. 이러한 주소는 비트코인을 수신하기 위해 사용되며 HD 월렛은 필요에 따라 새로운 주소를 동적으로 생성할 수 있다. |
이러한 HD 월렛 구조는 백업 프로세스를 간소화하고 더욱 안전한 비트코인 월렛을 만든다.
2. 니모닉 코드(Mnemonic Code)
BIP-39 니모닉 코드는 12개 또는 24개의 영어 단어로 이루어진 시드(Seed) 값의 암호화된 표현이다. 이 시드 값은 지갑의 개인키를 생성하는 데 사용된다.
니모닉은 엔트로피를 32비트의 배수로 인코딩한다. 엔트로피가 많을수록 보안이 향상되지만, 문장 길이가 늘어난다. 초기 엔트로피 허용 길이는 128~256비트이다. <표 3-2>은 니모닉 코드 생성 및 시드 추출 과정을 설명한다.
<표 3-2> 니모닉 코드 생성 및 시드 추출 과정
구분 | 절차 | 설명 |
니모닉 코드 생성 | Entropy 생성 | 암호학적으로 랜덤한 128~256비트의 엔트로피를 생성한다. |
해시값 생성 | SHA256 알고리즘을 이용해 해시값을 구하고 해시값 중 왼쪽에서 ‘엔트로피의 길이/32비트’만큼의 체크섬을 생성한다. | |
체크섬 결합 | 생성된 체크섬을 엔트로피의 끝에 추가한다. | |
단어 치환 | 결합한 132비트를 11비트 단위로 분할하고 각각의 11비트 값을 BIP-39에 정의된 2,048개의 단어로 치환한다. | |
니모닉 코드 생성 | 단어 시퀀스로부터 순서를 유지하면서 니모닉 코드를 생성한다. | |
시드 생성 | 솔트(Salt) | 생성된 니모닉 코드와 솔트 값을 결합한다. |
키 스트레칭 (Key Stretching) |
솔트와 결합된 값을 PBKDF2 (Password-Based Key Derivation Function Version 2) 키 스트레칭 함수를 이용하여 HMAC-SHA512 (Hash-based Message Authentication Code-Secure Hash Algoritm 512) 알고리즘을 이용해 키 스트레칭한다. | |
시드 생성 | PBKDF2 알고리즘을 이용해 2048번의 해싱을 통해 512비트의 시드를 생성한다. |
추가로 솔트와 키 스트레칭은 브루트-포스 공격(Brute-force Attack)이나 레인보우 테이블 공격(Rainbow Table Attack)을 방지하기 위해 값에 임의의 값인 솔트를 추가하고 해시 알고리즘을 여러 번 반복하는 키 스트레칭을 통해 다양한 공격으로부터 데이터를 보호하는 것이다.
니모닉 단어 목록에는 다음과 같은 특징이 있다. 첫 번째 현명한 단어 선택이다. 단어 목록은 처음 네 글자를 입력해 명확하게 식별할 수 있는 단어로 생성된다. 두 번째로 비슷한 단어는 피한다. “build”와 “built”, “woman”과 “women”, “quick”과 “quickly”와 같은 단어 쌍은 문장을 기억하기 어렵게 만들 뿐 아니라 오류가 발생하기 쉽고 추측하기 어렵게 된다. 마지막으로 정렬된 단어 목록을 사용한다. 코드 단어를 보다 효율적으로 조회할 수 있도록 단어 목록이 정렬된다. 단어 목록은 네이티브 문자를 포함할 수 있지만 NFKD(Normalization Form Compatibility Decomposition)를 사용하여 UTF-8(Unicode Transformation Format)로 인코딩해야 한다.
BIP-39 니모닉 코드는 비트코인 지갑뿐만 아니라 다른 암호화폐 지갑에서도 널리 사용되고 있다. 이 표준을 준수하는 지갑들은 서로 호환될 수 있어 니모닉 코드를 백업하고 여러 지갑 간 이전이 가능해진다.
'블록체인 > 크립토 월렛' 카테고리의 다른 글
15. 결론 (0) | 2023.10.02 |
---|---|
14. 크립토 월렛에 대한 사례 분석 - 크립토 월렛 서비스 사례 분석 (1) | 2023.10.02 |
13. 크립토 월렛에 대한 사례 분석 - 크립토 월렛 사고 사례 분석 (1) | 2023.10.02 |
12. 크립토 월렛의 개인키 관리 분석 - 안전한 개인키 관리를 위한 크립토 월렛 기술 (1) | 2023.10.01 |
10. 크립토 월렛의 개인키 관리 분석 - 크립토 월렛의 개인키 관리 방법 (0) | 2023.09.30 |
09. 크립토 월렛의 개인키 관리 분석 - 크립토 월렛의 개인키 생성 프로세스 (0) | 2023.09.30 |
08. 크립토 월렛의 개요 - 크립토 월렛을 구성하는 주요 기술 (0) | 2023.09.29 |
07. 크립토월렛의 개요 - 클립토 월렛의 주요 기능 (0) | 2023.09.29 |
댓글