Password-Based Key Derivation Function 2 — детермінована функція з параметрами входу, солі, кількості ітерацій, псевдовипадкової функції та довжини виходу. BIP39 задає конкретний профіль PBKDF2-HMAC-SHA512, а не всі можливі застосування PBKDF2.
Вхід, названий password, — словна фраза в UTF-8 NFKD. Сіль — mnemonic + passphrase, також у UTF-8 NFKD; без passphrase додається порожнє значення. BIP39 вимагає HMAC-SHA512, 2048 ітерацій і 64 байти, тобто 512 бітів виходу. [BIP39 — Mnemonic generation and seed conversion]
PBKDF2 створює перший проміжний результат із парольного входу, солі та індексу вихідного блоку. Наступні результати обчислює тією самою псевдовипадковою функцією з попереднього результату й поєднує значення через XOR. З HMAC-SHA512 блок має 64 байти, тому BIP39 потребує одного блоку. Просто застосувати SHA-512 до тексту 2048 разів недостатньо. [RFC8018 — PBKDF2 construction] [BIP39 — Mnemonic generation and seed conversion]
Однакові нормалізовані входи й параметри дають той самий seed. Довільно збільшити 2048 ітерацій чи змінити функцію під час відновлення — не поліпшення безпеки наявного гаманця: результат більше не відповідає визначеному виведенню BIP39. Переклад слів до іншого словника теж не є нейтральною зміною. [BIP39 — Mnemonic generation and seed conversion]
Ітерації збільшують роботу на одну спробу, але не додають незалежної таємної випадковості. Маючи слова й дані для порівняння гаманця, зловмисник може перевіряти слабкі passphrase офлайн. Вихід із 512 бітів тому не означає захист, еквівалентний 512 бітам ентропії, а 2048 — не універсальна рекомендація для нових систем. [RFC8018 — PBKDF2 construction] [BIP39 — Mnemonic generation and seed conversion]
Checksum BIP39 допомагає виявляти помилки у словах перед використанням. Саме перетворення PBKDF2 відокремлене від генерування й перевірки фрази; воно не підтверджує, що passphrase належить потрібному гаманцю. Далі seed можуть використовувати BIP32 або інші детерміновані методи як наступний крок. [BIP39 — Mnemonic generation and seed conversion]
Публічні вектори BIP39 містять ентропію, слова й очікуваний seed із тестовою passphrase TREZOR. Правильна реалізація повинна відтворити весь вихід і дотримуватися NFKD. Ці відомі входи ніколи не мають бути власною копією для коштів; збіг тесту сам по собі також не перевіряє безпеку всього застосунку. [BIP39 — Mnemonic generation and seed conversion]
Для повної картини прочитайте також BIP 39, BIP39 passphrase, Seed Generation, HD Wallet. На цю статтю також посилаються BIP39 passphrase.