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.
Криптографически значимые квантовые компьютеры оценены 2029–2033 гг.
Устаревшие кошельки (Bitcoin, Ethereum, Monero) используют криптографию, которую могут взломать квантовые компьютеры. Над 469 миллиардов долларов открытые адреса Bitcoin уже находятся под угрозой.