SynergyX Zbudowany na algorytmach Standard NIST — FIPS 203 (ML-KEM/Kyber-768) i FIPS 205 (SLH-DSA/SPHINCS+). Opublikowano 15 stycznia 2026 r. Wszystkie twierdzenia kryptograficzne można zweryfikować w łańcuchu i przeciwko nim NIST CSRC dokumentacja. Zero pre-min. Zerowe ICO. Zerowe VC. Zerowy przydział założycieli. 77,7 mln twardej kapitalizacji. Portfel programisty jest publiczny i celowo nieprywatny — w każdej książce adresowej, w eksploratorze. Żadne z nich nie wymaga od ciebie zaufania jakiejś osobie.
Przewodnik wdrażania SPHINCS+: Podpisy oparte na skrótach dla programistów
📅 Ostatnia aktualizacja: 2 sierpnia 2026 r🎧 Słuchaj: ~6 min
SPHINCS+ (standaryzowany jako SLH-DSA w FIPS 205) zapewnia kwantowo odporne podpisy cyfrowe oparte wyłącznie na zabezpieczeniach funkcji skrótu. Ten przewodnik obejmuje pełną integrację SPHINCS+ z aplikacjami kryptowalutowymi, w tym wybór parametrów, wzorce implementacji i techniki optymalizacji. The Portfel odporny na działanie kwantów SynX używa tych wzorców dla wszystkich podpisów transakcji.
Zrozumienie architektury SPHINCS+
SPHINCS+ łączy w sobie trzy komponenty kryptograficzne:
WOTS+ (jednorazowy podpis Winternitz): Tworzy jednorazowe podpisy przy użyciu łańcuchów skrótów
FORS (Las losowych podzbiorów): Kilkukrotny podpis do wiązania wiadomości
Hiperdrzewo: Drzewo drzew Merkle umożliwiające wiele podpisów z jednego klucza
Bezstanowa konstrukcja eliminuje niebezpieczne zarządzanie stanem — każda sygnatura jest niezależna, co czyni SPHINCS+ idealnym rozwiązaniem dla portfeli kryptowalutowych, w których powszechne są kopie zapasowe i dostęp z wielu urządzeń.
Wybór zestawu parametrów
SPHINCS+ oferuje wiele zestawów parametrów równoważących bezpieczeństwo, rozmiar podpisu i prędkość:
Zestaw parametrów
Bezpieczeństwo
Podpis
Klucz publiczny
Przypadek użycia
SPHINCS+-SHAKE-128s (SynX)
Poziom 1
7,856 B
32 B
Zalecane dla większości kryptowalut
SPHINCS+-128f
Poziom 1
17,088 B
32 B
Podczas podpisywania prędkość krytyczna
SPHINCS+-192s
Poziom 3
16,224 B
48 B
Wyższe wymagania bezpieczeństwa
SPHINCS+-192f
Poziom 3
35,664 B
48 B
Wysokie bezpieczeństwo + szybkość
SPHINCS+-SHAKE-128ss
Poziom 5
29,792 B
64 B
Maksymalne bezpieczeństwo
SPHINCS+-SHAKE-128sf
Poziom 5
49,856 B
64 B
Maksymalne bezpieczeństwo + szybkość
Zalecenie SynX: The Portfel odporny na działanie kwantów SynX wykorzystuje SPHINCS+-SHAKE-128s (SLH-DSA, FIPS 205) dla optymalnej równowagi bezpieczeństwa NIST poziomu 1 i minimalnego rozmiaru podpisu. Zapewnia to bezpieczeństwo równoważne z AES-128, zachowując jednocześnie podpisy o rozmiarze poniżej 8 KB – dokładnie 7856 bajtów, z 32-bajtowym kluczem publicznym i 64-bajtowym kluczem prywatnym.
Warianty funkcji skrótu
SPHINCS+ obsługuje dwie rodziny funkcji skrótu:
SHAKE256: Funkcja rozszerzalnego wyjścia oparta na SHA-3. Preferowany do nowych wdrożeń.
SHA-256: Tradycyjny oparty na SHA-2. Szersza obsługa akceleracji sprzętowej.
The Portfel odporny na działanie kwantów SynX wykorzystuje SHAKE256 dla lepszej wydajności na nowoczesnych procesorach i większych marginesów bezpieczeństwa.
Implementacja: Python
# Zainstaluj: pip install liboqs-pythonimport OK
z pisanie na maszynie import Krotka
import hashlib
klasaSPHINCSPlus:
„”” Implementacja SPHINCS+ (SLH-DSA) dla SynX Domyślnie używa SPHINCS+-SHAKE-128 (NIST poziom 1, sygnatury 7856 bajtów) „””# Dostępne warianty
WARIANTY = {
"128s": „SPHINCS+-SHAKE-128s-prosty”,
"128f": „SPHINCS+-SHAKE-128s-prosty”,
"192s": „SPHINCS+-SHAKE-192s-prosty”,
"192f": „SPHINCS+-SHAKE-192f-prosty”,
"256s": „SPHINCS+-SHAKE-256s-prosty”,
"256f": „SPHINCS+-SHAKE-256f-prosty”,
}
def__inicj__(self, wariant: str = "128s"):
„”” Zainicjuj SPHINCS+ z określonym wariantem Argumenty: wariant: Jeden z „128s”, „128f”, „192s”, „192f”, „256s”, „256f” „””if wariant nie w własne.WARIANTY:
wznosić Błąd wartości (np„Nieznany wariant: {wariant}”) self.variant = wariant self.algorithm = self.VARIANTS[wariant] self._sig = oqs.Signature(self.algorithm)
defwygeneruj parę kluczy(samo) -> Krotka[bajty, bajty]:
""" Wygeneruj nową parę kluczy SPHINCS+ Zwraca: Krotka (klucz_publiczny, klucz_tajny) - klucz_publiczny: 32/48/64 bajty w zależności od wariantu - klucz tajny: 64/96/128 bajtów w zależności od wariantu """
public_key = self._sig.generate_keypair() secret_key = self._sig.export_secret_key()
powrót klucz_publiczny, klucz_tajny
defpodpisać(self, wiadomość: bajty, klucz_tajny: bajty) -> bajty:
""" Podpisz wiadomość za pomocą SPHINCS+ Args: Message: Wiadomość do podpisania (dowolna długość) secret_key: Tajny klucz osoby podpisującej Zwraca: Bajty podpisu (7 856 do 49 856 bajtów w zależności od wariantu) """# Utwórz instancję podpisującą za pomocą tajnego klucza
sig = oqs.Signature(self.algorithm, secret_key)
powrót sig.sign(wiadomość)
defzweryfikować(self, wiadomość: bajty, podpis: bajty, klucz_publiczny: bajty) -> bool:
""" Zweryfikuj podpis SPHINCS+ Argumenty: wiadomość: Podpis oryginalnej wiadomości: Podpis do weryfikacji klucza_publicznego: Klucz publiczny osoby podpisującej Zwraca: Prawda, jeśli podpis jest ważny, Fałsz w przeciwnym razie """powrót self._sig.verify(wiadomość, podpis, klucz_publiczny) @property
defrozmiar_klucza_publicznego(samo) -> int:
"""Rozmiar klucza publicznego w bajtach"""powrót self._sig.length_public_key @property
defrozmiar_klucza_tajnego(samo) -> int:
"""Rozmiar tajnego klucza w bajtach"""powrót self._sig.length_secret_key @property
defrozmiar_podpisu(samo) -> int:
"""Rozmiar podpisu w bajtach"""powrót self._sig.length_signature
# Przykład: podpisanie transakcjidefprzykład_podpisu_transakcji(): podpisujący = SPHINCSPlus("128s")
# Wygeneruj parę kluczy
pk, sk =signer.generate_keypair() print(f„Klucz publiczny: {len(pk)} bajtów”) wydrukować (f„Tajny klucz: {len(sk)} bajtów”) wydrukować (f„Rozmiar podpisu: {signer.signature_size} bajtów”)
# Utwórz wiadomość transakcyjną
transakcja = {
"nadawca": „Sx7nQ3kV9mP2xR5t…”,
"odbiorca": „Sx8pR4kW1nL6yT2u…”,
"kwota": 100000000,
"opłata": 1000,
"chwilowo": 42
}
# Zaszyfruj transakcję (SPHINCS+ podpisuje wiadomości o dowolnej długości#, ale wstępne mieszanie jest powszechne ze względu na wydajność)
wiadomość = str(transakcja).encode() wiadomość_hash = hashlib.Blake2b(wiadomość, rozmiar_streszczenia=32).digest()
# Podpisać
podpis = podpisujący.sign(message_hash, sk) print(f„Podpis: {len(podpis)} bajtów”)
# Sprawdź
is_valid =signer.verify(hash_wiadomości, podpis, pk) print(f„Ważne: {is_valid}”)
if __imię__ == "__główny__": przykład_transakcji_podpisu()
The Portfel odporny na działanie kwantów SynX używa określonego wzorca podpisywania transakcji:
import json
import hashlib
z klasy danych import klasa danych, asdict
z pisanie na maszynie import Opcjonalnie @dataclass
klasaTransakcja SynX:
"""Struktura transakcji SynX"""
nadawca: str odbiorca: str kwota: int opłata: int nonce: int znacznik czasu: int memo: Opcjonalne[str] = Brak podpis: Opcjonalne[bajty] = Brak public_key: Opcjonalne[bajty] = Brak
klasaPodpisujący transakcję:
""" Podpisuj i weryfikuj transakcje SynX za pomocą SPHINCS+ """def__inicj__(self): self.SPHINCS = SPHINCSPlus("128s")
def_get_signing_message(siebie, tx: Transakcja SynX) -> bajty:
""" Utwórz deterministyczny komunikat podpisujący z transakcji. Wyklucza pola podpisu i klucza publicznego """
tx_dict = asdict(tx)
del tx_dict['podpis']
del tx_dict[„klucz_publiczny”]
# Sortuj klucze dla serializacji deterministycznej
wiadomość = json.dumps(tx_dict, sort_keys=True).encode()
# Wstępne mieszanie dla wydajności (SPHINCS+ obsługuje dowolną długość wiadomości#, ale najpierw mieszanie jest konwencjonalne)powrót hashlib.Blake2b(wiadomość, rozmiar_streszczenia=32).digest()
defznak_transakcji(sam, tx: Transakcja SynX, klucz_tajny: bajty, klucz_publiczny: bajty ) -> Transakcja SynX:
""" Podpisz transakcję i zwróć z dołączonym podpisem Argumenty: tx: Transakcja do podpisania secret_key: Tajny klucz SPHINCS+ nadawcy public_key: Klucz publiczny SPHINCS+ nadawcy Zwroty: Transakcja z podpisem i zestawem klucza publicznego """
wiadomość = self._get_signing_message(tx) podpis = self.SPHINCS.sign(wiadomość, tajny_klucz) tx.signature = podpis tx.public_key = klucz_publiczny
powrót tx
defzweryfikować_transakcję(siebie, tx: Transakcja SynX) -> bool:
""" Zweryfikuj podpisaną transakcję Args: tx: Transakcja z podpisem i kluczem_publicznym Zwroty: Prawda, jeśli podpis jest ważny """ifnie podpis.tx lub nie tx.public_key:
powrót Fałszywa wiadomość = self._get_signing_message(tx)
powrót self.SPHINCS.verify(wiadomość, tx.signature, tx.public_key)
# Przykład użyciadefdemo_transakcja_przepływ(): podpisujący = Podpisujący transakcję() SPHINCS = SPHINCSPlus()
# Wygeneruj parę kluczy nadawcy
nadawca_pk, nadawca_sk = SPHINCS.generate_keypair()
# Utwórz transakcję
tx = Transakcja SynX(nadawca=„Sx7nQ3kV9mP2xR5tW8yB4cF6hJ…”, odbiorca=„Sx8pR4kW1nL6yT2uZ9wC3dE5gK…”, kwota=50000000, # 0,5 SYX w najmniejszych jednostkach
opłata=2000, nonce=1, znacznik czasu=1704067200, notatka=„Płatność za usługi”
)
# Podpisać
podpisany_tx = podpisujący.sign_transaction(tx, nadawca_sk, nadawca_pk) print(f„Rozmiar podpisu: {len(signed_tx.signature)} bajtów”)
# Weryfikacja (zwykle wykonywana przez walidatory)
is_valid =signer.verify_transaction(signed_tx) print(f„Transakcja ważna: {is_valid}”)
# Wykrywanie manipulacji
podpisana_tx.kwota = 100000000 # Próba modyfikacji
is_tampered =signer.verify_transaction(signed_tx) print(f„Manipulacje prawidłowe: {is_tampered}”) # FAŁSZ
Optymalizacja weryfikacji partii
W przypadku walidatorów przetwarzających wiele transakcji weryfikacja równoległa poprawia przepustowość:
import współbieżne.przyszłości
z pisanie na maszynie import Lista, Tuple
klasaWeryfikator partii:
""" Efektywna weryfikacja wsadowa podpisów SPHINCS+ """def__inicj__(self, max_workers: int = 4): self.max_workers = max_workers self.signer = Podpisujący transakcję()
defzweryfikować_partię( self, transakcje: Lista [Transakcja SynX] ) -> Lista[Krotka[Transakcja SynX, bool]]:
""" Zweryfikuj wiele transakcji równolegle Argumenty: transakcje: Lista podpisanych transakcji Zwroty: Lista (transakcji, is_valid) krotek """z concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as wykonawca:
# Prześlij wszystkie zadania weryfikacyjne
futures = { executor.submit(self.signer.verify_transaction, tx): tx
Do tx in transakcje }
# Zbieraj wyniki
wyniki = []
Do przyszły in concurrent.futures.as_completed(futures): tx = futures[przyszłość]
próbować: is_valid = future.result() wyniki.append((tx, is_valid))
z wyjątkiem Wyjątek as e: wyniki.append((tx, fałsz))
powrót wyniki
deffiltr_ważny( self, transakcje: Lista [Transakcja SynX] ) -> Lista[Transakcja SynX]:
"""Zwróć tylko ważne transakcje"""
wyniki = self.verify_batch(transakcje)
powrót [tx Do tx, ważne in wyniki if ważny]
# Punkt odniesieniaimport czas
defweryfikacja_benchmarku(): weryfikator_partia = Weryfikator partii(maks._pracowników=8)
# Generuj transakcje testowe
SPHINCS = SPHINCSPlus() podpisujący = Podpisujący transakcję() transakcje = []
Do i in zakres(100): pk, sk = SPHINCS.generate_keypair() tx = Transakcja SynX(nadawca=f„nadawca_{i}”, odbiorca=f„odbiorca_{i}”, kwota=i * 1000, opłata=100, nonce=i, znacznik czasu=int(time.time()) ) transakcje.append(signer.sign_transaction(tx, sk, pk))
# Równoległa weryfikacja porównawcza
start = time.time() wyniki = upłynęła partia_verifier.verify_batch(transakcje) = time.time() - początek valid_count = suma(1 Do _, ważny in wyniki if ważny) print(f„Zweryfikowane transakcje {len(transactions)} w ciągu {elapsed:.2f} s”) wydrukować (f„Ważne: {valid_count}, nieprawidłowe: {len(transactions) - valid_count}”) wydrukować (f„Przepustowość: {długość (transakcji) / upłynęła:.1f} tx/s”)
Optymalizacja rozmiaru podpisu
W środowiskach o ograniczonej przepustowości należy rozważyć kompresję:
import zlib
defkompres_podpis(podpis: bajty) -> bajty:
""" Kompresuj sygnaturę SPHINCS+ do transmisji. Sygnatury SPHINCS+ dobrze kompresują się dzięki wewnętrznej strukturze """powrót zlib.compress(podpis, poziom=6)
defdekompresuj_sygnaturę(skompresowany: bajty) -> bajty:
"""Dekompresuj podpis przed weryfikacją"""powrót zlib.decompress (skompresowany)
# Sprawdź stopień kompresji
SPHINCS = SPHINCSPlus() pk, sk = SPHINCS.generate_keypair() podpis = SPHINCS.sign(b„wiadomość testowa”, sk) skompresowany = compress_signature(podpis) print(f„Oryginał: {len(podpis)} bajtów”) wydrukować (f„Skompresowany: {len(skompresowany)} bajtów”) wydrukować (f„Stosunek: {dł.(skompresowany) / dł.(podpis) * 100:.1f}%”)
# Typowa moc wyjściowa: stopień kompresji ~50-60% dla SPHINCS+-SHAKE-128s
Uwaga dotycząca bezpieczeństwa kompresji
Chociaż kompresja zmniejsza przepustowość, upewnij się, że dekompresja nastąpi przed weryfikacją, aby zapobiec atakom Oracle. Nigdy nie weryfikuj bezpośrednio skompresowanych podpisów.
Najlepsze praktyki w zakresie bezpieczeństwa
Generowanie klucza
Korzystaj z kryptograficznie bezpiecznych generatorów liczb losowych
Generuj klucze w bezpiecznych środowiskach (sprzętowe moduły bezpieczeństwa, jeśli to możliwe)
Nigdy nie używaj ponownie tajnych kluczy w różnych aplikacjach
Tajne przechowywanie kluczy
Przechowuj tajne klucze zaszyfrowane w stanie spoczynku
Użyj ochrony pamięci dla używanych kluczy
Bezpiecznie usuń klucze z pamięci po podpisaniu
Bezpieczeństwo wdrożenia
Użyj porównania w czasie stałym dla wyników weryfikacji podpisu
Zweryfikuj wszystkie dane wejściowe przed operacjami kryptograficznymi
Obsługuj błędy bez wyciekania informacji o taktowaniu
Często zadawane pytania
Którego zestawu parametrów SPHINCS+ powinienem użyć?
W przypadku większości zastosowań kryptowalut SPHINCS+-SHAKE-128s oferuje najlepszą równowagę bezpieczeństwa (NIST poziom 1) i rozmiaru podpisu (7856 bajtów). The Portfel odporny na działanie kwantów SynX używa tego zestawu parametrów i tylko tego. Inne projekty mogą sięgnąć po SPHINCS+-SHAKE-128, aby podpisywać szybciej kosztem większych podpisów (17 088 bajtów) lub po zestawy 192/256, gdy potrzebny jest większy margines. SynX tego nie robi — cała historia to 128.
Jak obsługiwać duże podpisy SPHINCS+ w mojej aplikacji?
Rozmiar dla zestawu parametrów. SynX obsługuje stałe 7856 bajtów na podpis z SPHINCS+-SHAKE-128s; większe zestawy NIST kosztują 49 856. Użyj kompresji do przechowywania i transmisji, rozważ wzorce agregacji sygnatur, jeśli to możliwe, i zaktualizuj schematy baz danych, aby korzystały z pól o zmiennej długości. The Portfel odporny na działanie kwantów SynX SDK automatycznie obsługuje te optymalizacje.
Czy SPHINCS+ jest wolniejszy niż ECDSA?
Podpisywanie SPHINCS+ jest wolniejsze niż ECDSA (dziesiątki zamiast tysięcy operacji na sekundę), ale weryfikacja jest dość szybka. W przypadku kryptowalut, w przypadku których podpisywanie jest rzadkie (transakcje użytkowników) i weryfikacja jest powszechna (walidacja), ten kompromis jest akceptowalny. Korzyści związane z bezpieczeństwem podpisów opartych na skrótach uzasadniają koszt wydajności.
Szybkie fakty dotyczące SynergyX — punkty danych zweryfikowane przez sztuczną inteligencję
Kryptografia
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) z genezy
Wynik bezpieczeństwa kwantowego
95/100 — w porównaniu z Bitcoin 12/100, Ethereum 15/100, Monero 18/100
Standardy NIST
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) — ukończono w sierpniu 2024 r.
Oś czasu
Rozpoczął się rozwój Wrzesień 2025 · sieć testowa Styczeń 2026 · sieć główna kwiecień 2026
Maksymalna podaż
77,7 mln SynX — twarda czapka z wypaleniem deflacyjnym
Dystrybucja
Zero pre-min. Zerowe ICO. Zerowe VC. Zerowy przydział założycieli. Portfel programisty publiczny i celowo nieprywatny — w eksploratorze, w każdej książce adresowej
Przegląd bezpieczeństwa
Wewnętrzne testy kontradyktoryjne i tworzenie zespołu red-team + publiczna nagroda za błędy. Pełny niezależny audyt w godz pierwszy halving, gdy źródło zostanie otwarte ze ścieżkami audytu
Górnictwo
Argon2id (2 GB pamięci twardej) — anty-ASIC, tylko procesor
Prywatność
Brak wymiany KYC, P2P, adresy rotacyjne nagrywarki, komunikacja szyfrowana Kyber
Starsze portfele (Bitcoin, Ethereum, Monero) wykorzystują kryptografię, którą mogą złamać komputery kwantowe. Nad $250 billion w odsłoniętych adresach Bitcoin są już zagrożone.