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

Giải Thích Tiêu Chuẩn BIP-39: Cách Cụm Từ Ghi Nhớ Seed Hoạt Động

BIP-39 (Bitcoin Improvement Proposal 39) định nghĩa tiêu chuẩn để tạo câu ghi nhớ (mnemonic) — chuỗi 12 hoặc 24 từ quen thuộc — mã hóa entropy dùng để suy xuất khóa ví tiền mã hóa. Được công bố năm 2013 bởi Marek Palatinus, Pavol Rusnak, Aaron Voisine và Sean Bowe, BIP-39 đã trở thành tiêu chuẩn thống trị cho sao lưu ví trên gần như mọi đồng tiền mã hóa lớn.

Hiểu BIP-39 ở mức kỹ thuật giúp bạn tự tin rằng bản sao lưu seed phrase đáng tin cậy và giúp bạn đánh giá các thuộc tính bảo mật của những cách triển khai ví khác nhau.

Tổng Quan Về BIP-39

BIP-39 quy định hai quy trình:

  1. Tạo mnemonic — Chuyển entropy ngẫu nhiên thành chuỗi từ con người có thể đọc.
  2. Suy xuất seed — Chuyển các từ mnemonic (cộng thêm passphrase tùy chọn) thành seed nhị phân 512-bit có thể dùng với BIP-32 để tạo khóa phân cấp xác định.

Hai quy trình này được tách biệt có chủ đích. Mnemonic là biểu diễn thân thiện với con người; seed là đầu vào mật mã cho quá trình suy xuất khóa.

Bước 1: Tạo Entropy

Quy trình bắt đầu bằng một khối dữ liệu ngẫu nhiên an toàn mật mã (entropy). BIP-39 hỗ trợ năm kích thước entropy:

Entropy (bits)Checksum (bits)Tổng (bits)Số từ
128413212
160516515
192619818
224723121
256826424

Trong thực tế, gần như mọi ví dùng 128 bit (12 từ) hoặc 256 bit (24 từ). Các kích thước còn lại hợp lệ theo đặc tả nhưng hiếm được triển khai.

Chất lượng nguồn entropy là yếu tố tối quan trọng. Nếu bộ tạo số ngẫu nhiên bị lệch, có thể đoán trước hoặc thiếu entropy, seed phrase tạo ra có thể bị kẻ tấn công đoán được. Xem hướng dẫn Entropy và Tính ngẫu nhiên để tìm hiểu sâu chủ đề này.

Nguồn Entropy

  • Bộ tạo số ngẫu nhiên phần cứng (HRNG) — Dùng bởi ví phần cứng như Ledger và Trezor. Chúng lấy mẫu hiện tượng vật lý (nhiễu nhiệt, nhiễu shot) để tạo ngẫu nhiên thực.
  • CSPRNG của hệ điều hành/dev/urandom trên Linux/macOS, CryptGenRandom trên Windows, hoặc crypto.getRandomValues() trong trình duyệt. Đây là các bộ tạo số giả ngẫu nhiên an toàn mật mã (CSPRNG) được gieo mầm từ nguồn entropy phần cứng.
  • Gieo xúc xắc — Một số người dùng tự tạo entropy thủ công bằng xúc xắc chuẩn casino, ánh xạ kết quả sang chỉ mục nhị phân hoặc chỉ mục từ. Cách này loại bỏ nhu cầu tin tưởng vào RNG phần mềm hoặc phần cứng.

Bước 2: Tính Checksum

Sau khi entropy được tạo, checksum sẽ được gắn thêm:

  1. Tính hash SHA-256 của các byte entropy.
  2. Lấy ENT / 32 bit đầu của hash (trong đó ENT là độ dài entropy theo bit).
  3. Gắn các bit checksum này vào entropy.

Với entropy 256-bit, cách này tạo 8 bit checksum, tổng cộng thành 264 bit.

Checksum đóng vai trò cơ chế phát hiện lỗi: khi bạn nhập seed phrase vào ví để khôi phục, ví sẽ tính lại checksum. Nếu bất kỳ từ nào sai hoặc thứ tự từ sai, checksum sẽ thất bại và ví sẽ từ chối mnemonic. Điều này bảo vệ khỏi lỗi chép tay nhưng không sửa lỗi — chỉ phát hiện có vấn đề.

Hàm Ý Của Checksum

Vì từ cuối của mnemonic mã hóa các bit checksum, không phải mọi từ đều hợp lệ ở vị trí cuối cho một chuỗi nhất định. Với mnemonic 24 từ, từ cuối mã hóa 3 bit entropy và 8 bit checksum, nên chỉ 8 trong 2.048 từ có thể hợp lệ cho bất kỳ 23 từ đầu nào. Đây là lý do bạn không thể tự do chọn từ cuối.

Bước 3: Ánh Xạ Sang Từ

Các bit entropy + checksum kết hợp được chia thành từng nhóm 11 bit. Mỗi nhóm 11 bit biểu diễn một chỉ mục từ 0 đến 2.047, tương ứng với một từ trong danh sách từ BIP-39.

264 bits / 11 bits per word = 24 words
132 bits / 11 bits per word = 12 words

Danh Sách Từ Tiếng Anh

Danh sách từ tiếng Anh của BIP-39 chứa chính xác 2.048 từ. Danh sách này được tuyển chọn cẩn thận với các thuộc tính sau:

  • Tiền tố 4 ký tự là duy nhất — Không có hai từ nào trùng 4 ký tự đầu. Nghĩa là abandon có thể được nhận diện rõ ràng bằng aban, hữu ích cho sao lưu kim loại dạng rút gọn.
  • Từ vựng phổ biến — Từ đơn giản, thông dụng trong tiếng Anh. Không dùng biệt ngữ, danh từ riêng hay từ hiếm.
  • Tránh các từ dễ nhầm — Các từ dễ gây nhầm lẫn (ví dụ: "woman" và "women") được loại bỏ khi có thể.
  • Độ dài ký tự — Tất cả từ có độ dài từ 3 đến 8 ký tự.

Danh Sách Từ Ngôn Ngữ Khác

BIP-39 định nghĩa danh sách từ trong chín ngôn ngữ:

Ngôn ngữTrạng tháiGhi chú
Tiếng AnhTiêu chuẩn tham chiếuĐược hỗ trợ rộng rãi nhất
Tiếng NhậtĐã chuẩn hóaDùng katakana; khoảng trắng là ideographic (U+3000)
Tiếng HànĐã chuẩn hóa
Tiếng Tây Ban NhaĐã chuẩn hóa
Tiếng Trung (Giản thể)Đã chuẩn hóa
Tiếng Trung (Phồn thể)Đã chuẩn hóa
Tiếng PhápĐã chuẩn hóa
Tiếng ÝĐã chuẩn hóa
Tiếng SécĐã chuẩn hóa
Tiếng Bồ Đào NhaĐã chuẩn hóa

Lưu ý tương thích quan trọng: Mnemonic tạo từ một danh sách từ không thể khôi phục bằng danh sách từ ngôn ngữ khác. Chỉ mục từ giữa các ngôn ngữ là khác nhau. Luôn ghi lại ngôn ngữ đã dùng khi tạo bản sao lưu.

Bước 4: Suy Xuất Seed (PBKDF2)

Câu mnemonic không được dùng trực tiếp làm khóa mật mã. Thay vào đó, nó được key stretching bằng PBKDF2-HMAC-SHA512:

PBKDF2(
password = mnemonic sentence (words joined by spaces, normalized to UTF-8 NFKD),
salt = "mnemonic" + optional_passphrase,
iterations = 2048,
key_length = 512 bits
)

Kết quả là seed 512-bit, đóng vai trò đầu vào cho quá trình suy xuất khóa phân cấp xác định của BIP-32.

Thuộc Tính Chính Của PBKDF2 Trong BIP-39

Key stretching — 2.048 vòng lặp PBKDF2 thêm chi phí tính toán cho tấn công brute-force. Dù 2.048 vòng lặp là khá thấp theo tiêu chuẩn băm mật khẩu hiện đại, bảo mật chính đến từ entropy của chính mnemonic (128 hoặc 256 bit), không phải từ hệ số key stretching.

Hỗ trợ passphrase — Salt bao gồm passphrase tùy chọn ("từ thứ 25"). Nếu không có passphrase, salt đơn giản là chuỗi "mnemonic". Nếu có passphrase, salt trở thành "mnemonic" + passphrase. Điều này nghĩa là mỗi passphrase khác nhau tạo ra seed hoàn toàn khác — và do đó là bộ khóa và địa chỉ hoàn toàn khác — từ cùng một mnemonic.

Không xác thực passphrase — Khác với checksum của mnemonic, passphrase không có checksum. Mọi passphrase đều hợp lệ. Nhập sai passphrase không tạo lỗi; nó âm thầm sinh ra một ví khác (rỗng). Đây là tính năng cho khả năng chối bỏ hợp lý, nhưng là rủi ro cho người dùng quên passphrase.

Chuẩn hóa Unicode — Mnemonic và passphrase được chuẩn hóa theo UTF-8 NFKD (Normalization Form Compatibility Decomposition) trước khi đưa vào PBKDF2. Điều này đảm bảo suy xuất seed nhất quán giữa các cách triển khai, bất kể hệ điều hành biểu diễn ký tự nội bộ như thế nào.

Bước 5: Từ Seed Sang Khóa (BIP-32)

Seed 512-bit từ PBKDF2 được dùng làm đầu vào cho BIP-32 (Hierarchical Deterministic Wallets):

  1. Seed được đưa qua HMAC-SHA512 với khóa "Bitcoin seed".
  2. 256 bit bên trái trở thành master private key.
  3. 256 bit bên phải trở thành master chain code.
  4. Cùng nhau, chúng tạo thành master extended private key (xprv).

Từ đây, đường dẫn suy xuất BIP-44 định nghĩa cấu trúc cây chuẩn hóa để suy xuất khóa và địa chỉ theo từng loại coin.

Ví Dụ Minh Họa

Hãy đi qua BIP-39 với ví dụ đơn giản dùng entropy 128 bit (mnemonic 12 từ):

1. Tạo 128 bit entropy

00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000

(Đây là entropy toàn số 0 — chỉ để minh họa. Không bao giờ dùng trong thực tế.)

2. Tính hash SHA-256

SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb

3. Lấy 4 bit đầu của hash làm checksum

Byte đầu: 0x37 = 00110111. 4 bit đầu: 0011.

4. Gắn checksum vào entropy

128 bit số 0 + 0011 = tổng 132 bit.

5. Chia thành các nhóm 11 bit

00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000011 → 3 → "about"

Kết quả: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

Đây là test vector nổi tiếng cho entropy toàn số 0. Từ cuối là "about" (không phải "abandon") do các bit checksum.

6. Suy xuất seed bằng PBKDF2

PBKDF2("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "mnemonic", 2048, 64)

Lệnh này tạo ra seed 512-bit dùng cho suy xuất BIP-32.

Công Cụ SafeSeed

Dùng SafeSeed Seed Phrase Generator để xem BIP-39 hoạt động thực tế. Tạo seed phrase và xem entropy, checksum, và ánh xạ từ theo thời gian thực. Chạy công cụ offline để bảo mật tối đa.

Phân Tích Bảo Mật Của BIP-39

Bảo Mật Entropy

Với mnemonic 24 từ (256 bit entropy):

  • Không gian tìm kiếm là 2^256, xấp xỉ 1.16 x 10^77 khả năng.
  • Ngay cả ở tốc độ một nghìn tỷ (10^12) lần thử mỗi giây, vét cạn sẽ mất khoảng 3.67 x 10^57 năm — lâu hơn rất nhiều so với tuổi của vũ trụ (1.38 x 10^10 năm).

Với mnemonic 12 từ (128 bit entropy):

  • Không gian tìm kiếm là 2^128, xấp xỉ 3.4 x 10^38 khả năng.
  • Với một nghìn tỷ lần thử mỗi giây, vét cạn sẽ mất khoảng 10^19 năm.

Cả hai đều bất khả thi về mặt tính toán với máy tính cổ điển.

Cân Nhắc Về PBKDF2

PBKDF2 với 2.048 vòng lặp thêm một hệ số cố định cho tấn công brute-force nhưng không phải rào cản bảo mật chính. Một số nhà nghiên cứu bảo mật lưu ý rằng 2.048 vòng lặp thấp so với các hàm suy xuất khóa hiện đại như Argon2 hoặc bcrypt. Tuy nhiên, vì entropy mnemonic (128 hoặc 256 bit) mới là yếu tố chi phối, đây chỉ là mối lo nhỏ trong thực tế.

Giới Hạn Của Checksum

Checksum bắt được phần lớn lỗi chép tay nhưng:

  • Nó phát hiện lỗi nhưng không sửa lỗi.
  • Với mnemonic 12 từ, chỉ có 4 bit checksum, nghĩa là khoảng 1 trên 16 sửa đổi ngẫu nhiên vẫn qua checksum.
  • Checksum không bảo vệ khỏi việc đảo thứ tự từ mà tình cờ vẫn tạo checksum hợp lệ.

Rủi Ro Passphrase

Tính năng passphrase rất mạnh nhưng tạo thêm rủi ro:

  • Nếu bạn quên passphrase, tài sản không thể khôi phục (không có cơ chế "reset").
  • Passphrase không được xác thực — bất kỳ chuỗi nào cũng tạo ra ví hợp lệ.
  • Kẻ tấn công có mnemonic nhưng không có passphrase phải brute-force passphrase, tạo thêm bảo mật tỷ lệ thuận với entropy của passphrase.

Các Phê Bình Về BIP-39

BIP-39 không phải không có ý kiến phê bình trong cộng đồng phát triển Bitcoin.

Không Có Versioning

BIP-39 không bao gồm byte phiên bản, nghĩa là quy trình suy xuất bị cố định vĩnh viễn. Nếu cải tiến trong tương lai cần hàm suy xuất khóa khác hoặc tham số khác, điều đó không thể được báo hiệu trong định dạng mnemonic. Đây là lý do một số ví (đáng chú ý là Electrum) dùng lược đồ mnemonic riêng có versioning.

Phụ Thuộc Chặt Vào Danh Sách Từ

Mnemonic phụ thuộc vào chính xác danh sách từ. Nếu danh sách từ từng bị chỉnh sửa, mnemonic hiện có sẽ không thể khôi phục. Các danh sách từ đã được đóng băng từ khi chuẩn hóa, nhưng sự kém linh hoạt này bị một số người xem là hạn chế thiết kế.

Key Stretching Yếu

Như đã nêu, 2.048 vòng lặp PBKDF2 được coi là yếu theo tiêu chuẩn hiện đại. Dù điều này không ảnh hưởng đáng kể đến bảo mật với mnemonic entropy cao, nó cung cấp ít bảo vệ hơn cho passphrase ngắn hoặc do người dùng tự chọn.

Phương Án Thay Thế Của Electrum

Ví Electrum dùng lược đồ mnemonic riêng có versioning và không phụ thuộc danh sách từ cố định. Mnemonic của Electrum không tương thích BIP-39. Điều này có nghĩa seed phrase Electrum không thể khôi phục trong ví BIP-39 và ngược lại. Luôn biết rõ ví của bạn dùng tiêu chuẩn nào.

Các Triển Khai BIP-39

BIP-39 được triển khai trong gần như mọi ví lớn:

BIP-39Số từGhi chú
Ledger24Phần cứng, secure element
Trezor12/24Cũng hỗ trợ SLIP-39 (Shamir)
Coldcard24Phần cứng chỉ cho Bitcoin
MetaMask12Tiện ích mở rộng trình duyệt
Trust Wallet12Di động
Exodus12Desktop/di động
ElectrumKhông12Dùng lược đồ riêng
BlueWallet12/24Di động tập trung Bitcoin

Kiểm Thử Và Xác Minh

Test Vector Chính Thức

Đặc tả BIP-39 bao gồm test vector — các giá trị entropy đã biết kèm từ mnemonic và seed suy xuất tương ứng. Chúng được dùng để xác minh cách triển khai là chính xác.

Bạn có thể xác minh triển khai BIP-39 của ví bằng cách đối chiếu với test vector chính thức tại:

Xác Minh Seed Phrase Của Bạn

Để xác minh bạn đã ghi đúng seed phrase:

  1. Tạo seed phrase trên ví phần cứng của bạn.
  2. Ghi lại cẩn thận.
  3. Đặt lại ví phần cứng về cài đặt gốc.
  4. Khôi phục từ seed phrase bạn đã ghi.
  5. Xác minh cùng địa chỉ được tạo ra.
  6. Xác nhận ví có thể ký giao dịch.

Quy trình này xác nhận cả việc bản sao lưu của bạn chính xác và cách triển khai BIP-39 của ví hoạt động như kỳ vọng.

FAQ

BIP-39 là viết tắt của gì?

BIP là viết tắt của Bitcoin Improvement Proposal. BIP-39 là đề xuất số 39, định nghĩa tiêu chuẩn để tạo biểu diễn mnemonic (con người đọc được) của entropy mật mã. Nó được giới thiệu năm 2013 và đã được áp dụng bởi gần như mọi ví tiền mã hóa lớn.

Mọi seed phrase 12 từ đều là BIP-39?

Không. Một số ví (đáng chú ý là Electrum) dùng lược đồ mnemonic riêng, khác với BIP-39. Dù cả hai đều tạo cụm 12 từ từ danh sách từ, mã hóa, danh sách từ và quy trình suy xuất là khác nhau. Cụm BIP-39 không thể dùng với lược đồ của Electrum và ngược lại. Luôn kiểm tra tài liệu ví của bạn.

Tôi có thể tự tạo seed phrase BIP-39 bằng cách tự chọn từ không?

Bạn không nên. Dù về mặt kỹ thuật có thể chọn 23 từ và tính từ thứ 24 hợp lệ (để đáp ứng checksum), việc con người chọn từ không tạo đủ entropy. Bảo mật của BIP-39 phụ thuộc vào việc các từ được suy ra từ dữ liệu ngẫu nhiên chất lượng cao, không phải từ lựa chọn của con người. Hãy để CSPRNG tạo entropy.

Vì sao từ "mnemonic" được dùng làm salt của PBKDF2?

Chuỗi "mnemonic" là salt cố định do BIP-39 chỉ định. Khi dùng passphrase, passphrase sẽ được nối vào salt này (ví dụ: "mnemonicMyPassphrase"). Dùng salt cố định đã biết giúp đảm bảo suy xuất seed nhất quán giữa mọi cách triển khai mà không cần thêm thông tin nào ngoài mnemonic và passphrase tùy chọn.

BIP-39 chỉ dùng cho Bitcoin?

Không. BIP-39 được dùng trên gần như mọi đồng tiền mã hóa lớn, bao gồm Ethereum, Litecoin, Cardano, Solana và nhiều đồng khác. Quy trình tạo mnemonic và suy xuất seed là giống nhau; chỉ có đường dẫn suy xuất khóa phía sau (định nghĩa bởi loại coin trong BIP-44) khác nhau giữa các chain.

Khác biệt giữa BIP-39 và SLIP-39 là gì?

BIP-39 tạo một mnemonic duy nhất đại diện toàn bộ bí mật. SLIP-39 (Satoshi Labs Improvement Proposal 39) triển khai Shamir's Secret Sharing, chia bí mật thành nhiều phần (ví dụ: 3-trong-5). Bất kỳ số phần đạt ngưỡng đều có thể khôi phục bí mật, còn ít hơn ngưỡng thì không lộ thông tin nào. SLIP-39 dùng danh sách từ và mã hóa khác BIP-39.

Có bao nhiêu mnemonic BIP-39 hợp lệ?

Với mnemonic 24 từ: 2^256 (xấp xỉ 1.16 x 10^77). Với mnemonic 12 từ: 2^128 (xấp xỉ 3.4 x 10^38). Các con số này biểu diễn không gian entropy. Checksum ràng buộc tổ hợp từ nhưng không làm giảm entropy — nó chỉ có nghĩa không phải mọi chuỗi ngẫu nhiên gồm 24 từ BIP-39 đều tạo thành mnemonic hợp lệ.

Hướng Dẫn Liên Quan