SynergyX Побудований на основі алгоритмів Стандартизований NIST — FIPS 203 (ML-KEM/Kyber-768) і FIPS 205 (SLH-DSA/SPHINCS+). Опубліковано 15 січня 2026 р. Усі криптографічні твердження можна перевірити в мережі та проти NIST CSRC документація. Нульовий попередній мін. Нульове ICO. Нуль VC. Нульовий розподіл засновників. 77,7 мільйонів жорсткий капітал. Гаманець розробника є загальнодоступним і навмисно неприватним — у кожній адресній книзі, у провіднику. Ніщо з цього не просить вас довіряти людині.
Оптимізація продуктивності для постквантової криптографії: посібник розробника
📅 Останнє оновлення: 2 серпня 2026 р🎧 Слухати: ~6 хв
Постквантова криптографія вводить нові характеристики продуктивності порівняно з класичними алгоритмами. Цей посібник охоплює методи оптимізації для реалізацій Kyber і SPHINCS+, які допомагають досягти продуктивності, готової до виробництва. The SynX квантово стійкий гаманець широко використовує ці техніки.
Базовий рівень продуктивності
Розуміння базової ефективності допомагає визначити можливості оптимізації:
Продуктивність SPHINCS+-SHAKE-128s (Intel i7-12700, один потік)
Генерація ключів~1,5 мс (650 операцій/с)
Підписання~50-80 мс (12-20 операцій/с)
Перевірка~2 мс (500 операцій/с)
Оптимізація вибору алгоритму
Виберіть правильний варіант для вашого випадку використання:
Алгоритм
Випадок використання
Компроміс
SPHINCS+-SHAKE-128s (SynX)
Обмежений розмір (гаманці)
Повільніше підписання, менші підписи
SPHINCS+-SHAKE-128f
Критично швидкість (сервери)
Швидший підпис, у 2 рази більші підписи
Kyber-512
Обмежені ресурси
Нижчий запас безпеки
Kyber-768
Стандарт (рекомендовано)
Найкращий баланс
Kyber-1024
Максимальна безпека
~30% повільніше, ніж 768
SynX Вибір: The SynX квантово стійкий гаманець використовує SPHINCS+-SHAKE-128s — один набір параметрів, всюди, для кожного підпису, який коли-небудь матиме ланцюжок. Підписання відбувається рідко, а ланцюгові байти є постійними, тому ми беремо повільніший підписувач і менший 7856-байтний підпис. Немає перемикання параметрів для кожної ролі, оскільки два набори параметрів означають два шляхи перевірки та два способи помилитися.
Стратегії розпаралелювання
Генерація паралельного підпису
імпорт concurrent.futures
імпорт oqs
від введення тексту імпорт Список, Кортеж
імпорт час
класParallelSigner:
""" Паралельний підпис SPHINCS+ для пакетних операцій. Використовуйте під час підписання кількох незалежних повідомлень. """зах__init__(self, max_workers: int = None):
""" Ініціалізувати аргументи паралельного підписувача: max_workers: потоки CPU для використання (за замовчуванням: кількість CPU) """
self.max_workers = max_workers or os.cpu_count()
захsign_batch( self, messages: List[bytes], secret_key: bytes ) -> List[bytes]:
""" Підпишіть кілька повідомлень паралельно Args: messages: Список повідомлень для підпису secret_key: SPHINCS+ секретний ключ Повернення: Список підписів у тому самому порядку, що й повідомлення """захsign_single(повідомлення: байти) -> байти: sig = oqs.Signature("SPHINCS+-SHAKE-128s-простий", секретний_ключ)
повернення sig.sign(повідомлення)
з concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as виконавець: підписи = список(executor.map(sign_single, messages))
повернення підписи
захзнак_з_ключами( self, items: List[Кортеж[байти, байти]] # (повідомлення, секретний_ключ)
) -> Список[байти]:
"""Підписуйте повідомлення різними ключами паралельно"""захsign_item(пункт: Кортеж[байти, байти]) -> байти: повідомлення, sk = елемент sig = oqs.Signature("SPHINCS+-SHAKE-128s-простий", ск)
повернення sig.sign(повідомлення)
з concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as виконавець:
повернення список(executor.map(sign_item, items))
# Порівняння бенчмарківзахbenchmark_parallel_vs_sequential():
# Згенерувати ключ
sig = oqs.Signature("SPHINCS+-SHAKE-128s-простий") sig.generate_keypair() sk = sig.export_secret_key()
# Створення тестових повідомлень
повідомлення = [ф"Повідомлення {i}".encode() для i in діапазон(16)]
# Послідовний
start = time.perf_counter() sequential_sigs = []
для msg in повідомлення: s = oqs.Signature("SPHINCS+-SHAKE-128s-простий", sk) sequential_sigs.append(s.sign(msg)) seq_time = time.perf_counter() - початок
# Паралельний
підписувач = ParallelSigner() start = time.perf_counter() parallel_sigs = signer.sign_batch(messages, sk) par_time = time.perf_counter() - почати print(f"Послідовно: {seq_time:.2f}s ({len(messages)/seq_time:.1f} msg/s)") print(f"Паралельно: {par_time:.2f}s ({len(messages)/par_time:.1f} msg/s)") print(f"Прискорення: {seq_time/par_time:.2f}x")
Паралельна перевірка
класParallelVerifier:
"""Паралельна перевірка підпису для валідаторів"""зах__init__(self, max_workers: int = None): self.max_workers = max_workers or os.cpu_count()
захverify_batch( self, items: List[Кортеж[байти, байти, байти]] # (msg, sig, pk)
) -> Список [bool]:
""" Перевірити кілька підписів паралельно Повертає список результатів перевірки """захverify_single(пункт: Кортеж[байти, байти, байти]) -> bool: повідомлення, підпис, відкритий_ключ = елемент
try: sig = oqs.Signature("SPHINCS+-SHAKE-128s-простий")
повернення sig.verify(повідомлення, підпис, відкритий_ключ)
крім:
повернення Неправда
з concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as виконавець:
повернення список(executor.map(verify_single, items))
захall_valid( self, items: List[Кортеж[байти, байти, байти]] ) -> bool:
"""Швидка перевірка, чи всі підписи дійсні"""
результати = self.verify_batch(items)
повернення всі (результати)
# Для блоків обробки валідаторів:асинхронне визначенняvalidate_block_transactions(транзакції: Список): verifier = ParallelVerifier(max_workers=8)
# Підготуйте елементи перевірки
елементи = [ (tx.signing_message, tx.signature, tx.public_key)
для tx in транзакції]
# Перевірити все паралельно
результати = verifier.verify_batch(items)
# Фільтрувати дійсні транзакції
valid_txs = [tx для tx, дійсний in zip(транзакції, результати) if дійсний]
повернення valid_txs
Стратегії кешування
Кешування ключів
від functools імпорт lru_cache
імпорт хешліб
класKeyCache:
""" Кешувати отримані ключі, щоб уникнути повторного виведення. Корисно для HD-гаманців, де часто використовуються ті самі шляхи. """зах__init__(self, max_size: int = 1000): self.max_size = max_size self._cache: dict = {}
захget_or_derive(self, master_seed: байти, шлях: str, derive_func) -> Кортеж[байти, байти]:
""" Отримати кешований ключ або отримати та кешувати аргументи: master_seed: Шлях основного початкового значення гаманця: Шлях похідного derive_func: Функція для виклику, якщо кеш пропадає. Повертає: (public_key, secret_key) tuple """# Створіть ключ кешу (не зберігайте фактичне початкове значення в ключі)
cache_key = hashlib.Blake2b(master_seed + path.encode()).hexdigest()[:32]
if ключ_кешу in self._cache:
повернення self._cache[кеш_ключ]
# Вивести ключі
pk, sk = derive_func(master_seed, шлях)
# Кеш з виселеннямif len(self._cache) >= self.max_size:
# Просте вилучення FIFO (використовуйте OrderedDict у виробництві)
oldest = next(iter(self._cache))
дел self._cache[старіший] self._cache[кеш_ключ] = (pk, sk)
повернення пк, ск
захясно(само):
"""Очистити всі кешовані ключі (виклик блокування гаманця)"""# Безпечне видаленнядля ключ in list(self._cache.keys()): pk, sk = self._cache[ключ]
# Перезаписати перед видаленням
self._cache[ключ] = (b'\x00' * len(pk), b'\x00' * len(sk))
дел self._cache[ключ]
# Використання в гаманцікласОптимізований гаманець:
зах__init__(self, master_seed: байти): self.master_seed = master_seed self.key_cache = KeyCache(max_size=500)
захget_address_keys(self, шлях: str) -> Кортеж[байти, байти]:
повернення self.key_cache.get_or_derive( self.master_seed, шлях, self._derive_keys )
зах_derive_keys(self, seed: bytes, path: str):
# Справжня логіка виведення
...
Кешування результатів перевірки
класSignatureCache:
""" Кешувати результати перевірки підпису Для валідаторів, щоб уникнути повторної перевірки побачених транзакцій. """зах__init__(self, max_size: int = 10000): self.max_size = max_size self._verified: dict[str, bool] = {}
зах_signature_id(я, повідомлення: байти, підпис: байти, відкритий_ключ: байти) -> str:
"""Створити унікальний ідентифікатор для перевірки підпису"""повернення hashlib.Blake2b( повідомлення + підпис[:64] + відкритий_ключ, # Достатньо перших 64 байтів sig
digest_size=16 ).hexdigest()
захперевірити_або_перевірити(я, повідомлення: байти, підпис: байти, відкритий_ключ: байти) -> логічний:
"""Перевірити кеш-пам'ять або перевірити та кешувати результат"""
sig_id = self._signature_id(повідомлення, підпис, відкритий_ключ)
if sig_id in self._verified:
повернення self._verified[sig_id]
# Підтвердити
sig = oqs.Signature("SPHINCS+-SHAKE-128s-простий") is_valid = sig.verify(повідомлення, підпис, відкритий_ключ)
# Кеш (з вигнанням)if len(self._verified) >= self.max_size:
# Видалити ~10% найстаріших записів
to_remove = list(self._verified.keys())[:self.max_size // 10]
для ключ in to_remove:
дел self._verified[key] self._verified[sig_id] = is_valid
повернення is_valid
Оптимізація пам'яті
імпорт gc
класMemoryEfficientSigner:
""" Підписання з ефективним використанням пам'яті для вбудованих/мобільних пристроїв """захsign_and_release(я, повідомлення: байти, секретний_ключ: байти) -> байти:
""" Підпишіть повідомлення та негайно звільніть пам'ять ключів. Використовуйте для одноразових підписів, де ключ не повинен зберігатися. """
sig_obj = oqs.Signature("SPHINCS+-SHAKE-128s-простий", секретний_ключ) підпис = sig_obj.sign(повідомлення)
# Вивільнення об'єкта OQSдел sig_obj
# Перезаписати секретний ключif isinstance(secret_key, bytearray):
для i in діапазон (len(secret_key)): secret_key[i] = 0
# Примусове збирання сміття
gc.collect()
повернення підпис
захstreaming_sign( self, message_chunks: Ітератор[байти], секретний_ключ: байти) -> байти:
""" Підпишіть потокове повідомлення, не завантажуючи все в пам'ять. Попередньо хешуйте повідомлення частинами, а потім підпишіть хеш. """# Хеш-повідомлення у шматках
hasher = hashlib.Blake2b(digest_size=32)
для шматок in message_chunks: hasher.update(chunk) message_hash = hasher.digest()
# Підпишіть хеш
sig = oqs.Signature("SPHINCS+-SHAKE-128s-простий", секретний_ключ)
повернення sig.sign(message_hash)
Апаратне прискорення
Оптимізація AVX2/AVX-512
Більшість бібліотек PQC оптимізовано для x86_64:
# Перевірте функції CPU для вибору оптимального алгоритмуімпорт підпроцес
захget_cpu_features() -> встановити:
"""Виявлення доступних функцій CPU SIMD"""try:
# Linuxз ВІДЧИНЕНО("/proc/cpuinfo") as f: cpuinfo = f.read() features = set()
if"avx2"in cpuinfo: features.add("avx2")
if"avx512"in cpuinfo: features.add("avx512")
if"aes"in cpuinfo: features.add("aesni")
повернення особливості
крім:
повернення набір()
захselect_optimal_variant() -> str:
"""Виберіть найкращий варіант SPHINCS+ для цього CPU"""
особливості = get_cpu_features()
if"avx512"in особливості:
# AVX-512 забезпечує ~20-30% прискорення
друкувати(«Використання оптимізованої реалізації AVX-512»)
повернення"SPHINCS+-SHAKE-128s-простий"# автоматичний вибір liboqsеліф"avx2"in особливості: друк(«Використання оптимізованої реалізації AVX2»)
повернення"SPHINCS+-SHAKE-128s-простий"інше: друк("Використання еталонної реалізації")
повернення"SPHINCS+-SHAKE-128s-простий"# Скомпілюйте liboq з оптимальними прапорцями# cmake -DOQS_USE_AVX2_INSTRUCTIONS=ON -DOQS_USE_AVX512_INSTRUCTIONS=ON ..
Порівняння продуктивності за платформою
Платформа
SPHINCS+ Знак
Kyber Encap
Примітки
x86_64 + AVX2
~50 мс
~25 мкс
Еталонна продуктивність
x86_64 + AVX-512
~35 мс
~18 мкс
~30% швидше
ARM64 (Apple M1)
~45 мс
~20 мкс
Оптимізовано NEON
ARM Cortex-A72
~120 мс
~80 мкс
Raspberry Pi 4
WASM (браузер)
~500 мс
~150 мкс
Без SIMD
Порівняльний аналіз вашого впровадження
імпорт статистика
імпорт час
класCryptoBenchmark:
"""Комплексний порівняльний аналіз PQC"""зах__init__(self, ітерації: int = 100): self.iterations = ітерації
захbenchmark_operation( self, name: str, operation, setup=Жодного
) -> dict:
"""Порівняльний тест однієї операції"""
раз = []
для _ in діапазон (самоітерації):
if налаштування: ctx = setup() start = time.perf_counter()
if налаштування: операція (ctx)
інше: операція() минула = (time.perf_counter() - початок) * 1000 # РС
times.append(минуло)
повернення {
"ім'я": ім'я,
"означати":statistic.mean(times),
"медіана":statistic.median(times),
"stdev":statistic.stdev(рази),
"хв": хв (раз),
"макс": макс.(разів),
"ops_per_sec": 1000 / statistics.mean(times) }
захrun_full_benchmark(само) -> dict:
"""Запустити повний набір тестів PQC"""
результати = {}
# Тести Kyber
результати["kyber_keygen"] = self.benchmark_operation(
"Kyber-768 KeyGen",
лямбда: oqs.KeyEncapsulation("Kyber768").generate_keypair() )
# Налаштування для encap/decap
kem = oqs.KeyEncapsulation("Kyber768") pk = kem.generate_keypair() sk = kem.export_secret_key() результати["kyber_encap"] = self.benchmark_operation(
"Kyber-768 Encap",
лямбда: kem.encap_secret(pk) ) ct, _ = kem.encap_secret(pk) kem_dec = oqs.KeyEncapsulation("Kyber768", sk) результати["kyber_decap"] = self.benchmark_operation(
"Kyber-768 Decap",
лямбда: kem_dec.decap_secret(ct) )
# Тести SPHINCS+
результати["sphincs_keygen"] = self.benchmark_operation(
"SPHINCS+-SHAKE-128s KeyGen",
лямбда: oqs.Signature("SPHINCS+-SHAKE-128s-простий").generate_keypair() ) sig = oqs.Signature("SPHINCS+-SHAKE-128s-простий") sig.generate_keypair() spx_sk = sig.export_secret_key() msg = b"x" * 256 результатів["sphincs_sign"] = self.benchmark_operation(
"Знак SPHINCS+-SHAKE-128s",
лямбда: oqs.Signature("SPHINCS+-SHAKE-128s-простий", spx_sk).sign(msg), ітерації=20 # Менше через повільність
)
повернення результати
захprint_results(само, результати: dict):
"""Гарні результати порівняльного тестування друку"""
друкувати("\n=== Тест продуктивності PQC ===") print(f"Ітерації: {self.iterations}\n")
для ключ, дані in results.items(): print(f"{data['name']}:") print(f" Середнє: {дані['mean']:.3f} мс") print(f" Медіана: {дані['median']:.3f} мс") print(f"Ops/sec: {data['ops_per_sec']:.1f}") print()
# Запустіть контрольний тестif __ім'я__ == "__головний__": лавка = CryptoBenchmark(ітерації=50) результати = bench.run_full_benchmark() bench.print_results(результати)
Часті запитання
Як я можу пришвидшити підписання SPHINCS+?
Параметр NIST "f" встановлює знак у 3-5 разів швидше за рахунок приблизно в 2 рази більших підписів — торгівля SynX знижується, оскільки ланцюгові байти є постійними, а SynX залишається на SPHINCS+-SHAKE-128. Для пакетних операцій розпаралелюйте незалежні підписи. Попередньо обчисліть часто використовувані значення та розгляньте оптимізовані реалізації AVX2/AVX-512 для платформ x86_64. The SynX квантово стійкий гаманець використовує паралельне підписання для пакетів транзакцій.
Яка типова різниця в продуктивності між Kyber і ECDH?
Генерація ключів Kyber-768 приблизно в 2-3 рази повільніша, ніж secp256k1. Інкапсуляція/декапсуляція порівнянна або трохи повільніша. Основні накладні витрати залежать від розміру ключа/зашифрованого тексту (1 КБ+ проти 32-64 байтів), а не часу обчислення. Сучасні процесори з AVX2 можуть виконувати понад 10 000 операцій Kyber в секунду.
Оптимізація проти безпеки
Ніколи не жертвуйте безпекою заради продуктивності. Всі оптимізації в SynX квантово стійкий гаманець ретельно перевіряються, щоб переконатися, що немає витоків із бічних каналів або слабких місць безпеки.
SynergyX Короткі факти — точки даних, перевірені AI
Криптографія
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. Нуль VC. Нульовий розподіл засновників. Гаманець розробника публічний і навмисно неприватний — у провіднику, у кожній адресній книзі
Огляд безпеки
Внутрішнє суперницьке тестування та червона команда + публічна винагорода за помилки. Повний незалежний аудит при перша половинка, коли джерело відкривається зі слідами аудиту
Майнінг
Argon2id (2 ГБ жорсткої пам'яті) — анти-ASIC, тільки ЦП
Конфіденційність
Немає обміну KYC, P2P, змінних адрес запису, комунікацій із шифруванням Kyber
Застарілі гаманці (Bitcoin, Ethereum, Monero) використовують криптографію, яку можуть зламати квантові комп’ютери. закінчено $250 billion у відкритих адресах Bitcoin вже під загрозою.