Traditional Crypto Wallet
Ví mã hóa (crypto wallet) không lưu bất cứ đồng tiền mã hóa (Cryptocurrency) nào. Thực chất, các đồng tiền mã hóa chưa bao giờ rời khỏi blockchain.
Thứ mà ví mã hóa thật sự lưu là một cặp khóa công khai - riêng tư. Khóa công khai được sử dụng để nhận tiền mã hóa (còn được gọi là địa chỉ công khai), trong khi khóa bí mật được dùng để ký các giao dịch khi thực hiện chuyển tiền.
Các blockchain đã từng sinh ra các khóa riêng tư ngẫu nhiên và riêng biệt cho từng giao dịch. Chẳng hạn như với ví Bitcoin đầu tiên, Bitcoin-Qt, các khóa ngẫu nhiên sẽ được lưu ở trong file có tên là wallet.dat
. Nếu người dùng lỡ tay xóa file này hoặc bị tấn công bởi malware thì họ có thể sẽ mất Bitcoin. Để đảm bảo tính an toàn, người dùng cần thực hiện backup lại khóa sau mỗi lần thực hiện giao dịch và điều này gây ra một sự bất tiện nhất định.
BIP32
Để giải quyết vấn đề này, chúng ta cần sử dụng ví phân cấp xác định (Hierarchical Deterministic Wallet - HD wallet), được đề xuất trong BIP32 (BIP là viết tắt của Bitcoin Improvement Proposal và 32 là số thứ tự của đề xuất1).
Ví HD có một master key pair và được dùng để tạo ra các khóa riêng tư khác nhau theo một cách được định sẵn. Khi đó, nghười dùng chỉ cần:
- Backup master key pair thay vì phải backup từng key sau mỗi lần thực hiện giao dịch.
- Có thể sử dụng lại các khóa riêng tư cho nhiều ứng dụng khác nhau.
Về bản chất, tất cả các khóa của ví được tạo ra dựa trên một chuỗi dữ liệu tùy ý nào đó mà được sắp xếp thành 12-24 từ có tên là seed phrase (còn được gọi là mnemonic phrase hay recovery phrase). Seed phrase cần phải có mức độ ngẫu nhiên khoảng 128 hoặc 256 bits entropy.
Seed phrase sẽ tự động sinh ra các khóa công khai - riêng tư bao gồm cả master key pair theo một cấu trúc dạng cây tương tự như hình bên dưới:
Giải thích ý nghĩa của hierarchical deterministic:
- Chữ “hierarchical” có nghĩa là mỗi khóa con có thể tạo ra nhiều khóa con khác, hình thành nên một hệ thống phân cấp.
- Chữ “deterministic” có nghĩa là với cùng một seed phrase cho trước, ta luôn sinh ra được các khóa theo một cách đã biết.
Master Key Pair
Đối với master key pair, khóa công khai được gọi là extended public key (xPub) và khóa bí mật được gọi là extend private key (xPriv).
- Khóa xPriv được dùng để sinh ra các private key và không được dùng để ký các giao dịch.
- Khóa xPub được dùng để sinh ra các địa chỉ public mới mà không cần phải truy cập đến các khóa private và nó không cung cấp bất cứ thông tin gì về các private key.
HD Path
Một địa chỉ trong HD wallet tree được biểu diễn bằng một đường dẫn (ta gọi là HD path) có cấu trúc như sau:
m/purpose'/coin_type'/account'/chain/address_index
Ví dụ, đối với Ethreum, prefix của HD path sẽ là m/44'/60'/0'/0
. Cụ thể:
- 44 là giá trị của BIP2.
- 60 là giá trị định danh cho Ether (đơn vị tiền mã hóa của Ethereum)3.
- 0 là account 0
- 0 là chain 0.
Giả sử ta có một HD wallet tree như sau:
Bởi vì một HD wallet có thể lưu nhiều loại tiền tệ nên có thể có nhiều giá trị coin type ở trong HD path. Trong hình trên, có hai loại đồng tiền là Bitcoin và Blackcoin.
Tương tự với coin type, ta cũng có thể có nhiều account ở trong một ví HD. Mặc dù vậy, ta thường chỉ dùng một account duy nhất.
Giá trị của chain chỉ có thể là 0 hoặc 1.
- Nếu là 0 thì nó sẽ được sử dụng để tạo ra các địa chỉ công khai.
- Nếu là 1 thì nó sẽ được sử dụng để lưu các địa chỉ nhận tiền thừa (một giao dịch trong Bitcoin có thể có tiền thừa).
Các node lá của HD wallet tree chính là các địa chỉ.
The Benefits of an HD Wallet
Mặc dù HD wallet được phát triển dành cho Bitcoin, nhưng nó đã trở thành tiêu chuẩn chung cho các ví mã hóa mà có hỗ trợ lưu trữ nhiều loại tiền mã hóa. Các lợi ích khi sử dung HD wallet:
- Dễ dàng backup và khôi phục.
- Blockchain agnostic: có thể tạo ra một lượng lớn các unique address dùng cho nhiều loại tiền tệ khác nhau.
- Bảo đảm tính riêng tư: người dùng có thể sinh ra những khóa khác nhau cho mỗi giao dịch nên lịch sử giao dịch và tổng số dư chính xác sẽ không thể bị khai thác.
- Bảo mật: khóa riêng tư luôn được lưu offline.
- Tiện lợi và hiệu quả: chúng ta chỉ cần lưu mỗi seed phrase là có thể dễ dàng tạo ra được các địa chỉ công khai.
Footnotes
-
Tham khảo bips/bip-0032.mediawiki at master · bitcoin/bips · GitHub ↩
-
Tham khảo bips/bip-0044.mediawiki at master · bitcoin/bips · GitHub ↩
-
Xem danh sách các loại đồng tiền mã hóa: slips/slip-0044.md at master · satoshilabs/slips · GitHub ↩