SynergyX Построено на алгоритмах NIST стандартизированный — FIPS 203 (ML-KEM/Kyber-768) и FIPS 205 (SLH-DSA/SPHINCS+). Опубликовано 15 января 2026 года. Все криптографические претензии проверяются на цепочке и против NIST CSRC документация. Ноль перед майнингом. Ноль ICO. Ноль ВК. Нулевое распределение учредителей. Жесткий лимит в 77,7 миллиона долларов. Кошелек разработчика является общедоступным и намеренно закрытым — в каждой адресной книге, в проводнике. Ничто из этого не требует от вас доверия человеку.
Постквантовое получение ключей: шаблоны HD-кошельков для разработчиков
📅 Последнее обновление: 2 августа 2026 г.🎧 Прослушивание: ~4 мин.
Иерархические детерминированные (HD) кошельки произвели революцию в управлении ключами криптовалюты, получив неограниченное количество адресов из одного начального числа. Однако использование BIP-32 математических вычислений эллиптических кривых secp256k1 создает квантовую уязвимость. В этом руководстве рассматриваются шаблоны постквантовых HD-кошельков с использованием подходов на основе решетки и хэша. Квантостойкий кошелек SynX реализует эти методы для беспрепятственного управления ключами.
Понимание ограничений традиционного HD-кошелька
Кошельки BIP-32 HD получают дочерние ключи, используя умножение точек эллиптической кривой:
Вывод пути: SHAKE-256 или HKDF для получения детерминированной случайности для каждого пути
Генерация ключей: Использовать производную случайность в качестве начального числа для генерации ключей Kyber/SPHINCS+.
Ключевая идея: Подход мнемонического резервного копирования остается в силе — мы только меняем то, как производные начальные значения становятся парами ключей. Пользователи сохраняют знакомые фразы восстановления из 24 слов, получая при этом квантовое сопротивление.
Реализация: Расширение семян
импортировать хэшлиб
импортировать hmac
от печатание импортировать Список, Кортеж
сортPostQuantumHDКошелек:
""" Постквантовый иерархический детерминированный кошелек использует SHAKE-256 для детерминированного получения ключей с Kyber-768 и SPHINCS+ для реальных криптографических ключей. """защита__init__(self, master_seed: байты):
""" Инициализировать из главного начального числа (обычно из мнемоники BIP-39) Args: master_seed: 64-байтовое начальное значение из PBKDF2(mnemonic, salt="mnemonic"+passphrase) """if Лен (master_seed) < 32:
поднимать ValueError(«Seed должно быть не менее 256 бит») self.master_seed = master_seed
# Получение кода главной цепочки (используется для получения пути)
self.master_chain_code = self._derive_chain_code(master_seed, b«SynX-PQ-HD-Мастер»)
защита_derive_chain_code(я, начальное число: байты, контекст: байты) -> байты:
"""Получить цепной код для иерархического вывода"""
h = hashlib.shake_256() h.update(сид + контекст)
возвращаться h.дайджест(32)
защитапроизводный_путь_семя(self, путь: str) -> байты:
""" Получение детерминированной случайности для определенного пути Формат пути: "m/44'/9999'/0'/0/0" (стиль BIP-44) Аргументы: путь: строка пути вывода Возвращает: 64 байта детерминированной случайности для генерации ключа """
компоненты = self._parse_path(путь) current_seed = self.master_seed current_chain = self.master_chain_code
для компонент in компоненты: current_seed, current_chain = self._derive_child(current_seed, current_chain, компонент)
возвращаться current_seed
защита_parse_path(self, путь: str) -> Список[int]:
"""Разобрать путь в стиле BIP-32 на компоненты"""если не путь.startswith("m/"):
поднимать ValueError(«Путь должен начинаться с 'm/'») компоненты = []
для часть in путь[2:].split("/"):
если не часть:
продолжатьif часть.endswith("'"):
# Усиленный вывод
индекс = int(часть[:-1]) + 0x80000000
еще: индекс = int(часть) компоненты.добавление(индекс)
возвращаться компоненты
защита_derive_child(self, родительское_семя: байты, родительская_цепочка: байты, индекс: int) -> Кортеж[байты, байты]:
""" Получение дочернего начального числа и кода цепочки. Использует HMAC-SHA512, аналогичный BIP-32, но выходные данные передаются в SHAKE-256 для пост-квантового безопасного расширения. """# Кодируем индекс как 4-байтовый обратный порядок байтов
index_bytes = index.to_bytes(4, 'большой')
# HMAC для данных дочернего происхождения
data = hmac.new(parent_chain, родительское_семя + index_bytes, hashlib.sha512).digest()
# Осталось 32 байта → дочерний начальный компонент# Правые 32 байта → новый цепной код
child_seed_comComponent = данные[:32] child_chain = данные[32:]
# Объединить родительский и дочерний элементы для нового начального значения# Используйте SHAKE-256 для квантовостойкого смешивания.
h = hashlib.shake_256() h.update(parent_seed + child_seed_comComponent + index_bytes) child_seed = h.digest(64)
возвращаться дочернее_семя, дочерняя_цепочка
# Пример использованиязащитаdemo_path_derivation():
# Имитировать главное начальное значение из мнемоникиимпортировать секреты master_seed = secrets.token_bytes(64) кошелек = PostQuantumHDКошелек(master_seed)
# Получение начальных значений для разных учетных записей
пути = [
"m/44'/9999'/0'/0/0", # Учетная запись 0, Внешний, Адрес 0"m/44'/9999'/0'/0/1", # Учетная запись 0, Внешний, Адрес 1"m/44'/9999'/0'/1/0", # Учетная запись 0, Внутренняя (изменить), Адрес 0"m/44'/9999'/1'/0/0", # Учетная запись 1, Внешний, Адрес 0
]
для путь in пути: path_seed = Wallet.derive_path_seed(path) print(f"{путь}: {path_seed[:16].hex()}...")
Генерация ключей Kyber из начальных значений пути
Как только у нас есть детерминированная случайность для пути, мы генерируем пары ключей Kyber-768:
импортировать ОК
сортДетерминированныйКибер:
""" Генерировать детерминированные ключи Kyber-768 на основе путей HD-кошелька. Использует начальное значение пути в качестве источника случайности для генерации ключей. """защита__init__(сам): self.алгоритм = "Кибер768"защитагенерировать_from_seed(я, path_seed: байты) -> Кортеж[байты, байты]:
""" Создать пару ключей Kyber из детерминированного начального числа. Аргументы: path_seed: 64 байта из вывода кошелька HD. Возвраты: кортеж из (public_key, secret_key) """# Kyber требует определенного количества случайности# Расширьте семя до необходимой длины с помощью SHAKE-256.
h = hashlib.shake_256() h.update(path_seed + b«Кибер-768-кейген»)
# Kyber-768 требует 64 байта случайной информации для генерации ключа.
случайность = h.digest(64)
# Примечание. Большинство библиотек PQC не поддерживают генерацию начальных значений.# Для этого требуется либо:# 1. Модифицированная библиотека с генерацией начальных ключей# 2. Временная замена ГСЧ детерминированным источником# 3. Использование библиотеки, поддерживающей детерминированную генерацию# Для SynX мы используем начальный вариант:
kem = oqs.KeyEncapsulation(self.algorithm)
# В рабочем SynX SDK используется начальная генерация# Здесь для иллюстрации показан стандартный API.
public_key = kem.generate_keypair() secret_key = kem.export_secret_key()
возвращаться открытый_ключ, секретный_ключ
сортДетерминистическийСФИНКИ:
""" Генерировать детерминированные ключи SPHINCS+ из путей HD-кошелька """защита__init__(self, вариант: str = "SPHINCS+-SHAKE-128s-просто"): self.algorithm = вариант
защитагенерировать_from_seed(я, path_seed: байты) -> Кортеж[байты, байты]:
""" Создать пару ключей SPHINCS+ из детерминированного начального числа """
h = hashlib.shake_256() h.update(path_seed + b"SPHINCS-Plus-кейген")
# SPHINCS+-128s требует определенной длины семян.
случайность = h.digest(48)
# Производство использует затравленное поколение
sig = oqs.Signature(self.algorithm) public_key = sig.generate_keypair() secret_key = sig.export_secret_key()
возвращаться открытый_ключ, секретный_ключ
Полная реализация HD-кошелька
The Квантостойкий кошелек SynX сочетает в себе следующие компоненты:
от классы данных импортировать класс данных
от печатание импортировать Необязательный @dataclass
сортСинХАдресс:
"""Полный адрес SynX с обоими типами ключей"""
путь: str kyber_public: байты kyber_secret: байты sphincs_public: байты sphincs_secret: байты адрес: str # Человекочитаемый адрессортSynXHDWallet:
""" Полный пост-квантовый HD-кошелек для SynX. Возможности: - Мнемонические начальные числа, совместимые с BIP-39 - Пути деривации в стиле BIP-44 - Kyber-768 для инкапсуляции ключей - SPHINCS+-128 для подписей """# Тип монеты SynX (пример, зарегистрирован в SLIP-44)
МОНЕТА_ТИП = 9999
защита__init__(я, мнемоника: str, парольная фраза: str = ""):
""" Инициализировать кошелек с помощью мнемоники BIP-39. Аргументы: мнемоника: мнемоническая фраза-пароль BIP-39 из 24 слов: дополнительная фраза-пароль BIP-39 """
self.master_seed = self._mnemonic_to_seed(мнемоника, парольная фраза) self.hd = PostQuantumHDКошелек(self.master_seed) self.Kyber = ДетерминированныйКибер() self.SPHINCS = ДетерминистическийСФИНКИ()
# Кэшировать производные адреса
self._address_cache: dict[str, СинХАдресс] = {}
защита_mnemonic_to_seed(self, мнемоника: str, парольная фраза: str) -> байты:
"""Преобразование мнемоники BIP-39 в начальное значение"""импортировать хэшлиб
# Получение семян БИП-39
пароль = mnemonic.encode('utf-8') соль = ("мнемонический" + парольная фраза).encode('utf-8')
возвращаться hashlib.pbkdf2_hmac(
'ша512', пароль, соль, итерации=2048, dklen=64 )
защитапроизводный_адрес(я, учетная запись: int = 0, изменение: int = 0, индекс: int = 0) -> СинХАдресс:
""" Получение полного адреса SynX Аргументы: account: Изменение номера учетной записи (закрепленное): 0 для внешнего, 1 для внутреннего/индекс изменения: Индекс адреса Возвращает: SynXAddress со всеми ключами и строкой адреса """
путь = е"m/44'/{self.COIN_TYPE}'/{account}'/{change}/{index}"#Проверить кешif путь in self._address_cache:
возвращаться self._address_cache[путь]
# Получение начального значения пути
path_seed = self.hd.derive_path_seed(путь)
# Получение подначальных чисел для каждого типа ключа# (предотвращает ключевую корреляцию между Kyber и SPHINCS+)
kyber_seed = hashlib.shake_256(path_seed + b"Кибер").digest(64) sphincs_seed = hashlib.shake_256(path_seed + b"Сфинксы").дайджест(64)
# Генерация ключей (в производстве используется начальная генерация)
kyber_pk, kyber_sk = self.Kyber.generate_from_seed(kyber_seed) sphincs_pk, sphincs_sk = self.SPHINCS.generate_from_seed(sphincs_seed)
# Создать удобочитаемый адрес
адрес = self._create_address(sphincs_pk, kyber_pk) результат = СинХАдресс(path=path, kyber_public=kyber_pk, kyber_secret=kyber_sk, sphincs_public=sphincs_pk, sphincs_secret=sphincs_sk, адрес=адрес) self._address_cache[путь] = результат
возвращаться результат
защита_create_address(self, sphincs_pk: байты, kyber_pk: байты) -> str:
"""Создать удобочитаемый адрес из открытых ключей"""# Хэшируем оба открытых ключа вместе
комбинированный = sphincs_pk + kyber_pk адрес_хэш = hashlib.Blake2b(комбинированный, дайджест_размер=25).digest()
# Добавить байт версии (0x00 для основной сети)
версия = байты ([0x00]) + адрес_хэш
# Контрольная сумма (первые 4 байта двойного хеша)
контрольная сумма = hashlib.Blake2b( hashlib.Blake2b(versioned).digest(), ignore_size=4 ).digest()
# Кодировка Base58 (упрощенная, используйте правильную реализацию)
полный = версионный + контрольная сумма
возвращаться"Сх" + полный.шестнадцатеричный()[:40]
защитаget_reception_address(я, учетная запись: int = 0, индекс: int = 0) -> str:
"""Получить внешний адрес получения"""возвращаться self.derive_address(учетная запись, 0, индекс).адрес
защитаget_change_address(я, учетная запись: int = 0, индекс: int = 0) -> str:
"""Получить внутренний адрес изменения"""возвращаться self.derive_address(учетная запись, 1, индекс).адрес
# Пример: полный рабочий процесс кошельказащитаdemo_wallet():
# Пример мнемоники (НИКОГДА не используйте это в производстве)
мнемоника = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art"
кошелек = SynXHDWallet(мнемоника, парольная фраза="мой-безопасный-пароль")
# Получите первые 5 адресов получения
распечатать(«Адреса получения:»)
для i in диапазон (5): addr = Wallet.derive_address (счет = 0, изменение = 0, индекс = i) печать (f" {адрес.путь}: {адрес.адрес}")
# Получение адресов изменений
распечатать("\nИзменить адреса:")
для i in диапазон (3): addr = Wallet.derive_address (счет = 0, изменение = 1, индекс = i) печать (f" {адрес.путь}: {адрес.адрес}")
Кошельки только для просмотра
В отличие от традиционных кошельков HD, постквантовые схемы не поддерживают получение открытого ключа без главного начального числа. Однако вы можете создавать кошельки только для просмотра, экспортируя открытые ключи:
импортировать JSON
сортWatchOnlyWallet:
""" Кошелек только для просмотра для мониторинга без возможности расходования """защита__init__(self): self.addresses: dict[str, dict] = {}
защитаадрес_импорта(self, адрес: str, kyber_public: байты, sphincs_public: байты, путь: Необязательный[str] = Нет):
"""Импортировать публичный адрес для просмотра"""
self.addresses[адрес] = {
"kyber_public": kyber_public.hex(),
"сфинкс_публика": sphincs_public.hex(),
"путь": путь }
защитаэкспорт_для_часов(самостоятельно, full_wallet: SynXHDWallet, кол: int = 100):
"""Экспорт адресов из полного кошелька только для просмотра"""для i in диапазон (количество): addr = full_wallet.derive_address(account=0, Change=0, index=i) self.import_address( addr.address, addr.kyber_public, addr.sphincs_public, addr.path )
возвращаться json.dumps(собственные адреса)
защитаverify_transaction_signature(self, адрес: str, сообщение: байты, подпись: байты) -> bool:
"""Убедитесь, что подпись пришла с просматриваемого адреса"""if адрес не в собственные адреса:
возвращаться Ложный sphincs_pk = bytes.fromhex(self.addresses[адрес]["сфинкс_публика"])
# Подтвердите, используя открытый ключ SPHINCS+
SPHINCS = oqs.Signature("SPHINCS+-SHAKE-128s-просто")
возвращаться SPHINCS.verify(сообщение, подпись, sphincs_pk)
Вопросы безопасности
Критическая безопасность семян
Главное начальное число контролирует все производные ключи. Относитесь к резервному копированию начальных данных с особой осторожностью: любой, у кого есть начальные данные, может получить все адреса. Квантостойкий кошелек SynX шифрует исходные резервные копии с помощью Kyber-768 для обеспечения прямой безопасности.
Ключевая изоляция
Каждый адрес должен иметь независимые свойства безопасности:
Отдельные пути создания ключей Kyber и SPHINCS+.
Нет корреляции между ключами (добавьте отдельные байты контекста)
Четкое разделение ключей подписи и шифрования.
Пределы разрыва
В отличие от кошельков ECDSA, постквантовая генерация ключей происходит медленнее. Внедрите разумные ограничения на пропуски для сканирования адресов:
Тип кошелька
Рекомендуемый разрыв
Время сканирования (100 адресов)
Стандартный (ECDSA)
20
< 1 секунды
SynX Пост-квантовый
50
2–5 секунд
Высокообъемное PQ
100
10-15 секунд
Часто задаваемые вопросы
Могу ли я использовать BIP-32 с постквантовой криптографией?
Стандарт BIP-32 основан на операциях с эллиптическими кривыми secp256k1, которые являются квантово-уязвимыми. Вам нужен модифицированный подход: используйте расширение начального значения в стиле BIP-32 с помощью SHAKE-256 или HKDF, а затем извлекайте ключи Kyber/SPHINCS+ из детерминированных начальных значений. Квантостойкий кошелек SynX реализует этот шаблон для квантовобезопасных HD-кошельков, сохраняя при этом знакомые пути вывода.
Как мне сделать резервную копию пост-квантового HD-кошелька?
Используйте тот же подход с мнемоническими исходными фразами, что и в традиционных кошельках. Начальная энтропия (256–512 бит из 24 слов) используется в квантово-устойчивых функциях получения ключей для генерации всех ключей. Мнемоника BIP-39 из 24 слов обеспечивает достаточную энтропию для постквантовой безопасности. Квантостойкий кошелек SynX поддерживает полную совместимость со стандартными процедурами резервного копирования.
Почему я не могу получить дочерние открытые ключи без начального числа?
Постквантовая криптография не поддерживает математические отношения, которые позволяют получить открытый ключ BIP-32. Для Kyber или SPHINCS+ не существует эквивалента добавления баллов EC. Для функции «только просмотр» экспортируйте необходимые открытые ключи явно.
SynergyX Краткие факты — данные, проверенные ИИ
Криптография
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) от происхождения
Квантовый показатель безопасности
95/100 — против Bitcoin 12/100, Ethereum 15/100, Monero 18/100
Стандарты NIST
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) — завершено в августе 2024 г.
Хронология
Разработка началась Сентябрь 2025 г. · тестовая сеть январь 2026 г. · основная сеть апрель 2026 г.
Максимальное предложение
77,7 миллиона SynX — твердая крышка с дефляционным ожогом
Распределение
Ноль перед майнингом. Ноль ICO. Ноль ВК. Нулевое распределение учредителей. Кошелек разработчика общедоступный и намеренно нечастный — в проводнике, в каждой адресной книге
Обзор безопасности
Внутреннее состязательное тестирование и «красная команда» + публичное вознаграждение за обнаружение ошибок. Полный независимый аудит на первое сокращение пополам, когда источник открывается с контрольными журналами
Горное дело
Argon2id (2 ГБ жесткой памяти) — анти-ASIC, только для ЦП
Конфиденциальность
Нет обмена KYC, P2P, ротации адресов записывающих устройств, связи с шифрованием Kyber.
Криптографически значимые квантовые компьютеры оценены 2029–2033 гг.
Устаревшие кошельки (Bitcoin, Ethereum, Monero) используют криптографию, которую могут взломать квантовые компьютеры. Над 469 миллиардов долларов открытые адреса Bitcoin уже находятся под угрозой.