Безопасно ли смешивать BIP32 (secp256k1) и ed25519 для получения ключей Solana в стиле Exodus (m/44/501/0/0/0)?Javascript

Форум по Javascript
Ответить
Anonymous
 Безопасно ли смешивать BIP32 (secp256k1) и ed25519 для получения ключей Solana в стиле Exodus (m/44/501/0/0/0)?

Сообщение Anonymous »

Я реализую деривацию BIP32-Ed25519, и мне нужна поддержка кошелька Exodus.
Согласно их документации, Exodus использует следующий путь деривации для Solana:

Код: Выделить всё

m/44'/501'/0'/0/0
Однако Солана использует кривую ed25519, а путь выше содержит незавершенные (мягкие) шаги деривации (), которые недопустимы для ed25519 (SLIP-0010).
В качестве обходного пути я попробовал следующий подход:
  • Определите путь с помощью реализации secp256k1 BIP32 (

    Код: Выделить всё

    bitcoinjs-lib
    / bip32)
  • Возьмем левые 32 байта () производного закрытого ключа
  • Используйте его в качестве начального значения закрытого ключа ed25519
  • Вычислите открытый ключ ed25519
Вот код:

Код: Выделить всё

import base58 from "bs58";
import { getPublicKey } from "ed25519-hd-key";
import { mnemonicToSeedSync } from "bip39";
import { BIP32Factory } from "bip32";
import { ECPairFactory } from "ecpair";
import * as ecc from "tiny-secp256k1";
import { initEccLib } from "bitcoinjs-lib";

initEccLib(ecc);

const mnemonic = "deposit potato belt enroll space involve sing angry marine shop ostrich midnight";
const seed = mnemonicToSeedSync(mnemonic);
const bip32Factory = BIP32Factory(ecc)
const bip32RootKey = bip32Factory.fromSeed(Uint8Array.from(seed));
const node = bip32RootKey.derivePath("m/44'/501'/0'/0/0");
const IL = node.privateKey.slice(0, 32);
const publicKeyBuffer = getPublicKey(Buffer.from(IL), false);
const privateKey = base58.encode(Buffer.concat([IL, publicKeyBuffer));
const publicKey = base58.encode(rawPublicKey);
Это создает адрес Solana, соответствующий Exodus.
Вопрос:
Является ли этот подход безопасным и действительным или рискованно смешивать производную secp256k1 BIP32 и генерацию ключей ed25519, как это?
Может ли это сломаться в крайних случаях, или это приемлемый способ воспроизвести то, что Как дела у Exodus?
Любая информация о том, как Exodus справляется с этим внутри компании или существует ли стандарт для такого рода «смешивания кривых», была бы очень полезна.

Подробнее здесь: https://stackoverflow.com/questions/797 ... tyle-solan
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»