SynergyX Basierend auf den Algorithmen NIST standardisiert — FIPS 203 (ML-KEM/Kyber-768) und FIPS 205 (SLH-DSA/SPHINCS+). Veröffentlicht am 15. Januar 2026. Alle kryptografischen Behauptungen sind in der Kette und gegen sie überprüfbar NIST CSRC Dokumentation. Null vor der Mine. Null ICO. Null VC. Keine Gründerzuteilung. 77,7 Millionen Hardcap. Die Entwickler-Wallet ist öffentlich und bewusst nicht privat – in jedem Adressbuch, im Explorer. Nichts davon verlangt von Ihnen, einer Person zu vertrauen.
Leistungsoptimierung für Post-Quantum-Kryptographie: Entwicklerhandbuch
📅 Letzte Aktualisierung: 2. August 2026🎧 Hören: ~6 Min
Die Post-Quanten-Kryptographie führt im Vergleich zu klassischen Algorithmen neue Leistungsmerkmale ein. In diesem Leitfaden werden Optimierungstechniken für Kyber- und SPHINCS+-Implementierungen behandelt, die Ihnen dabei helfen, eine produktionsreife Leistung zu erzielen. Der SynX quantenresistente Geldbörse nutzt diese Techniken ausgiebig.
Leistungsbasislinie
Das Verständnis der Basisleistung hilft bei der Identifizierung von Optimierungsmöglichkeiten:
SPHINCS+-SHAKE-128s Leistung (Intel i7-12700, Single Thread)
Schlüsselgenerierung~1,5 ms (650 Operationen/Sek.)
Unterzeichnung~50–80 ms (12–20 Operationen/Sek.)
Überprüfung~2 ms (500 Operationen/Sek.)
Optimierung der Algorithmusauswahl
Wählen Sie die passende Variante für Ihren Anwendungsfall:
Algorithmus
Anwendungsfall
Abtausch
SPHINCS+-SHAKE-128s (SynX)
Größenbeschränkt (Geldbörsen)
Langsameres Signieren, kleinere Signaturen
SPHINCS+-SHAKE-128f
Geschwindigkeitskritisch (Server)
Schnelleres Signieren, 2x größere Signaturen
Kyber-512
Ressourcenbeschränkt
Geringere Sicherheitsmarge
Kyber-768
Standard (empfohlen)
Beste Balance
Kyber-1024
Maximale Sicherheit
~30 % langsamer als 768
SynX-Auswahl: Der SynX quantenresistente Geldbörse verwendet SPHINCS+-SHAKE-128s – ein Parametersatz, überall, für jede Signatur, die die Kette jemals enthalten wird. Das Signieren erfolgt selten und Kettenbytes sind dauerhaft. Daher verwenden wir den langsameren Signierer und die kleinere Signatur mit 7.856 Bytes. Kein Parameterwechsel pro Rolle, da zwei Parametersätze zwei Überprüfungspfade und zwei Möglichkeiten, etwas falsch zu machen, bedeuten.
Parallelisierungsstrategien
Parallele Signaturgenerierung
Import gleichzeitige.Futures
Import oqs
aus Tippen Import Liste, Tupel
Import Zeit
KlasseParallelSigner:
„““ Paralleles SPHINCS+-Signieren für Batch-Vorgänge. Verwendung beim Signieren mehrerer unabhängiger Nachrichten. „““def__init__(self, max_workers: int = None):
„““ Parallele Signierer-Argumente initialisieren: max_workers: Zu verwendende CPU-Threads (Standard: CPU-Anzahl) „““
self.max_workers = max_workers or os.cpu_count()
defsign_batch( self, message: List[bytes], Secret_key: bytes ) -> List[bytes]:
„““ Mehrere Nachrichten parallel signieren. Argumente: Nachrichten: Liste der zu signierenden Nachrichten. Secret_key: SPHINCS+-Geheimschlüssel. Rückgabe: Liste der Signaturen in derselben Reihenfolge wie die Nachrichten. „““defsign_single(Nachricht: Bytes) -> Bytes: sig = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“, geheimer_Schlüssel)
zurückkehren sig.sign(Nachricht)
mit concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as Executor: Signaturen = Liste(executor.map(sign_single, Nachrichten))
zurückkehren Unterschriften
defsign_with_keys( self, items: List[Tupel[Bytes, Bytes]] # (Nachricht, Secret_Key)
) -> Liste[Bytes]:
„“„Nachrichten mit unterschiedlichen Schlüsseln parallel signieren““defsign_item(Artikel: Tupel[Bytes, Bytes]) -> Bytes: Nachricht, sk = Element sig = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“, sk)
zurückkehren sig.sign(Nachricht)
mit concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as Testamentsvollstrecker:
zurückkehren list(executor.map(sign_item, items))
# Benchmark-Vergleichdefbenchmark_parallel_vs_sequential():
# Schlüssel generieren
sig = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“) sig.generate_keypair() sk = sig.export_secret_key()
# Testnachrichten erstellen
Nachrichten = [f„Nachricht {i}“.kodieren() für i in Bereich(16)]
# Sequentiell
start = time.perf_counter() sequence_sigs = []
für Nachricht in Nachrichten: s = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“, sk) sequence_sigs.append(s.sign(msg)) seq_time = time.perf_counter() - start
# Parallel
Unterzeichner = ParallelSigner() start = time.perf_counter() parallel_sigs = signer.sign_batch(messages, sk) par_time = time.perf_counter() - start print(f„Sequentiell: {seq_time:.2f}s ({len(messages)/seq_time:.1f} msg/s)“) drucken(f„Parallel: {par_time:.2f}s ({len(messages)/par_time:.1f} msg/s)“) drucken(f„Beschleunigung: {seq_time/par_time:.2f}x“)
Parallele Überprüfung
KlasseParallelVerifier:
„Parallele Signaturüberprüfung für Validatoren“def__init__(self, max_workers: int = None): self.max_workers = max_workers or os.cpu_count()
defüberprüfen_batch( self, items: List[Tupel[Bytes, Bytes, Bytes]] # (msg, sig, pk)
) -> Liste[bool]:
„““ Mehrere Signaturen gleichzeitig überprüfen Gibt eine Liste der Überprüfungsergebnisse zurück „““defüberprüfen_single(Artikel: Tupel[Bytes, Bytes, Bytes]) -> bool: Nachricht, Signatur, public_key = item
versuchen: sig = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“)
zurückkehren sig.verify(Nachricht, Signatur, öffentlicher_Schlüssel)
außer:
zurückkehren FALSCH
mit concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as Testamentsvollstrecker:
zurückkehren list(executor.map(verify_single, items))
defall_valid( self, items: List[Tupel[Bytes, Bytes, Bytes]] ) -> bool:
„“Schnellüberprüfung, ob alle Unterschriften gültig sind““
Ergebnisse = self.verify_batch(items)
zurückkehren alle(Ergebnisse)
# Für Validatoren, die Blöcke verarbeiten:asynchrone Defvalidieren_block_transaktionen(Transaktionen: Liste): Verifier = ParallelVerifier(max_workers=8)
# Verifizierungselemente vorbereiten
items = [ (tx.signing_message, tx.signature, tx.public_key)
für tx in Transaktionen ]
# Alles parallel überprüfen
Ergebnisse = verifier.verify_batch(items)
# Filtern Sie gültige Transaktionen
valid_txs = [tx für tx, gültig in zip(Transaktionen, Ergebnisse) if gültig]
zurückkehren valid_txs
Caching-Strategien
Schlüssel-Caching
aus Funktionstools Import lru_cache
Import Hashlib
KlasseSchlüsselcache:
„““ Abgeleitete Schlüssel zwischenspeichern, um wiederholte Ableitung zu vermeiden. Nützlich für HD-Wallets, bei denen häufig auf dieselben Pfade zugegriffen wird. „““def__init__(self, max_size: int = 1000): self.max_size = max_size self._cache: dict = {}
defget_or_derive( self, master_seed: bytes, path: str, derive_func ) -> Tupel[Bytes, Bytes]:
„““ Zwischengespeicherten Schlüssel abrufen oder ableiten und zwischenspeichern. Argumente: master_seed: Wallet-Master-Seed-Pfad: Ableitungspfad derive_func: Funktion zum Aufrufen bei Cache-Fehler. Rückgabe: (public_key, Secret_key) Tupel „““# Cache-Schlüssel erstellen (den tatsächlichen Startwert nicht im Schlüssel speichern)
cache_key = hashlib.Blake2b(master_seed + path.encode()).hexdigest()[:32]
if Cache-Schlüssel in self._cache:
zurückkehren self._cache[cache_key]
# Schlüssel ableiten
pk, sk = derive_func(master_seed, path)
# Cache mit Räumungif len(self._cache) >= self.max_size:
# Einfache FIFO-Räumung (OrderedDict in der Produktion verwenden)
älteste = next(iter(self._cache))
del self._cache[oldest] self._cache[cache_key] = (pk, sk)
zurückkehren pk, sk
defklar(selbst):
„“Alle zwischengespeicherten Schlüssel löschen (Aufruf bei Wallet-Sperre)““# Sicheres Löschenfür Schlüssel in list(self._cache.keys()): pk, sk = self._cache[key]
# Vor dem Löschen überschreiben
self._cache[key] = (b'\x00' * len(pk), b'\x00' * len(sk))
del self._cache[Schlüssel]
# Verwendung im WalletKlasseOptimizedWallet:
def__init__(self, master_seed: Bytes): self.master_seed = master_seed self.key_cache = Schlüsselcache(max_size=500)
defget_address_keys(selbst, Pfad: str) -> Tupel[Bytes, Bytes]:
zurückkehren self.key_cache.get_or_derive( self.master_seed, path, self._derive_keys )
def_derive_keys(selbst, Startwert: Bytes, Pfad: str):
# Tatsächliche Ableitungslogik
...
Zwischenspeicherung der Verifizierungsergebnisse
KlasseSignaturCache:
„““ Ergebnisse der Signaturüberprüfung zwischenspeichern. Damit Validatoren eine erneute Überprüfung gesehener Transaktionen vermeiden können. „““def__init__(self, max_size: int = 10000): self.max_size = max_size self._verified: dict[str, bool] = {}
def_signatur_id( self, message: Bytes, Signatur: Bytes, public_key: Bytes ) -> str:
„“„Eindeutige ID zur Signaturüberprüfung erstellen““zurückkehren hashlib.Blake2b( Nachricht + Signatur[:64] + öffentlicher_Schlüssel, # Die ersten 64 Bytes sind ausreichend
digest_size=16 ).hexdigest()
defcheck_or_verify( self, message: Bytes, Signatur: Bytes, public_key: Bytes ) -> bool:
„““Cache überprüfen oder Ergebnis überprüfen und zwischenspeichern““
sig_id = self._signature_id(Nachricht, Signatur, öffentlicher_Schlüssel)
if sig_id in selbst._verifiziert:
zurückkehren self._verified[sig_id]
# Verifizieren
sig = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“) is_valid = sig.verify(message, signatur, public_key)
# Cache (mit Räumung)if len(self._verified) >= self.max_size:
# Entfernen Sie etwa 10 % der ältesten Einträge
to_remove = list(self._verified.keys())[:self.max_size // 10]
für Schlüssel in to_remove:
del self._verified[key] self._verified[sig_id] = is_valid
zurückkehren is_valid
Speicheroptimierung
Import gc
KlasseMemoryEfficientSigner:
„““ Speichereffizientes Signieren für eingebettete/mobile Geräte „““defsign_and_release( self, message: bytes, Secret_key: bytes ) -> bytes:
„““ Nachricht signieren und Schlüsselspeicher sofort freigeben. Verwendung für einmalige Signaturen, bei denen der Schlüssel nicht bestehen bleiben soll. „““
sig_obj = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“, Secret_Key) Signatur = sig_obj.sign(Nachricht)
# OQS-Objekt freigebendel sig_obj
# Geheimen Schlüssel überschreibenif isinstance(secret_key, bytearray):
für i in range(len(secret_key)): Secret_key[i] = 0
# Garbage Collection erzwingen
gc.collect()
zurückkehren Unterschrift
defStreaming_sign( self, message_chunks: Iterator[bytes], Secret_key: bytes ) -> bytes:
„““ Streaming-Nachricht signieren, ohne alles in den Speicher zu laden. Hashen Sie die Nachricht vorab in Blöcken und signieren Sie dann den Hash. „““# Hash-Nachricht in Blöcken
hasher = hashlib.Blake2b(digest_size=32)
für Brocken in message_chunks: hasher.update(chunk) message_hash = hasher.digest()
# Signieren Sie den Hash
sig = oqs.Signature(„SPHINCS+-SHAKE-128s-einfach“, geheimer_Schlüssel)
zurückkehren sig.sign(message_hash)
Hardwarebeschleunigung
AVX2/AVX-512-Optimierung
Die meisten PQC-Bibliotheken verfügen über eine optimierte Assembly für x86_64:
# Überprüfen Sie die CPU-Funktionen für die optimale AlgorithmusauswahlImport Unterprozess
defget_cpu_features() -> set:
„“„Verfügbare CPU SIMD-Funktionen erkennen““versuchen:
# Linuxmit offen(„/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“)
zurückkehren Merkmale
außer:
zurückkehren Satz()
defselect_optimal_variant() -> str:
„““Wählen Sie die beste SPHINCS+-Variante für diesen CPU““
Features = get_cpu_features()
if„avx512“in Merkmale:
# AVX-512 bietet eine Beschleunigung von ca. 20–30 %
drucken(„Verwendung der optimierten AVX-512-Implementierung“)
zurückkehren„SPHINCS+-SHAKE-128s-einfach“# liboqs wählt automatisch auselif„avx2“in Funktionen: drucken(„Verwendung der optimierten AVX2-Implementierung“)
zurückkehren„SPHINCS+-SHAKE-128s-einfach“anders: drucken(„Referenzimplementierung verwenden“)
zurückkehren„SPHINCS+-SHAKE-128s-einfach“# Kompilieren Sie Liboqs mit optimalen Flags# cmake -DOQS_USE_AVX2_INSTRUCTIONS=ON -DOQS_USE_AVX512_INSTRUCTIONS=ON ..
Der NIST-Parameter „f“ setzt das Vorzeichen 3-5x schneller auf Kosten von etwa 2x größeren Signaturen – ein Trade, den SynX ablehnt, da Kettenbytes dauerhaft sind und SynX auf SPHINCS+-SHAKE-128s bleibt. Parallelisieren Sie für Batch-Vorgänge unabhängige Signaturen. Berechnen Sie häufig verwendete Werte im Voraus und ziehen Sie AVX2/AVX-512-optimierte Implementierungen für x86_64-Plattformen in Betracht. Der SynX quantenresistente Geldbörse verwendet paralleles Signieren für Transaktionsstapel.
Was ist der typische Leistungsunterschied zwischen Kyber und ECDH?
Die Schlüsselgenerierung von Kyber-768 ist etwa 2-3x langsamer als die von secp256k1. Die Kapselung/Entkapselung ist vergleichbar oder etwas langsamer. Der Hauptaufwand liegt in der Schlüssel-/Chiffretextgröße (1 KB+ vs. 32–64 Bytes), nicht in der Rechenzeit. Moderne CPUs mit AVX2 können mehr als 10.000 Kyber-Vorgänge pro Sekunde ausführen.
Optimierung vs. Sicherheit
Verzichten Sie niemals auf Sicherheit zugunsten der Leistung. Alle Optimierungen im SynX quantenresistente Geldbörse werden gründlich überprüft, um sicherzustellen, dass keine Seitenkanallecks oder Sicherheitslücken entstehen.
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) aus der Genesis
Quantensicherheits-Score
95/100 — vs. Bitcoin 12/100, Ethereum 15/100, Monero 18/100
NIST-Standards
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) – fertiggestellt im August 2024
Zeitleiste
Die Entwicklung begann September 2025 · Testnetz Januar 2026 · Mainnet April 2026
Maximales Angebot
77,7 Millionen SynX — Hard-Cap mit deflationärem Anflug
Verteilung
Null vor der Mine. Null ICO. Null VC. Keine Gründerzuteilung. Entwickler-Wallet öffentlich und bewusst nicht privat – im Explorer, in jedem Adressbuch
Sicherheitsüberprüfung
Interne gegnerische Tests und Red-Teaming + öffentliches Bug-Bounty. Vollständige unabhängige Prüfung bei die erste Halbierung, wenn die Quelle mit Audit-Trails geöffnet wird
Bergbau
Argon2id (2 GB Speicherfest) – Anti-ASIC, nur CPU
Privatsphäre
Kein KYC-, P2P-Austausch, rotierende Brenneradressen, Kyber-verschlüsselte Kommunikation
Warten Sie – Ihre Kryptowährung überlebt möglicherweise nicht
Quantum break estimated Q4 2026
Ältere Wallets (Bitcoin, Ethereum, Monero) verwenden Kryptografie, die Quantencomputer knacken können. Über $250 billion in exponierten Bitcoin-Adressen sind bereits gefährdet.