Я разрабатываю схему аутентификации с использованием Bitcoin криптографии, и для лучшей личной жизни я хочу, чтобы получить уникальную пару ключей для каждого домена. Было бы неплохо иметь деривационные пути, как
м / 44 '/ 0' / 0' / 0 / bitcointalk.org
Однако BIP32 спецификация позволяет только целые индексы в пути вывода. Я мог бы сопоставить доменные имена 32-разрядных целых чисел (например, принимать SHA256 доменного имени, а затем использовать только первые 32 бита), но тогда это было бы слишком легко найти коллизий. Другой вариант я думал принимает SHA256 хэш, разделив его на восемь 32-битных целых чисел, а затем строить длинный путь выведения, как м / 44 '/ 0' / 0' / 0 / int1 / int2 / int3 / int4 / int5 / int6 / INT7 / int8. Мне не нравится это либо потому, что такой длинный путь потребует слишком много групповых операций.
Как насчет того, используя строку в качестве индекса вывода? В BIP32, 32-битной сериализация целого индекса сер32(Я) используется в качестве входных данных для HMAC, и, насколько я могу видеть, что нет ничего в спецификации, которая зависит от индекса будучи ровно 32 бита. Это заставляет меня думать, что функции деривации все равно будет работать, если мы кормим в них все биты строки вместо. Например, не закаленный вывод будет выглядеть следующим образом (в BIP32 обозначениях):
I = HMAC-SHA512 (Key = спаритет, Данные = серып(Точка (кпаритет)) || "bitcointalk.org")
Ключи все еще возмещены, потому что они будут восстановлены по требованию, когда пользователь пытается получить доступ к домену.
Существуют ли какие-либо проблемы с этим выводом?