Đặc tả BIP-39 chủ yếu mô tả thuật toán và quy trình tạo ví xác định dựa trên cụm từ ghi nhớ (một tập hợp các từ dễ nhớ).
Đặc tả bao gồm hai phần chính:
Cách tạo cụm từ ghi nhớ.
Cách chuyển đổi cụm từ ghi nhớ đã tạo thành một hạt giống nhị phân.
Sau đây là cách tạo ví xác định bằng cách mô tả trước hai phần này.
Tạo cụm từ ghi nhớ
Quy trình thuật toán để tạo cụm từ ghi nhớ như sau:
Quy trình như sau:
Tạo một chuỗi ngẫu nhiên (entropy) từ 128 đến 256 bit (bước nhảy 32 bit)
Thực hiện SHA256 trên chuỗi ngẫu nhiên đã tạo ở bước trước để tạo giá trị Hash, và lấy N bit đầu tiên của giá trị Hash (độ dài entropy / 32, ví dụ: 128 bit, sau đó N = 4) làm Checksum của chuỗi ngẫu nhiên.
Thêm Checksum vào cuối chuỗi ngẫu nhiên đã tạo ở bước đầu tiên, để ví dụ trong hình chuỗi ngẫu nhiên với Checksum là 128 + 4 = 132 bit.
Phân tách chuỗi ngẫu nhiên từ bước trước thành các đoạn 11 bit (chia), để đối với chuỗi có độ dài entropy 128 bit, sẽ tạo ra 12 đoạn (132 / 11 = 12).
Tại thời điểm này, ánh xạ từng giá trị chứa một đoạn 11 bit vào một từ điển định sẵn gồm 2048 từ.
Nhóm từ cuối cùng được tạo theo thứ tự cắt chính là cụm từ ghi nhớ.
Tạo hạt giống từ cụm từ ghi nhớ
Sau khi tạo cụm từ ghi nhớ, chúng ta có thể tạo hạt giống bằng cách sử dụng thuật toán hàm tạo khóa PBKDF2.
PBKDF2 yêu cầu hai tham số: một cụm từ ghi nhớ và một salt. Mục đích của salt là làm cho việc giải mã khó khăn hơn, và trong BIP-39, chúng ta có thể sử dụng mật khẩu (passphrase) làm yếu tố bảo mật bổ sung để bảo vệ hạt giống.
"PBKDF2 là một phần của bộ Tiêu chuẩn Mật mã Khóa Công khai (PKCS) của RSA Laboratories,
cụ thể là PKCS #5 v2.0, cũng được xuất bản dưới dạng RFC 2898 của Nhóm Kỹ thuật Internet."
Tiếp theo quy trình tạo cụm từ ghi nhớ trên, biểu đồ sau đây minh họa thuật toán tạo hạt giống.
Tham số đầu tiên của PBKDF2 là cụm từ ghi nhớ đã tạo ở trên.
Tham số thứ hai của PBKDF2 là salt, thường bao gồm một chuỗi và một chuỗi mật mã tùy chọn do người dùng cung cấp được nối vào.
PBKDF2 sử dụng thuật toán HMAC-SHA512, thuật toán này sử dụng 2048 lần băm để tạo ra một giá trị 512 bit làm hạt giống.
Tạo ví HD từ hạt giống
Hạt giống đã tạo ở trên sẽ được sử dụng làm Hạt giống Gốc của ví HD, và Hạt giống Gốc của bất kỳ ví HD nào cũng có thể tạo lại toàn bộ ví HD.
Nhập Hạt giống Gốc vào thuật toán HMAC-SHA512 sẽ cho ra một giá trị băm 512 bit, trong đó 256 bit bên trái được sử dụng làm Khóa Riêng Gốc và 256 bit bên phải làm Mã Chuỗi Gốc. Sau đó, Khóa Công khai Gốc (264 bit) có thể được tạo từ Khóa Riêng Gốc m.
Như bạn có thể thấy từ hình trên, khóa HD được tạo bằng các tham số sau.
Khóa Riêng Cha hoặc Khóa Công khai Cha; (cả hai đều là khóa ECDSA 256 bit không nén).
Mã Chuỗi Cha 256 bit.
Số chỉ mục nguyên 32 bit.
Ngoài ra, quy trình trên là đệ quy và Khóa Riêng Con trong sơ đồ có thể được sử dụng làm Khóa Riêng Cha ở cấp tiếp theo.
Bằng cách nhập (Khóa Công khai Cha, Mã Chuỗi Cha, Số chỉ mục) vào thuật toán HMAC-SHA512, chúng ta có thể tạo ra các khóa con của nó và chúng ta có thể điều chỉnh Số chỉ mục để tạo nhiều khóa con ở cùng một cấp độ.
Về Khóa Mở rộng
Vì hàm dẫn xuất khóa này là một chiều, tất cả các khóa con không thể được sử dụng để suy ra khóa cha hoặc khóa chị em ở cùng cấp độ, chỉ khóa cha và mã chuỗi cha (được tạo từ khóa và mã chuỗi của cha ở cấp độ trên) mới có thể được sử dụng để suy ra tất cả các khóa con và mã chuỗi con, và sau đó tạo các khóa công khai con và địa chỉ tương ứng để ký giao dịch.
Sự kết hợp của Khóa và Mã Chuỗi được gọi là khóa mở rộng, và khóa mở rộng có thể được sử dụng để tạo tất cả các nhánh từ đó trở xuống.
Khóa được cung cấp trong khóa mở rộng có thể là khóa riêng hoặc khóa công khai, kết hợp với mã chuỗi được gọi là Khóa Riêng Mở rộng và Khóa Công khai Mở rộng, tương ứng, và được ký hiệu là (k, c) và (K, c), trong đó khóa công khai K = point(k).
Chúng ta có thể dẫn xuất khóa công khai mở rộng từ khóa riêng mở rộng và không ngược lại, do đó đối với một số tình huống giao dịch (ví dụ: thương mại điện tử), một khóa công khai và địa chỉ mới có thể được tạo cho mỗi giao dịch để nhận thanh toán, trong khi khóa riêng mở rộng có thể được lưu trữ trong ví giấy hoặc ví phần cứng để ký giao dịch ngoại tuyến một cách an toàn. Như chúng ta có thể thấy, tính bảo mật của khóa công khai mở rộng tương đối cao, và biểu đồ sau đây cho thấy cơ chế truyền của khóa công khai cha mở rộng để suy ra khóa riêng con và tạo khóa công khai con:



