Bỏ qua đến nội dung chính

BIP39 là gì?

Đã cập nhật hôm nay

Thông số kỹ thuậ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ớ).

Thông số kỹ thuật bao gồm hai phần chính:

  1. Cách tạo cụm từ ghi nhớ.

  2. 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ả từng phần trong 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:

  1. Tạo một chuỗi ngẫu nhiên (entropy) từ 128 đến 256 bit (bước nhảy 32 bit)

  2. Thực hiện SHA256 trên chuỗi ngẫu nhiên được tạo ở bước trước để tạo ra giá trị Hash, và lấy N bit đầu tiên của giá trị Hash (độ dài entropy / 32, ví dụ: 128 bit, thì N = 4) làm bản tóm tắt (Checksum) của chuỗi ngẫu nhiên.

  3. Thêm bản tóm tắt vào cuối chuỗi ngẫu nhiên được tạo ở bước đầu tiên, để ví dụ trong hình, chuỗi ngẫu nhiên có bản tóm tắt là 128 + 4 = 132 bit.

  4. Phân tách chuỗi ngẫu nhiên từ bước trước thành các phân đoạn 11 bit (chia nhỏ), để với chuỗi có độ dài entropy 128 bit, sẽ tạo ra 12 phân đoạn (132 / 11 = 12).

  5. Tại thời điểm này, ánh xạ mỗi giá trị chứa phân đoạn 11 bit vào một từ điển định sẵn gồm 2048 từ.

  6. 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ố: cụm từ ghi nhớ và muối (salt). Mục đích của muối là làm cho việc bẻ khóa khó khăn hơn, và trong BIP-39, chúng ta có thể sử dụng cụm 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 chuỗi Tiêu chuẩn Mã hóa 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 Lực lượng Kỹ thuật Internet."

Tiếp theo quá trình tạo cụm từ ghi nhớ trên, sơ đồ sau đây cho thấy 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à muối (salt), thường bao gồm một chuỗi và sự kết hợp tùy chọn các chuỗi mật mã do người dùng cung cấp.

  • PBKDF2 sử dụng thuật toán HMAC-SHA512, sử dụng 2048 lần băm để tạo ra giá trị 512 bit làm hạt giống.

Tạo ví HD từ hạt giống

Hạt giống được tạo ở trên sẽ được sử dụng làm Hạt giống Gốc (Root Seed) 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ái tạo lại toàn bộ ví HD.

generate-hd-master-key.jpeg

Việc 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 Chính Bí mật (Master Private Key) và 256 bit bên phải làm Mã Chuỗi Chính (Master Chain Code). Sau đó, Khóa Công khai Chính (Master Public Key) (264 bit) có thể được tạo ra từ Khóa Chính Bí mật m.

Như bạn có thể thấy từ hình trên, khóa HD được tạo với các tham số sau.

  • Khóa Bí mật 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 (Parent Chain Code) 256 bit.

  • Một số nguyên chỉ mục 32 bit.

Ngoài ra, quy trình trên là đệ quy và Khóa Bí mật Con trong sơ đồ có thể được sử dụng làm Khóa Bí mật 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 để dẫn xuất các khóa cha hoặc khóa chị em ở cùng cấp độ, chỉ có khóa cha và mã chuỗi cha (được tạo từ khóa và mã chuỗi cha của cấp độ trước) mới có thể được sử dụng để dẫn xuất tất cả các khóa con và mã chuỗi con, và sau đó tạo ra 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 ra tất cả các nhánh từ đó trở đi.

Khóa được cung cấp trong khóa mở rộng có thể là khóa bí mật hoặc khóa công khai, kết hợp với mã chuỗi được gọi là Khóa Bí mật Mở rộngKhó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 bí mật mở rộng và không thể làm ngược lại, vì vậy đố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 bí mật 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à sơ đồ sau đây cho thấy cơ chế truyền của khóa công khai cha mở rộng để dẫn xuất khóa bí mật con và tạo khóa công khai con:

Nội dung này có giải đáp được câu hỏi của bạn không?