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.
📅 Ostatnia aktualizacja: 2 sierpnia 2026 r🎧 Słuchaj: ~6 min
Kod kryptograficzny wymaga rygorystycznych testów — błędy mogą mieć katastrofalne skutki. Implementacje postkwantowe zwiększają złożoność dzięki większym rozmiarom kluczy i nowym operacjom matematycznym. W tym przewodniku opisano strategie testowania implementacji Kyber i SPHINCS+, od testów jednostkowych po fuzzing. The Portfel odporny na działanie kwantów SynX wykorzystuje wszystkie te techniki, aby zapewnić poprawność kryptograficzną.
Przegląd strategii testowania
Kompleksowa strategia testowania PQC obejmuje:
Znane testy odpowiedzi (KAT): Sprawdź w oparciu o oficjalne wektory testowe NIST
Testy jednostkowe: Testuj poszczególne funkcje w izolacji
Testy w obie strony: Zweryfikuj szyfrowanie → odszyfruj i podpisz → zweryfikuj cykle
Testy przypadków Edge: Puste wiadomości, maksymalne rozmiary, zniekształcone dane wejściowe
Testy międzyimplementacyjne: Sprawdź interoperacyjność z innymi bibliotekami
Fuzzing: Odkryj awarie i nieoczekiwane zachowania
Testy bocznokanałowe: Sprawdź wykonanie w czasie stałym
Konfigurowanie środowiska testowego
# plik wymagania.txt do testów PQC
pytest>=7.0.0 pytest-xdist>=3.0.0 # Równoległe wykonanie testu
pytest-cov>=4.0.0 # Raportowanie zasięgu
hipoteza>=6.0.0 # Testowanie oparte na właściwościach
liboqs-python>=0.9.0 # Algorytmy PQC
pycryptodome>=3.19.0 # Dodatkowe narzędzia kryptograficzne
# conftest.py – konfiguracja Pytestuimport test
import OK
@pytest.fixturedefkyber_kem():
"""Urządzenie udostępniające instancję Kyber-768 KEM"""powrót oqs.KeyEncapsulation(„Kyber768”)
@pytest.fixturedefsphincs_sig():
"""Urządzenie zapewniające instancję podpisu SPHINCS+-SHAKE-128"""powrót oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”)
@pytest.fixturedefkyber_keypair(kyber_kem):
"""Wstępnie wygenerowana para kluczy Kyber do testów"""
pk = kyber_kem.generate_keypair() sk = kyber_kem.export_secret_key()
powrót pk, sk
@pytest.fixturedefsphincs_keypair(zwieracz_sig):
"""Wstępnie wygenerowana para kluczy SPHINCS+ do testów"""
pk = sphincs_sig.generate_keypair() sk = sphincs_sig.export_secret_key()
powrót pk, sk
Testy znanych odpowiedzi (KAT)
KAT sprawdzają, czy implementacja generuje oczekiwane wyniki dla znanych danych wejściowych:
# test_kats.py - Testy znanych odpowiedziimport test
import json
z ścieżka_biblioteki import Ścieżka
klasaPrzetestujKyberKAT:
„”” Znane testy odpowiedzi dla Kyber-768 Wektory testowe ze specyfikacji NIST ML-KEM „””@pytest.fixturedefkat_wektory(ja):
"""Załaduj oficjalne wektory KAT"""
kat_path = Ścieżka(__plik__).parent / „wektory” / „kyber768_kat.json”z otwórz(kat_path) as f:
powrót json.load(f)
deftest_encapsulation_kat(self, kat_vectors, kyber_kem):
"""Sprawdź, czy enkapsulacja generuje oczekiwany tekst zaszyfrowany"""Do wektor in kat_wektory[„hermetyzacja”]: pk = bajty.fromhex(wektor[„klucz_publiczny”]) oczekiwany_ct = bajtów.odhex(wektor[„zaszyfrowany tekst”]) oczekiwane_ss = bajty.odhex(wektor[„wspólny_sekret”]) ziarno = bajty.odhex(wektor["nasienie"])
# Uwaga: Hermetyzacja deterministyczna wymaga zmodyfikowanej biblioteki# To testuje referencyjny wzorzec implementacji
ct, ss = kyber_kem.encap_secret(pk)
# Sprawdź długość tekstu zaszyfrowanegozapewniać len(ct) == len(expected_ct), „Niedopasowanie długości tekstu zaszyfrowanego”# Sprawdź długość wspólnego sekretuzapewniać len(ss) == len(oczekiwana_ss), „Niedopasowanie długości wspólnego sekretu”deftest_decapsulation_kat(self, kat_vectors, kyber_kem):
"""Sprawdź, czy dekapsulacja przywraca oczekiwany wspólny sekret"""Do wektor in kat_wektory[„dekapsulacja”]: sk = bajty.fromhex(wektor[„sekret_klucz”]) ct = bajty.odhex(wektor[„zaszyfrowany tekst”]) oczekiwane_ss = bajty.odhex(wektor[„wspólny_sekret”]) kem = oqs.KeyEncapsulation(„Kyber768”, sk) ss = kem.decap_secret(ct)
zapewniać ss == oczekiwane_ss, „Niezgodność wspólnego sekretu”klasaTestujSPHINCSPlusKAT:
"""Znane testy odpowiedzi dla SPHINCS+-SHAKE-128s"""@pytest.fixturedefkat_wektory(self): kat_path = Ścieżka(__plik__).parent / „wektory” / „sphincs128s_kat.json”z otwórz(kat_path) as f:
powrót json.load(f)
deftest_signature_verification_kat(samodzielnie, kat_vectors):
"""Sprawdź, czy znane podpisy są prawidłowe"""Do wektor in kat_wektory["weryfikacja"]: pk = bajty.fromhex(wektor[„klucz_publiczny”]) wiadomość = bajty.fromhex(wektor["wiadomość"]) podpis = bajty.odhex(wektor["podpis"]) sig = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”) is_valid = sig.verify(wiadomość, podpis, pk)
zapewniać jest_ważny, f„Nie udało się zweryfikować podpisu KAT”
Testy w obie strony
Testy w obie strony weryfikują podstawową poprawność szyfrowania/odszyfrowywania i podpisywania/weryfikacji:
# test_roundtrip.pyimport test
import tajniki
klasaPrzetestujKyberPodróż w obie strony:
"""Testy w obie strony dla Kyber KEM"""deftest_basic_kem_cycle(self, kyber_kem, kyber_keypair):
"""Podstawowy cykl kapsułkowania → dekapsulacji"""
pk, sk = kyber_keypair
# Hermetyzuj
szyfrogram, wspólna_secret_enc = kyber_kem.encap_secret(pk)
# Dekapsulować
kem_with_sk = oqs.KeyEncapsulation(„Kyber768”, sk) wspólna_secret_dec = kem_with_sk.decap_secret(tekst zaszyfrowany)
zapewniać wspólna_secret_enc == wspólna_secret_dec
@pytest.mark.parametryzuj(„iteracje”, [100, 1000])
deftest_repeated_kem_cycles(self, kyber_kem, kyber_keypair, iteracje):
"""Sprawdź, czy KEM działa spójnie w wielu iteracjach"""
pk, sk = kyber_keypair kem_with_sk = oqs.KeyEncapsulation(„Kyber768”, sk)
Do _ in zakres(iteracje): ct, ss_enc = kyber_kem.encap_secret(pk) ss_dec = kem_with_sk.decap_secret(ct)
zapewniać ss_enc == ss_dec
deftest_różne_keypairs_produce_różne_wyniki(ja, kyber_kem):
"""Sprawdź, czy różne klucze generują różne wspólne sekrety"""# Wygeneruj dwie różne pary kluczy
pk1 = kyber_kem.generate_keypair() sk1 = kyber_kem.export_secret_key() kem2 = oqs.KeyEncapsulation(„Kyber768”) pk2 = kem2.generate_keypair()
# Hermetyzuj do każdego
ct1, ss1 = kyber_kem.encap_secret(pk1) ct2, ss2 = kyber_kem.encap_secret(pk2)
# Wspólne sekrety powinny się różnićzapewniać ss1!= ss2
klasaTestSPHINCSRpodróż w obie strony:
"""Testy w obie strony dla podpisów SPHINCS+"""deftest_basic_sign_verify(self, sphincs_sig, sphincs_keypair):
"""Znak podstawowy → sprawdź cykl"""
pk, sk = sphincs_keypair wiadomość = b„Wiadomość testowa dla podpisu SPHINCS+”# Podpisać
sig_with_sk = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis = sig_with_sk.sign(wiadomość)
# Sprawdź
is_valid = sphincs_sig.verify(wiadomość, podpis, pk)
zapewniać jest_ważny
@pytest.mark.parametryzuj(„rozmiar_wiadomości”, [0, 1, 100, 1000, 10000, 100000])
deftest_różne_wiadomości_rozmiary(self, sphincs_sig, sphincs_keypair, Message_size):
"""Sprawdź, czy podpisywanie działa w przypadku wiadomości o różnych rozmiarach"""
pk, sk = sphincs_keypair wiadomość = sekrety.token_bytes(rozmiar_wiadomości) sig_with_sk = oqs.Signature(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis = sig_with_sk.sign(wiadomość)
zapewniać sphincs_sig.verify(wiadomość, podpis, pk)
deftest_signature_determinizm(self, sphincs_keypair):
„”” Uwaga: SPHINCS+ jest domyślnie losowy. Ta sama wiadomość generuje różne podpisy (oba prawidłowe). „””
pk, sk = sphincs_keypair wiadomość = b„Wiadomość testowa”
sig1 = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk) sig2 = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis1 = sig1.sign(wiadomość) podpis2 = sig2.sign(wiadomość)
# Podpisy się różnią, ale oba się sprawdzajązapewniać podpis1 != podpis2 # Randomizowane
weryfikator = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”)
zapewniać weryfikator.verify(wiadomość, podpis1, pk)
zapewniać weryfikator.verify(wiadomość, podpis2, pk)
Testy przypadków Edge i błędów
# test_edge_cases.pyimport test
klasaPrzetestuj przypadki KyberEdge:
"""Przypadki graniczne i warunki błędów dla Kyber"""deftest_invalid_public_key_length(ja, kyber_kem):
"""Odrzuć zniekształcone klucze publiczne"""z pytest.raises (wyjątek): kyber_kem.encap_secret (b„zbyt_krótki”)
deftest_invalid_ciphertext_length(self, kyber_keypair):
"""Odrzuć zniekształcony tekst zaszyfrowany"""
pk, sk = kyber_keypair kem = oqs.KeyEncapsulation(„Kyber768”, sk)
z pytest.raises (wyjątek): kem.decap_secret (b„nieprawidłowy_zaszyfrowany tekst”)
deftest_wrong_secret_key_fails_decap(self, kyber_kem, kyber_keypair):
"""Dekapsulacja przy użyciu złego klucza powoduje utworzenie innego wspólnego sekretu"""
pk, sk = kyber_keypair
# Hermetyzuj do pk
ct, ss_original = kyber_kem.encap_secret(pk)
# Wygeneruj inną parę kluczy
kem2 = oqs.KeyEncapsulation(„Kyber768”) kem2.generate_keypair() sk2 = kem2.export_secret_key()
# Dekapsuluj przy użyciu złego klucza
kem_wrong = oqs.KeyEncapsulation(„Kyber768”, sk2) ss_wrong = kem_wrong.decap_secret(ct)
# Wspólne sekrety powinny się różnić (bezpieczeństwo IND-CCA)zapewniać ss_original != ss_wrong
klasaPrzetestujSPHINCSEdgeCase:
"""Etui Edge do SPHINCS+"""deftest_pusta_wiadomość(self, sphincs_sig, sphincs_keypair):
"""Podpisywanie pustej wiadomości powinno działać"""
pk, sk = sphincs_keypair wiadomość = b""
sig_with_sk = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis = sig_with_sk.sign(wiadomość)
zapewniać sphincs_sig.verify(wiadomość, podpis, pk)
deftest_modified_message_fails(self, sphincs_sig, sphincs_keypair):
"""Weryfikacja nie powiedzie się, jeśli wiadomość została zmodyfikowana"""
pk, sk = sphincs_keypair wiadomość = b„Oryginalna wiadomość”
sig_with_sk = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis = sig_with_sk.sign(wiadomość)
# Zmodyfikuj wiadomość
zmodyfikowany = b„Zmodyfikowana wiadomość”twierdzić, że nie sphincs_sig.verify(zmodyfikowano, podpis, pk)
deftest_modified_signature_fails(self, sphincs_sig, sphincs_keypair):
"""Weryfikacja nie powiedzie się, jeśli podpis został zmodyfikowany"""
pk, sk = sphincs_keypair wiadomość = b„Wiadomość testowa”
sig_with_sk = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis = sig_with_sk.sign(wiadomość)
# Odwróć trochę podpis
zmodyfikowany_sig = bajtarray(podpis) zmodyfikowany_sig[100] ^= 0x01 zmodyfikowany_sig = bajty(zmodyfikowany_sig)
twierdzić, że nie sphincs_sig.verify(wiadomość, zmodyfikowany_sig, pk)
deftest_wrong_public_key_fails(self, sphincs_sig, sphincs_keypair):
"""Weryfikacja nie powiodła się przy użyciu innego klucza publicznego"""
pk1, sk1 = para kluczy sphincs
# Wygeneruj drugą parę kluczy
sig2 = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”) pk2 = sig2.generate_keypair() wiadomość = b„Wiadomość testowa”# Podpisz za pomocą sk1
sig_with_sk = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk1) podpis = sig_with_sk.sign(wiadomość)
# Sprawdź za pomocą pk2, powinno się nie udaćtwierdzić, że nie sphincs_sig.verify(wiadomość, podpis, pk2)
Testowanie oparte na właściwościach z hipotezą
Testowanie oparte na właściwościach generuje losowe dane wejściowe w celu znalezienia przypadków brzegowych:
# test_properties.pyz hipoteza import biorąc pod uwagę strategie as st., ustawienia
import OK
klasaPrzetestuj właściwości Kyber:
"""Testy właściwościowe dla Kyber"""@dany(st.binary(min_size=0, max_size=10000))
@ustawienia(max_examples=100, ostateczny termin=Brak)
deftest_encap_decap_roundtrip_any_key(self, random_data):
Właściwość „””: dla dowolnej pary kluczy polecenie encap, po którym następuje decap, zawsze tworzy pasujące wspólne klucze tajne „””
kem = oqs.KeyEncapsulation(„Kyber768”) pk = kem.generate_keypair() sk = kem.export_secret_key() ct, ss_enc = kem.encap_secret(pk) kem_dec = oqs.KeyEncapsulation(„Kyber768”, sk) ss_dec = kem_dec.decap_secret(ct)
zapewniać ss_enc == ss_dec
@dany(st.binary(min_size=1, max_size=1088))
@ustawienia(max_examples=100, ostateczny termin=Brak)
deftest_malformed_ciphertext_handled(samotność, śmieci):
Właściwość „””: Zniekształcony tekst zaszyfrowany nie ulega awarii, zgłasza wyjątek lub zwraca nieprawidłowy sekret „””
kem = oqs.KeyEncapsulation(„Kyber768”) kem.generate_keypair() sk = kem.export_secret_key() kem_dec = oqs.KeyEncapsulation(„Kyber768”, sk)
próbować:
# Powinien podnieść lub zwrócić (ukryte odrzucenie)
wynik = kem_dec.decap_secret(śmieci)
# Jeśli wróci, w porządku (ukryte odrzucenie)zapewniać dł.(wynik) == 32 # Nadal zwraca 32-bajtowy sekretz wyjątkiem Wyjątek:
# Podwyżka jest również akceptowalnaprzechodzićklasaTestuj właściwości SPHINCS:
"""Testy właściwościowe dla SPHINCS+"""@dany(st.binary(min_size=0, max_size=50000))
@ustawienia(max_examples=50, ostateczny termin=Brak) # Mniej ze względu na powolne podpisywaniedeftest_sign_verify_any_message(samodzielność, wiadomość):
""" Właściwość: Każdą wiadomość można podpisać i zweryfikować """
sig = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”) pk = sig.generate_keypair() sk = sig.export_secret_key() osoba podpisująca = oqs.Signature(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis = podpis.znak(wiadomość)
zapewniać sig.verify(wiadomość, podpis, pk)
@dany( st.binary(min_size=1, max_size=1000), st.integers(min_value=0, max_value=7855) )
@ustawienia(max_examples=50, ostateczny termin=Brak)
deftest_bit_flip_breaks_signature(self, wiadomość, flip_position):
„”” Właściwość: Odwrócenie dowolnego bitu w podpisie powoduje błąd „””
sig = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”) pk = sig.generate_keypair() sk = sig.export_secret_key() osoba podpisująca = oqs.Signature(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis = podpis.znak(wiadomość)
# Odwróć bit w odpowiedniej pozycji
zmodyfikowany = bajtearray(podpis) byte_pos = pozycja_odwrócenia % len(zmodyfikowana) bit_pos = pozycja_odwrócenia % 8 zmodyfikowany[bajt_pos] ^= (1 << bit_pos)
modified = bytes(modified)
# Weryfikacja powinna zakończyć się niepowodzeniemtwierdzić, że nie sig.verify(wiadomość, zmodyfikowana, pk)
Testy integracyjne dla portfela SynX
# test_synx_wallet.pyimport test
z synx_wallet import SynXHDWallet, kreator transakcji
klasaIntegracja TestSynXWallet:
"""Testy integracyjne portfela odpornego na kwanty SynX"""@pytest.fixturedefportfel_testowy(ja):
"""Utwórz portfel testowy ze znanym mnemonikiem"""
mnemoniczny = "opuścić " * 23 + "sztuka"powrót SynXHDWallet(mnemonik, hasło="test")
deftest_adres_derywacyjny_deterministyczny(samodzielnie, portfel_testowy):
"""Ta sama ścieżka zawsze generuje ten sam adres"""
adres1 = test_wallet.derive_address(0, 0, 0) adres2 = test_wallet.derive_address(0, 0, 0)
zapewniać adres1.adres == adres2.adres
zapewniać adres1.kyber_public == adres2.kyber_public
zapewniać adres1.sphincs_public == adres2.sphincs_public
deftest_różne_ścieżki_różne_adresy(samodzielnie, portfel_testowy):
"""Różne ścieżki dają różne adresy"""
adres1 = test_wallet.derive_address(0, 0, 0) adres2 = test_wallet.derive_address(0, 0, 1) adres3 = test_wallet.derive_address(0, 1, 0) adres4 = test_wallet.derive_address(1, 0, 0) adresy = {addr1.adres, adres2.adres, adres3.adres, adres4.adres}
zapewniać len(adresy) == 4
deftest_transakcji_podpisu(samodzielnie, portfel_testowy):
"""Podpisana transakcja sprawdza się poprawnie"""
nadawca = test_wallet.derive_address(0, 0, 0) odbiorca = test_wallet.derive_address(0, 0, 1)
# Zbuduj i podpisz transakcję
builder = TransactionBuilder(test_wallet) tx = builder.add_output(adres.odbiorcy, 100000000, odbiorca.kyber_public ).build()
# Zweryfikuj podpis
sig = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”)
Do wejście in tx.inputs: is_valid = sig.verify( tx.serialize_for_signing(), inp.sphincs_signature, inp.sphincs_public_key )
zapewniać jest_ważny
Testy wydajności
# test_wydajność.pyimport test
import czas
import statystyka
klasaTesty porównawcze wydajności:
"""Porównania wydajności z wykrywaniem regresji"""# Oczekiwane wartości bazowe wydajności (dostosuj do sprzętu)
KYBER_KEYGEN_MAX_MS = 10 KYBER_ENCAP_MAX_MS = 5 KYBER_DECAP_MAX_MS = 5 SPHINCS_KEYGEN_MAX_MS = 100 SPHINCS_SIGN_MAX_MS = 500 SPHINCS_VERIFY_MAX_MS = 50
def_reper(self, func, iteracje=100):
"""Uruchom funkcję wielokrotnie i zwróć statystyki"""
razy = []
Do _ in zakres(iteracje): start = time.perf_counter() func() upłynął = (time.perf_counter() - start) * 1000 # SM
czasy.dołącz(upłynęły)
powrót {
"mieć na myśli": statystyki.średnia(razy),
"mediana": statystyki.mediana(razy),
„stdev”: statystyki.stdev(razy) if len(razy) > 1 inne 0,
„min”: min(razy),
„maks”: maks. (razy) }
deftest_kyber_keygen_ Performance(ja):
"""Wygenerowanie klucza Kyber w oczekiwanym czasie"""defgenerator kluczy(): kem = oqs.KeyEncapsulation(„Kyber768”) statystyki kem.generate_keypair() = self._benchmark(generator kluczy) print(f"\nKyber keygen: {stats['mean']:.2f}ms (±{stats['stdev']:.2f})")
zapewniać statystyki["mieć na myśli"] < self.KYBER_KEYGEN_MAX_MS
deftest_sphincs_sign_ Performance(ja):
"""Podpisanie SPHINCS+ w oczekiwanym czasie"""
sig = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”) sig.generate_keypair() sk = sig.export_secret_key() wiadomość = b"x" * 256
defpodpisać(): podpisujący = oqs.Podpis(„SPHINCS+-SHAKE-128s-prosty”, sk) podpis.sign(wiadomość) stats = self._benchmark(znak, iteracje=20) # Mniej ze względu na powolność
drukować (f"\nSPHINCS+ znak: {stats['mean']:.2f}ms (±{stats['stdev']:.2f})")
zapewniać statystyki["mieć na myśli"] < self.SPHINCS_SIGN_MAX_MS
Uruchamianie zestawu testów
# Uruchom wszystkie testy z pokryciem
testy pytest/ -v --cov=synx_wallet --cov-report=html
# Wykonuj tylko testy KAT
pytest testy/test_kats.py -v
# Uruchom z wykonaniem równoległym
testy pytest/ -n auto
# Uruchom testy wydajności z danymi wyjściowymi
pytest testy/test_wydajność.py -v -s
Docelowy zasięg testu
The Portfel odporny na działanie kwantów SynX utrzymuje pokrycie testowe na poziomie ponad 95% dla całego kodu kryptograficznego. Ścieżki krytyczne, takie jak weryfikacja podpisu, wymagają 100% pokrycia.
Często zadawane pytania
Gdzie mogę znaleźć oficjalne wektory testowe dla Kyber i SPHINCS+?
NIST zapewnia oficjalne testy znanych odpowiedzi (KAT) dla wszystkich standardowych algorytmów. Urządzenia Kyber KAT znajdują się w załączniku specyfikacji ML-KEM, a urządzenia SPHINCS+ KAT w SLH-DSA. Projekt Open Quantum Safe utrzymuje również zatwierdzone wektory testowe dla implementacji liboqs. The Portfel odporny na działanie kwantów SynX zestaw testów zawiera wektory zgodne z NIST.
Jak przetestować kanały boczne taktowania w kodzie PQC?
Używaj narzędzi takich jak duduct do statystycznej analizy czasu, Valgrind do żądań klientów dotyczących gałęzi zależnych od sekretu i ctgrind do weryfikacji w stałym czasie. Wykonuj operacje z różnymi danymi wejściowymi i mierz wariancję — kod czasu stałego nie powinien wykazywać korelacji czasowej z tajnymi wartościami.
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 469 miliardów dolarów w odsłoniętych adresach Bitcoin są już zagrożone.