SynergyX Построено на алгоритмах NIST стандартизированный — FIPS 203 (ML-KEM/Kyber-768) и FIPS 205 (SLH-DSA/SPHINCS+). Опубликовано 15 января 2026 года. Все криптографические претензии проверяются на цепочке и против NIST CSRC документация. Ноль перед майнингом. Ноль ICO. Ноль ВК. Нулевое распределение учредителей. Жесткий лимит в 77,7 миллиона долларов. Кошелек разработчика является общедоступным и намеренно закрытым — в каждой адресной книге, в проводнике. Ничто из этого не требует от вас доверия человеку.
Руководство по внедрению SPHINCS+: подписи на основе хеша для разработчиков
📅 Последнее обновление: 2 августа 2026 г.🎧 Прослушивание: ~6 мин.
SPHINCS+ (стандартизован как SLH-DSA в FIPS 205) обеспечивает квантово-устойчивые цифровые подписи, основанные исключительно на безопасности хеш-функции. В этом руководстве рассматривается полная интеграция SPHINCS+ для приложений криптовалюты, включая выбор параметров, шаблоны реализации и методы оптимизации. Квантостойкий кошелек SynX использует эти шаблоны для всех подписей транзакций.
Понимание архитектуры SPHINCS+
SPHINCS+ объединяет три криптографических компонента:
WOTS+ (одноразовая подпись Винтерница): Создает одноразовые подписи с использованием хеш-цепочек.
ФОРС (лес случайных подмножеств): Небольшая подпись для привязки сообщений
Гипердерево: Дерево деревьев Меркла, позволяющее использовать множество подписей с помощью одного ключа
Конструкция без сохранения состояния исключает опасное управление состоянием — каждая подпись независима, что делает SPHINCS+ идеальным для криптовалютных кошельков, где резервное копирование и доступ к нескольким устройствам являются обычным явлением.
Выбор набора параметров
SPHINCS+ предлагает несколько наборов параметров, балансирующих безопасность, размер подписи и скорость:
Набор параметров
Безопасность
Подпись
Открытый ключ
Вариант использования
SPHINCS+-SHAKE-128s (SynX)
Уровень 1
7,856 B
32 B
Рекомендуется для большинства криптовалют
SPHINCS+-128f
Уровень 1
17,088 B
32 B
При подписании критическая скорость
SPHINCS+-192с
Уровень 3
16,224 B
48 B
Повышенные требования безопасности
SPHINCS+-192f
Уровень 3
35,664 B
48 B
Высокая безопасность + скорость
SPHINCS+-SHAKE-128ss
Уровень 5
29,792 B
64 B
Максимальная безопасность
SPHINCS+-SHAKE-128sf
Уровень 5
49,856 B
64 B
Максимальная безопасность + скорость
Рекомендация SynX: The Квантостойкий кошелек SynX использует SPHINCS+-SHAKE-128s (SLH-DSA, FIPS 205) для оптимального баланса безопасности NIST уровня 1 и минимального размера подписи. Это обеспечивает эквивалентную безопасность AES-128, сохраняя при этом размер подписей менее 8 КБ — ровно 7856 байт, с 32-байтовым открытым ключом и 64-байтовым закрытым ключом.
Варианты хеш-функции
SPHINCS+ поддерживает два семейства хеш-функций:
Шейк 256: Расширяемая функция вывода на основе SHA-3. Предпочтительно для новых реализаций.
ША-256: Традиционный алгоритм на базе SHA-2. Более широкая поддержка аппаратного ускорения.
The Квантостойкий кошелек SynX использует SHAKE256 для повышения производительности на современных процессорах и повышения безопасности.
Реализация: Питон
# Установка: pip install liboqs-pythonимпортировать ОК
от печатание импортировать Кортеж
импортировать хэшлиб
сортСФИНКСПлюс:
""" Реализация SPHINCS+ (SLH-DSA) для SynX По умолчанию использует SPHINCS+-SHAKE-128 (NIST уровень 1, подписи 7856 байт) """# Доступные варианты
ВАРИАНТЫ = {
"128s": "SPHINCS+-SHAKE-128s-просто",
"128f": "SPHINCS+-SHAKE-128s-просто",
"192s": "SPHINCS+-SHAKE-192s-просто",
"192f": "SPHINCS+-SHAKE-192f-просто",
"256s": "SPHINCS+-SHAKE-256s-просто",
"256f": "SPHINCS+-SHAKE-256f-просто",
}
защита__init__(self, вариант: str = "128s"):
""" Инициализировать SPHINCS+ с указанным вариантом. Аргументы: вариант: один из "128s", "128f", "192s", "192f", "256s", "256f" """if вариант не в сам.ВАРИАНТЫ:
поднимать ValueError(f«Неизвестный вариант: {вариант}») self.variant = вариант self.algorithm = self.VARIANTS[вариант] self._sig = oqs.Signature(self.algorithm)
защитагенерировать_ключевую пару(сам) -> Кортеж[байты, байты]:
""" Создать новую пару ключей SPHINCS+. Возврат: Кортеж из (public_key, secret_key) - public_key: 32/48/64 байт в зависимости от варианта - secret_key: 64/96/128 байт в зависимости от варианта """
public_key = self._sig.generate_keypair() secret_key = self._sig.export_secret_key()
возвращаться открытый_ключ, секретный_ключ
защитазнак(я, сообщение: байты, секретный_ключ: байты) -> байты:
""" Подпишите сообщение с помощью SPHINCS+ Аргументы: message: Подписываемое сообщение (любой длины) secret_key: Секретный ключ подписывающего Возвраты: Байты подписи (от 7856 до 49856 байт в зависимости от варианта) """# Создать экземпляр подписи с секретным ключом
sig = oqs.Signature(self.algorithm, secret_key)
возвращаться sig.sign(сообщение)
защитапроверять(я, сообщение: байты, подпись: байты, public_key: байты) -> bool:
""" Проверка подписи SPHINCS+ Аргументы: сообщение: Исходная подпись сообщения: Подпись для проверки public_key: Открытый ключ подписывающего лица Возвраты: True, если подпись действительна, False в противном случае """возвращаться self._sig.verify(сообщение, подпись, открытый_ключ) @property
защитаpublic_key_size(сам) -> int:
"""Размер открытого ключа в байтах"""возвращаться self._sig.length_public_key @property
защитаsecret_key_size(сам) -> int:
"""Размер секретного ключа в байтах"""возвращаться self._sig.length_secret_key @property
защитаразмер_подписи(сам) -> int:
"""Размер подписи в байтах"""возвращаться self._sig.length_signature
# Пример: подписание транзакциизащитаexample_transaction_signing(): подписавший = СФИНКСПлюс("128s")
# Генерируем пару ключей
pk, sk =signer.generate_keypair() print(f«Открытый ключ: {len(pk)} байт») print(f«Секретный ключ: {len(sk)} байт») print(f«Размер подписи: {signer.signature_size} байт»)
# Создать сообщение о транзакции
транзакция = {
"отправитель": "Sx7nQ3kV9mP2xR5t...",
"получатель": "Sx8pR4kW1nL6yT2u...",
"количество": 100000000,
"платеж": 1000,
"нонс": 42
}
# Хэшируем транзакцию (SPHINCS+ подписывает сообщения произвольной длины# но предварительное хеширование обычно используется для повышения эффективности)
сообщение = str(транзакция).encode() message_hash = hashlib.Blake2b(сообщение, дайджест_размер=32).digest()
# Знак
подпись = Signer.sign(message_hash, sk) print(f«Подпись: {len(signature)} байт»)
# Проверять
is_valid =signer.verify(message_hash, подпись, pk) print(f"Действительно: {is_valid}")
if __имя__ == "__основной__": example_transaction_signing()
The Квантостойкий кошелек SynX использует определенный шаблон для подписи транзакций:
импортировать JSON
импортировать хэшлиб
от классы данных импортировать класс данных, зависимый
от печатание импортировать Необязательный @dataclass
сортSynXTransaction:
"""Структура транзакции SynX"""
отправитель: str получатель: str сумма: int плата: int nonce: int временная метка: int memo: Необязательно[str] = Нет подпись: Необязательно[байты] = Нет public_key: Необязательно[байты] = Нет
сортПодписчик транзакции:
""" Подпишите и подтвердите транзакции SynX с помощью SPHINCS+ """защита__init__(собственный): self.SPHINCS = СФИНКСПлюс("128s")
защита_get_signing_message(сам, Техас: SynXTransaction) -> байты:
""" Создать детерминированное сообщение о подписи из транзакции. Исключает поля подписи и public_key """
tx_dict = asdict(TX)
дель tx_dict['подпись']
дель tx_dict['public_key']
# Ключи сортировки для детерминированной сериализации
сообщение = json.dumps(tx_dict, sort_keys=True).encode()
# Предварительное хеширование для повышения эффективности (SPHINCS+ обрабатывает сообщения любой длины# но предварительное хеширование является традиционным)возвращаться hashlib.Blake2b(сообщение, дайджест_размер=32).digest()
защитаподписываемая_транзакция(сам, Техас: SynXTransaction, secret_key: байты, public_key: байты ) -> SynXTransaction:
""" Подписать транзакцию и вернуть ее с прикрепленной подписью. Аргументы: tx: Транзакция для подписи secret_key: секретный ключ отправителя SPHINCS+ public_key: открытый ключ отправителя SPHINCS+ Возврат: транзакция с подписью и набором public_key """
message = self._get_signing_message(tx) подпись = self.SPHINCS.sign(message, secret_key) tx.signature = подпись tx.public_key = public_key
возвращаться tx
защитапроверить_транзакцию(сам, Техас: SynXTransaction) -> логическое значение:
""" Проверка подписанной транзакции. Аргументы: tx: Транзакция с подписью и открытым_ключом. Возврат: True, если подпись действительна. """ifнет tx.подпись или нет tx.public_key:
возвращаться Ложное сообщение = self._get_signing_message(tx)
возвращаться self.SPHINCS.verify(сообщение, tx.signature, tx.public_key)
# Пример использованиязащитаdemo_transaction_flow(): подписавший = Подписчик транзакциисфинки = СФИНКСПлюс()
# Генерируем пару ключей отправителя
sender_pk, sender_sk = SPHINCS.generate_keypair()
# Создать транзакцию
передача = SynXTransaction(отправитель="Sx7nQ3kV9mP2xR5tW8yB4cF6hJ...", получатель="Sx8pR4kW1nL6yT2uZ9wC3dE5gK...", сумма=50000000, # 0,5 SYX в наименьших единицах
плата=2000, nonce=1, временная метка=1704067200, памятка=«Оплата услуг»
)
# Знак
Signer_tx = Signer.sign_transaction(tx, sender_sk, sender_pk) print(f«Размер подписи: {len(signed_tx.signature)} байт»)
# Проверка (обычно выполняется валидаторами)
is_valid = Signer.verify_transaction(signed_tx) print(f«Транзакция действительна: {is_valid}»)
# Обнаружение взлома
Signed_tx.amount = 100000000 # Попытка изменить
is_tampered = Signer.verify_transaction(signed_tx) print(f«Подделка действительна: {is_tampered}») # ЛОЖЬ
Оптимизация пакетной проверки
Для валидаторов, обрабатывающих множество транзакций, параллельная проверка повышает пропускную способность:
импортировать concurrent.futures
от печатание импортировать Список, Кортеж
сортПакетный верификатор:
""" Эффективная пакетная проверка подписей SPHINCS+ """защита__init__(self, max_workers: int = 4): self.max_workers = max_workers self.signer = Подписчик транзакции()
защитапроверить_пакет(я, транзакции: Список[SynXTransaction] ) -> Список[Кортеж[SynXTransaction, бул]]:
""" Параллельная проверка нескольких транзакций. Аргументы: транзакции: список подписанных транзакций. Возвраты: список кортежей (транзакция, is_valid) """с concurrent.futures.ThreadPoolExecutor(max_workers=self.max_workers) as исполнитель:
# Отправьте все задачи проверки
фьючерсы = {executor.submit(self.signer.verify_transaction, tx): tx
для tx in транзакции }
# Собрать результаты
результаты = []
для будущее in concurrent.futures.as_completed(фьючерсы): tx = фьючерсы[будущее]
пытаться: is_valid = Future.result() results.append((tx, is_valid))
кроме Исключение as е: results.append((tx, False))
возвращаться результаты
защитаfilter_valid(я, транзакции: Список[SynXTransaction] ) -> Список[SynXTransaction]:
"""Возвращать только действительные транзакции"""
результаты = self.verify_batch(транзакции)
возвращаться [TX для Техас, действительно in результаты if действительный]
# Тестимпортировать время
защитаэталонная_проверка(): пакет_верификатор = Пакетный верификатор(max_workers=8)
# Генерация тестовых транзакций
сфинки = СФИНКСПлюс() подписавшийся = Подписчик транзакции() транзакции = []
для i in диапазон (100): pk, sk = SPHINCS.generate_keypair() tx = SynXTransaction( отправитель=f"отправитель_{я}", получатель=f"получатель_{я}", sum=i * 1000, комиссия=100, nonce=i, timestamp=int(time.time()) ) транзакции.append(signer.sign_transaction(tx, sk, pk))
# Тестовая параллельная проверка
start = time.time()Results=batch_verifier.verify_batch(транзакции) истекло = time.time() - начало valid_count = sum(1 для _, действительный in результаты if действительно) print(f«Подтверждено транзакций {len(transactions)} за {elapsed:.2f} с») print(f«Действительно: {valid_count}, Недействительно: {len(транзакции) — valid_count}») print(f«Пропускная способность: {len(транзакции) / истекло:.1f} tx/s»)
Оптимизация размера подписи
В средах с ограниченной полосой пропускания рассмотрите возможность сжатия:
импортировать zlib
защитаcompress_signature(подпись: байты) -> байты:
""" Сжимать подпись SPHINCS+ для передачи. Сигнатуры SPHINCS+ хорошо сжимаются благодаря внутренней структуре """возвращаться zlib.compress(подпись, уровень=6)
защитаdecompress_signature(сжато: байты) -> байты:
"""Распаковать подпись перед проверкой"""возвращаться zlib.decompress(сжатый)
# Проверка степени сжатия
сфинки = СФИНКСПлюс() pk, sk = SPHINCS.generate_keypair() подпись = SPHINCS.sign(b«тестовое сообщение», sk) сжатый = compress_signature(подпись) print(f«Исходное: {len(signature)} байт») print(f"Сжато: {len(compressed)} байт") print(f«Соотношение: {len(сжатый) / len(подпись) * 100:.1f}%»)
# Типичный результат: степень сжатия ~50-60% для SPHINCS+-SHAKE-128.
Примечание по безопасности сжатия
Хотя сжатие снижает пропускную способность, убедитесь, что распаковка происходит перед проверкой, чтобы предотвратить атаки оракула. Никогда не проверяйте сжатые подписи напрямую.
Генерируйте ключи в безопасных средах (по возможности используйте аппаратные модули безопасности)
Никогда не используйте секретные ключи повторно в разных приложениях.
Хранилище секретных ключей
Храните секретные ключи в зашифрованном виде
Используйте защиту памяти для используемых ключей
Надежно стирайте ключи из памяти после подписания
Безопасность реализации
Используйте сравнение в постоянное время для результатов проверки подписи.
Проверьте все входные данные перед криптографическими операциями.
Обрабатывайте ошибки без утечки информации о времени
Часто задаваемые вопросы
Какой набор параметров SPHINCS+ мне следует использовать?
Для большинства криптовалютных приложений SPHINCS+-SHAKE-128s предлагает лучший баланс безопасности (NIST Level 1) и размера подписи (7856 байт). Квантостойкий кошелек SynX использует этот набор параметров и только этот. Другие проекты могут использовать SPHINCS+-SHAKE-128 для более быстрой подписи за счет более крупных подписей (17 088 байт) или наборов 192/256, когда им требуется более широкий запас. У SynX нет — 128-е, вот и вся история.
Как мне обрабатывать большие подписи SPHINCS+ в моем приложении?
Размер для вашего набора параметров. SynX обрабатывает фиксированные 7856 байт на подпись с помощью SPHINCS+-SHAKE-128; количество более крупных наборов NIST составляет 49 856 штук. Используйте сжатие для хранения и передачи, по возможности рассмотрите шаблоны агрегирования сигнатур и обновите схемы базы данных, чтобы использовать поля переменной длины. Квантостойкий кошелек SynX SDK автоматически выполняет эти оптимизации.
SPHINCS+ медленнее, чем ECDSA?
Подписание SPHINCS+ медленнее, чем ECDSA (десятки или тысячи операций в секунду), но проверка происходит достаточно быстро. Для криптовалюты, где подпись происходит нечасто (пользовательские транзакции), а проверка является обычным явлением (валидация), этот компромисс приемлем. Преимущества безопасности подписей на основе хэша оправдывают затраты на производительность.
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.
Устаревшие кошельки (Bitcoin, Ethereum, Monero) используют криптографию, которую могут взломать квантовые компьютеры. Над $250 billion открытые адреса Bitcoin уже находятся под угрозой.