Создать мнемоническую фразу из window.crpyto.subtle.generateKey
Я разрабатываю веб-сайт с сквозным шифрованием чата. Для этого я генерирую закрытые ключи, используя функцию window.crypto.subtle.generateKey, предоставленную в веб-криптографическом API.
Я хочу, чтобы пользователь запомнил или сохранил мнемоническую фразу, как мы используем в кошельках Ethereum, вместо ключа шифрования.
Есть ли способ сгенерировать мнемоническую фразу из закрытого ключа, который генерируется функцией window.crypto.subtle.generateKey, или есть какой-либо другой способ реализовать это?
заранее спасибо
2 ответа
Есть ли способ сгенерировать мнемоническую фразу из закрытого ключа
Все наоборот. Набор закрытых ключей можно определить из каждой мнемонической фразы, но вы не можете определить мнемонику из закрытого ключа.
Широко используемый стандарт - БИП-39. Несмотря на то, что он был впервые представлен как протокол улучшения биткойнов, многие кошельки Ethereum также используют его. Например, вы можете найти его JS-реализацию в этом пакете .
Примечание: вы ищете функции
mnemonicToSeed()
а также
mnemonicToSeedSync()
. Хотя на первый взгляд может показаться, что
entropyToMnemonic()
переводит закрытый ключ во фразу, это неправда - числа энтропии - это просто позиции слов в списке слов, а не байты закрытого ключа.
То, что вы хотите, как вы это описываете, - это закодировать ваш закрытый ключ в мнемонические слова. Что вы вполне можете, с простейшим примером: разбить ключ на фрагменты по n бит и сопоставить каждый фрагмент со списком слов, состоящим из 2 ^ n слов.
Хотите ли вы этого на самом деле для своих общих целей, это другой вопрос.
Я также хотел бы расширить ответ Петра Хейды, который сначала сбил меня с толку, но теперь я понимаю.
Петр использует определение «закрытый ключ» в другом контексте, чем в вопросе. Петр имеет в виду «закрытые ключи» с точки зрения протокола биткойн, где мнемоника используется не в качестве кодировки для закрытых ключей, а для создания начального числа, которое затем может быть использовано для детерминированной генерации любого количества ключей (BIP-0032). , так что такие сгенерированные ключи могут быть сгенерированы повторно при использовании того же начального числа, которое, в свою очередь, может быть сгенерировано повторно из мнемоники. В этом протоколе определена мнемоника для начального числа, а начальное значение для мнемонического — нет, потому что протокол этого никогда не делает. Он только генерирует мнемоники из энтропии, а затем генерирует семя из мнемоники.
Но в вашем случае вы можете просто передать ему свой «закрытый ключ» (как вы его определили) как ввод «энтропии» в