ข้ามไปยังเนื้อหาหลัก

มาตรฐาน BIP-39 อธิบายอย่างละเอียด: วิธีการทำงานของ Mnemonic Seed Phrases

BIP-39 (Bitcoin Improvement Proposal 39) กำหนดมาตรฐานสำหรับการสร้าง mnemonic sentences — ลำดับคำที่คุ้นเคย 12 หรือ 24 คำ — ที่เข้ารหัส entropy ที่ใช้ในการสร้างคีย์ cryptocurrency wallet เผยแพร่ในปี 2013 โดย Marek Palatinus, Pavol Rusnak, Aaron Voisine และ Sean Bowe, BIP-39 ได้กลายเป็นมาตรฐานที่โดดเด่นสำหรับการสำรองข้อมูล wallet ในเกือบทั้งหมด cryptocurrencies หลัก

การทำความเข้าใจ BIP-39 ในระดับเทคนิคให้ความมั่นใจว่า seed phrase backup ของคุณมีความน่าเชื่อถือ และช่วยให้คุณประเมินคุณสมบัติความปลอดภัยของการใช้งาน wallet ที่แตกต่างกัน

ภาพรวมของ BIP-39

BIP-39 กำหนดสองกระบวนการ:

  1. Mnemonic generation — การแปลง random entropy เป็นลำดับของคำที่อ่านได้ง่ายสำหรับมนุษย์
  2. Seed derivation — การแปลง mnemonic words (บวกกับ optional passphrase) เป็น 512-bit binary seed ที่สามารถใช้กับ BIP-32 สำหรับการสร้างคีย์แบบ hierarchical deterministic

กระบวนการทั้งสองนี้แยกจากกันโดยเจตนา mnemonic คือตัวแทนที่ใช้งานง่ายสำหรับมนุษย์; seed คือ cryptographic input สำหรับ key derivation

ขั้นตอนที่ 1: Entropy Generation

กระบวนการเริ่มต้นด้วยบล็อกของข้อมูลแบบสุ่มที่ปลอดภัยทางการเข้ารหัส (entropy) BIP-39 รองรับขนาด entropy ห้าแบบ:

Entropy (bits)Checksum (bits)Total (bits)Words
128413212
160516515
192619818
224723121
256826424

ในทางปฏิบัติ เกือบทั้งหมด wallets ใช้ 128 bits (12 คำ) หรือ 256 bits (24 คำ) ขนาดอื่นๆ นั้นใช้ได้ตามข้อกำหนด แต่ใช้ได้ยากในทางปฏิบัติ

คุณภาพของแหล่ง entropy นั้นสำคัญยิ่ง หากตัวสร้างตัวเลขสุ่มมีอคติ คาดเดาได้ หรือมี entropy ไม่เพียงพอ seed phrase ที่ได้อาจถูกเดา โดยผู้โจมตี ดูไฟล์ Entropy and Randomness guide ของเราสำหรับการอธิบายโดยละเอียด

แหล่ง Entropy

  • Hardware random number generators (HRNG) — ใช้โดย hardware wallets เช่น Ledger และ Trezor สิ่งเหล่านี้สุ่มตัวอย่างปรากฏการณ์ทางกายภาพ (thermal noise, shot noise) เพื่อสร้างความสุ่มที่แท้จริง
  • Operating system CSPRNG/dev/urandom บน Linux/macOS, CryptGenRandom บน Windows, หรือ crypto.getRandomValues() ในเบราว์เซอร์ สิ่งเหล่านี้เป็น cryptographically secure pseudo-random number generators (CSPRNGs) ที่ seeded จากแหล่ง hardware entropy
  • Dice rolls — ผู้ใช้บางคนสร้าง entropy ด้วยตนเองโดยใช้ลูกเต๋ากับเหรียญ แม็ป rolls เป็นดัชนี binary หรือคำ วิธีนี้ช่วยให้ไม่ต้องไว้วางใจซอฟต์แวร์ หรือ hardware RNG

ขั้นตอนที่ 2: Checksum Computation

เมื่อ entropy ถูกสร้างขึ้น checksum จะถูกต่อท้าย:

  1. คำนวณ SHA-256 hash ของ entropy bytes
  2. นำ ENT / 32 bits แรกของ hash (โดยที่ ENT คือความยาว entropy เป็น bits)
  3. ต่อท้าย checksum bits เหล่านี้ไปยัง entropy

สำหรับ 256-bit entropy นี่จะสร้าง 8 checksum bits ทำให้รวมเป็น 264 bits

checksum ทำหน้าที่เป็นกลไกตรวจสอบข้อผิดพลาด: เมื่อคุณป้อน seed phrase ลงใน wallet เพื่อการกู้คืน wallet จะคำนวณ checksum ใหม่ หากคำใดคำหนึ่งผิดหรือคำอยู่ลำดับผิด checksum จะล้มเหลว และ wallet จะปฏิเสธ mnemonic วิธีนี้ช่วยป้องกันข้อผิดพลาดในการจำลัก แต่ไม่สามารถแก้ไขได้ — มันเพียงตรวจสอบว่ามีปัญหา

ผลกระทบของ Checksum

เนื่องจากคำสุดท้ายของ mnemonic เข้ารหัส checksum bits ไม่ใช่ entropy bits ดังนั้นคำไม่ทั้งหมดจึงใช้ได้เป็นคำสุดท้ายสำหรับลำดับที่กำหนด สำหรับ 24-word mnemonic คำสุดท้ายเข้ารหัส 3 bits ของ entropy และ 8 bits ของ checksum จึงมีเพียง 8 ของ 2,048 คำที่เป็นไปได้ที่ใช้ได้สำหรับคำ 23 คำแรก นี่คือเหตุที่คุณไม่สามารถเลือกคำสุดท้ายได้อย่างอิสระ

ขั้นตอนที่ 3: Mapping to Words

ส่วน entropy + checksum bits รวมจะแบ่งออกเป็นกลุ่ม 11 bits แต่ละกลุ่ม 11-bit หมายถึง index จาก 0 ถึง 2,047 ซึ่งตรงกับคำใน BIP-39 word list

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

BIP-39 English Word List

BIP-39 English word list มี exactly 2,048 คำ รายการได้รับการคัดสรร อย่างระมัดระวังด้วยคุณสมบัติเหล่านี้:

  • Unique four-letter prefixes — ไม่มีสองคำที่ใช้อักขระสี่ตัวแรกเหมือนกัน ซึ่งหมายถึง abandon สามารถระบุได้ชัดเจนเป็น aban ซึ่งมีประโยชน์สำหรับ compact metal backups
  • Common vocabulary — คำเป็นคำภาษาอังกฤษที่เรียบง่าย ใช้บ่อย ไม่มี jargon, proper nouns หรือคำที่หายากนัก
  • Avoidance of similar words — คำที่อาจสับสนได้ง่าย (เช่น "woman" และ "women") ได้ถูกแยกออกหากเป็นไปได้
  • Character length — คำทั้งหมดมีความยาว 3 ถึง 8 อักขระ

BIP-39 Word Lists ในภาษาอื่น

BIP-39 กำหนด word lists ในเก้าภาษา:

LanguageStatusNotes
EnglishReference standardรองรับอย่างแพร่หลายมากที่สุด
JapaneseStandardizedใช้ katakana; ช่องว่างคือ ideographic (U+3000)
KoreanStandardized
SpanishStandardized
Chinese (Simplified)Standardized
Chinese (Traditional)Standardized
FrenchStandardized
ItalianStandardized
CzechStandardized
PortugueseStandardized

หมายเหตุความเข้ากันได้ที่สำคัญ: mnemonic ที่สร้างด้วย word list ชุดหนึ่งไม่สามารถกู้คืนได้โดยใช้ word list ภาษาอื่น ดัชนีคำแตกต่างกันระหว่างภาษา บันทึกเสมอว่าใช้ภาษาใดในการสร้างแบ็คอัพของคุณ

ขั้นตอนที่ 4: Seed Derivation (PBKDF2)

mnemonic sentence ไม่ได้ถูกใช้โดยตรงเป็น cryptographic key แต่จะต้องผ่าน key stretching โดยใช้ 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
)

ซึ่งจะสร้าง 512-bit seed ที่ทำหน้าที่เป็น input สำหรับ BIP-32 hierarchical deterministic key derivation

คุณสมบัติหลักของ PBKDF2 ใน BIP-39

Key stretching — 2,048 iterations ของ PBKDF2 เพิ่ม computational cost ให้กับ brute-force attacks แม้ว่า 2,048 iterations นั้นเป็นจำนวนน้อยตามมาตรฐานสมัยใหม่ของ password-hashing security หลักมาจาก entropy ของ mnemonic เอง (128 หรือ 256 bits) ไม่ใช่มาจากปัจจัย key-stretching

Passphrase support — salt รวม optional passphrase (the "25th word") หากไม่มี passphrase salt จะเป็นเพียงสตริง "mnemonic" หาก passphrase ถูกให้มา salt จะกลายเป็น "mnemonic" + passphrase ซึ่งหมายความว่าทุก passphrase ที่แตกต่างกันจะสร้าง seed ที่แตกต่างกันโดยสิ้นเชิง — และด้วยเหตุนี้ชุดคีย์และที่อยู่ที่แตกต่างกันโดยสิ้นเชิง — จาก mnemonic เดียวกัน

No validation of passphrase — ไม่เหมือนกับ mnemonic checksum ไม่มี checksum สำหรับ passphrase passphrase ใดๆ นั้นใช้ได้ การป้อน passphrase ผิดไม่ได้ให้ข้อผิดพลาด; มันจะสร้าง wallet ที่แตกต่างกัน (empty) โดยเงียบ นี่คือคุณสมบัติสำหรับ plausible deniability แต่เป็นอันตรายสำหรับผู้ใช้ที่ลืม passphrase

Unicode normalization — mnemonic และ passphrase จะถูก normalize โดยใช้ UTF-8 NFKD (Normalization Form Compatibility Decomposition) ก่อนที่จะส่งไปยัง PBKDF2 ซึ่งหมายความว่า seed derivation จะสอดคล้องกัน ข้ามการใช้งาน ไม่ว่า operating system จะแทนอักขระภายในอย่างไร

ขั้นตอนที่ 5: จาก Seed ถึง Keys (BIP-32)

512-bit seed จาก PBKDF2 ถูกใช้เป็น input สำหรับ BIP-32 (Hierarchical Deterministic Wallets):

  1. seed จะผ่าน HMAC-SHA512 ด้วย key "Bitcoin seed"
  2. 256 bits ด้านซ้ายกลายเป็น master private key
  3. 256 bits ด้านขวากลายเป็น master chain code
  4. ร่วมกัน พวกมันสร้าง master extended private key (xprv)

จากที่นี่ BIP-44 derivation paths กำหนด tree structure ที่ standardized สำหรับการสร้าง coin-specific keys และที่อยู่

ตัวอย่างการคำนวณแบบสมบูรณ์

มาติดตามการทำงานของ BIP-39 ด้วยตัวอย่างที่ลดรูป โดยใช้ 128 bits ของ entropy (12-word mnemonic):

1. สร้าง 128 bits ของ entropy

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

(นี่คือ entropy ทั้งหมดที่เป็นศูนย์ — สำหรับการประกอบตัวอย่างเท่านั้น ไม่ใช้ในทางปฏิบัติ)

2. คำนวณ SHA-256 hash

SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb

3. นำ 4 bits แรกของ hash มาเป็น checksum

ไบต์แรก: 0x37 = 00110111 4 bits แรก: 0011

4. ต่อท้าย checksum ไปยัง entropy

128 bits ของศูนย์ + 0011 = 132 bits รวม

5. แบ่งออกเป็นกลุ่ม 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"

Result: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

นี่คือ test vector ที่รู้จักกันดีสำหรับ all-zeros entropy คำสุดท้ายคือ "about" (ไม่ใช่ "abandon") เพราะ checksum bits

6. สร้าง seed ด้วย PBKDF2

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

ซึ่งจะสร้าง 512-bit seed ที่ใช้สำหรับ BIP-32 derivation

SafeSeed Tool

ใช้ SafeSeed Seed Phrase Generator เพื่อดู BIP-39 ทำงานแบบเรียลไทม์ สร้าง seed phrase และดู entropy, checksum และ word mapping ทันที รัน tool แบบ offline เพื่อความปลอดภัยสูงสุด

การวิเคราะห์ความปลอดภัยของ BIP-39

Entropy Security

สำหรับ 24-word mnemonic (256 bits ของ entropy):

  • search space คือ 2^256 ประมาณ 1.16 x 10^77 ความเป็นไปได้
  • แม้ด้วยอัตรา one trillion (10^12) attempts ต่อวินาที exhaustive search จะใช้เวลาประมาณ 3.67 x 10^57 ปี — นานกว่า age of the universe (1.38 x 10^10 ปี) มาก

สำหรับ 12-word mnemonic (128 bits ของ entropy):

  • search space คือ 2^128 ประมาณ 3.4 x 10^38 ความเป็นไปได้
  • ด้วยอัตรา one trillion attempts ต่อวินาที exhaustive search จะใช้เวลาประมาณ 10^19 ปี

ทั้งสองคำนวณไม่ได้ด้วย classical computing

PBKDF2 Considerations

2,048-iteration PBKDF2 เพิ่มปัจจัยค่าคงที่ให้กับ brute-force attacks แต่ไม่ใช่สิ่งกีดขวาง ความปลอดภัยหลัก นักวิจัยด้านความปลอดภัยบางคนได้สังเกตว่า 2,048 iterations นั้นต่ำเมื่อเทียบกับ key-derivation functions สมัยใหม่ เช่น Argon2 หรือ bcrypt อย่างไรก็ตาม เพราะว่า mnemonic entropy (128 หรือ 256 bits) เป็นปัจจัยหลัก นี่คือข้อกังวลเล็กน้อยในทางปฏิบัติ

Checksum Limitations

checksum จับข้อผิดพลาดในการจดบันทึก ส่วนใหญ่ แต่:

  • มันตรวจสอบ แต่ไม่แก้ไข ข้อผิดพลาด
  • สำหรับ 12-word mnemonics มี checksum bits เพียง 4 bits นั่นหมายความว่าประมาณ 1 ใน 16 random modifications จะผ่าน checksum
  • checksum ไม่ป้องกันการจัดเรียง word ใหม่ที่บังเอิญจะสร้าง valid checksum

Passphrase Risks

คุณสมบัติ passphrase มีความทรงพลัง แต่นำเสนอความเสี่ยง:

  • หากลืม passphrase เงินจะกู้คืนไม่ได้ (ไม่มีกลไก "reset")
  • passphrase ไม่ได้ validated — สตริงใดๆ จะสร้าง valid wallet
  • attacker ที่ได้มา mnemonic แต่ไม่ได้ passphrase ต้อง brute-force passphrase ซึ่งให้ความปลอดภัยเพิ่มเติม ที่เป็นสัดส่วนกับ entropy ของ passphrase

BIP-39 Criticisms

BIP-39 ไม่ได้ไม่มีผู้วิจารณ์ภายในชุมชน Bitcoin development

No Versioning

BIP-39 ไม่รวม version byte ซึ่งหมายความว่า derivation process นั้น fixed ตลอดไป หากการปรับปรุงในอนาคตต้องใช้ key derivation function ที่แตกต่างกัน หรือพารามิเตอร์ที่แตกต่างกัน มันไม่สามารถส่งสัญญาณได้ภายใน mnemonic format นี่คือเหตุที่ wallets บางตัว (โดยเฉพาะ Electrum) ใช้ mnemonic scheme ของตัวเองซึ่งมี versioning

Tight Coupling to Word List

mnemonic นั้นขึ้นอยู่กับ exact word list หากเมื่อใดก็ตาม word list ถูกแก้ไข mnemonics ที่มีอยู่ก็ไม่สามารถกู้คืนได้ word lists ได้ถูก冻결 (frozen) นับตั้งแต่ standardization แต่ความไม่ยืดหยุ่นนี้มองว่าเป็นข้อจำกัดในการออกแบบโดยบางคน

Weak Key Stretching

ตามที่ระบุ 2,048 iterations ของ PBKDF2 ถือว่า weak ตามมาตรฐานสมัยใหม่ แม้ว่านี่จะไม่ส่งผลกระทบต่อความปลอดภัยของ high-entropy mnemonics ก็ตาม แต่มันให้การป้องกันน้อยกว่าสำหรับ shorter หรือ user-chosen passphrases

Electrum's Alternative

Electrum wallet ใช้ mnemonic scheme ของตัวเองซึ่งรวม versioning และไม่ได้ขึ้นอยู่กับ fixed word list Electrum mnemonics ไม่เข้ากันกับ BIP-39 ซึ่งหมายความว่า Electrum seed phrase ไม่สามารถกู้คืนได้ใน BIP-39 wallet และในทางกลับกัน บอกเสมอว่า wallet ของคุณใช้มาตรฐานใด

BIP-39 Implementations

BIP-39 ถูก implement ในเกือบทั้งหมด major wallets:

WalletBIP-39Word CountNotes
LedgerYes24Hardware, secure element
TrezorYes12/24ยังรองรับ SLIP-39 (Shamir)
ColdcardYes24Bitcoin-only hardware
MetaMaskYes12Browser extension
Trust WalletYes12Mobile
ExodusYes12Desktop/mobile
ElectrumNo12ใช้ scheme ของตัวเอง
BlueWalletYes12/24Bitcoin-focused mobile

การทดสอบและการตรวจสอบ

Official Test Vectors

ข้อกำหนด BIP-39 รวม test vectors — ค่า entropy ที่รู้จัก พร้อม mnemonic words และ derived seeds ที่เกี่ยวข้อง สิ่งเหล่านี้ใช้เพื่อตรวจสอบว่า implementations ถูกต้อง

คุณสามารถตรวจสอบการใช้งาน BIP-39 ของ wallet ของคุณโดยตรวจสอบ official test vectors ที่ตีพิมพ์ที่:

การตรวจสอบ Seed Phrase ของคุณ

เพื่อตรวจสอบว่าคุณได้บันทึก seed phrase ของคุณอย่างถูกต้อง:

  1. สร้าง seed phrase บน hardware wallet ของคุณ
  2. เขียนลงไปอย่างระมัดระวัง
  3. Reset hardware wallet เป็นการตั้งค่าจากโรงงาน
  4. กู้คืนจาก seed phrase ที่คุณเขียนลงไป
  5. ตรวจสอบว่าเก่า addresses ที่เหมือนกันนั้นเกิดขึ้น
  6. ยืนยันว่า wallet สามารถลงนาม transactions ได้

กระบวนการนี้ยืนยันว่าแบ็คอัพของคุณถูกต้องและการใช้งาน BIP-39 ของ wallet ทำงานตามที่คาดไว้

FAQ

BIP-39 ย่อมาจากอะไร?

BIP ย่อมาจาก Bitcoin Improvement Proposal ข้อเสนอที่ BIP-39 คือ number 39 ซึ่งกำหนดมาตรฐานสำหรับการสร้าง mnemonic (human-readable) representations ของ cryptographic entropy มันถูกแนะนำในปี 2013 และถูกนำมาใช้โดย virtually all major cryptocurrency wallets

seed phrases 12 คำทั้งหมดเป็น BIP-39 หรือไม่?

ไม่ wallets บางตัว (โดยเฉพาะ Electrum) ใช้ mnemonic scheme ของตัวเองซึ่งแตกต่างจาก BIP-39 แม้ว่าทั้งสองอันจะสร้าง 12-word phrases จาก word lists encoding, word lists และ derivation processes นั้นแตกต่างกัน BIP-39 phrase ไม่สามารถใช้กับ Electrum's scheme ได้และในทางกลับกัน ตรวจสอบเสมอ wallet's documentation ของคุณ