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

BIP39 là gì?

U
Được viết bởi UKey Wallet

Đặ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 khả năng 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. Làm thế nào để tạo ra bản ghi nhớ.

  2. Cách chuyển đổi bản ghi nhớ được tạo thành 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 tiên từng phần trong số hai phần này.

Tạo một bản ghi nhớ

Quá trình thuật toán để tạo ra một bản ghi nhớ như sau:

Quá trình này như sau:

  1. Tạo một chuỗi ngẫu nhiên (entropy) từ 128 đến 256 bit (kích thước bước 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 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 Tổng kiểm tra của chuỗi ngẫu nhiên.

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

  4. Tách chuỗi ngẫu nhiên khỏi bước trước bằng các phân đoạn 11 bit (tách), sao cho chuỗi có độ dài entropy 128 bit, 12 phân đoạn được tạo ra (132/11 = 12).

  5. Tại thời điểm này, ánh xạ từng giá trị chứa phân đoạn 11 bit vào từ điển được xác định trước gồm 2048 từ.

  6. Nhóm từ cuối cùng được tạo ra theo thứ tự cắt là nhóm từ ghi nhớ.

Tạo hạt giống từ khả năng ghi nhớ

Sau khi tạo bản 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ố: ghi nhớ và muối. Mục đích của muối là làm cho việc bẻ khóa trở nên khó khăn hơn và trong BIP-39, chúng tôi có thể giới thiệu cụm mật khẩu như một yếu tố bảo mật bổ sung để bảo vệ hạt giống.

“PBKDF2 là một phần của loạt Tiêu chuẩn mật mã khóa công khai (PKCS) của Phòng thí nghiệm RSA, 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 Đặc nhiệm Kỹ thuật Internet.”

Tiếp theo quá trình tạo ghi nhớ ở trên, sơ đồ sau đây hiển thị thuật toán tạo hạt giống.

  • Tham số đầu tiên của PBKDF2 là thông tin ghi nhớ được tạo ở trên.

  • Tham số thứ hai của PBKDF2 là muối, thường bao gồm một chuỗi và một chuỗi tùy chọn nối 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 hàm 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 của ví HD và Hạt giống gốc của bất kỳ ví HD nào có thể tạo lại toàn bộ ví HD.

Việc nhập Root Seed vào thuật toán HMAC-SHA512 sẽ mang lại hàm băm 512 bit, 256 bit bên trái được sử dụng làm Khóa riêng chính và 256 bit bên phải làm Mã chuỗi chính. Sau đó, Khóa công khai chính (264 bit) có thể được tạo bởi Khóa riêng chính m.

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

  • Khóa riêng của cha mẹ hoặc Khóa công khai của cha mẹ; (cả hai đều là khóa ECDSA 256 bit không nén).

  • Mã chuỗi gốc gồm 256 bit.

  • Số chỉ mục nguyên 32 bit.

Ngoài ra, quy trình trên là quy trình đệ quy và Khóa riêng của trẻ trong sơ đồ có thể được sử dụng làm Khóa riêng của cha mẹ ở cấp độ tiếp theo.

Bằng cách nhập (Khóa công khai gốc, Mã chuỗi gốc, Số chỉ mục) vào thuật toán HMAC-SHA512, chúng ta có thể tạo các khóa con của nó và có thể điều chỉnh Số chỉ mục để tạo nhiều khóa con ở cùng cấp độ.

Giới thiệu về khóa mở rộng

Bởi vì chức năng phái sinh khóa này là một chiều, nên tất cả các khóa con không thể được sử dụng để lấy khóa chính hoặc khóa chị em của chúng ở cùng cấp, chỉ có khóa gốc và mã chuỗi gốc (được tạo từ khóa cấp độ gốc và mã chuỗi của cấp độ gốc) có thể được sử dụng để lấy ra tất cả các khóa con và mã chuỗi con, sau đó tạo các khóa và địa chỉ công khai phụ tương ứng để ký giao dịch.

Sự kết hợp giữ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 chung, được kết hợp với mã chuỗi lần lượt có tên Khóa riêng mở rộngKhóa công khai mở rộng và được ghi chú lần lượt là (k, c) và (K, c), trong đó khóa chung K = point(k).

Chúng ta có thể lấy khóa chung mở rộng từ khóa riêng mở rộng chứ không phải ngược lại, vì vậy, đối với một số trường hợp giao dịch (ví dụ: thương mại điện tử), có thể tạo khóa công khai và địa chỉ mới 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 an toàn. Như chúng ta có thể thấy, tính bảo mật của khóa chung mở rộng tương đối cao và sơ đồ sau đây cho thấy cơ chế truyền của khóa chung cha mẹ mở rộng để lấy khóa riêng con và tạo khóa chung con:

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