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.
SPHINCS+-Implementierungshandbuch: Hash-basierte Signaturen für Entwickler
📅 Letzte Aktualisierung: 2. August 2026🎧 Hören: ~6 Min
SPHINCS+ (standardisiert als SLH-DSA in FIPS 205) bietet quantenresistente digitale Signaturen, die ausschließlich auf der Sicherheit der Hash-Funktion basieren. Dieser Leitfaden behandelt die vollständige SPHINCS+-Integration für Kryptowährungsanwendungen, einschließlich Parameterauswahl, Implementierungsmuster und Optimierungstechniken. Der SynX quantenresistente Geldbörse verwendet diese Muster für alle Transaktionssignaturen.
SPHINCS+-Architektur verstehen
SPHINCS+ kombiniert drei kryptografische Komponenten:
WOTS+ (Einmalige Winternitz-Signatur): Erstellt einmalige Signaturen mithilfe von Hash-Ketten
FORS (Wald zufälliger Teilmengen): Wenige Zeitsignatur für die Nachrichtenbindung
Hyperbaum: Baum der Merkle-Bäume, der viele Signaturen mit einem Schlüssel ermöglicht
Das zustandslose Design eliminiert gefährliche Zustandsverwaltung – jede Signatur ist unabhängig, was SPHINCS+ ideal für Kryptowährungs-Wallets macht, bei denen Backups und Zugriff auf mehrere Geräte üblich sind.
Auswahl des Parametersatzes
SPHINCS+ bietet mehrere Parametersätze für Sicherheit, Signaturgröße und Geschwindigkeit:
Parametersatz
Sicherheit
Unterschrift
Öffentlicher Schlüssel
Anwendungsfall
SPHINCS+-SHAKE-128s (SynX)
Stufe 1
7,856 B
32 B
Empfohlen für die meisten Kryptowährungen
SPHINCS+-128f
Stufe 1
17,088 B
32 B
Beim Signieren ist die Geschwindigkeit entscheidend
SPHINCS+-192s
Stufe 3
16,224 B
48 B
Höhere Sicherheitsanforderungen
SPHINCS+-192f
Stufe 3
35,664 B
48 B
Hohe Sicherheit + Geschwindigkeit
SPHINCS+-SHAKE-128ss
Stufe 5
29,792 B
64 B
Maximale Sicherheit
SPHINCS+-SHAKE-128sf
Stufe 5
49,856 B
64 B
Maximale Sicherheit + Geschwindigkeit
SynX-Empfehlung: Der SynX quantenresistente Geldbörse verwendet SPHINCS+-SHAKE-128s (SLH-DSA, FIPS 205) für ein optimales Gleichgewicht zwischen NIST Level 1-Sicherheit und minimaler Signaturgröße. Dies bietet die gleiche Sicherheit wie AES-128 und hält die Signaturen unter 8 KB – genau 7.856 Byte – mit einem 32-Byte-öffentlichen Schlüssel und einem 64-Byte-privaten Schlüssel.
Hash-Funktionsvarianten
SPHINCS+ unterstützt zwei Hash-Funktionsfamilien:
SHAKE256: SHA-3-basierte erweiterbare Ausgabefunktion. Bevorzugt für Neuimplementierungen.
Der SynX quantenresistente Geldbörse nutzt SHAKE256 für eine bessere Leistung auf modernen Prozessoren und größere Sicherheitsmargen.
Implementierung: Python
# Installieren: pip install liboqs-pythonImport oqs
aus Tippen Import Tupel
Import Hashlib
KlasseSPHINCSPlus:
„““ SPHINCS+ (SLH-DSA)-Implementierung für SynX Verwendet standardmäßig SPHINCS+-SHAKE-128s (NIST Level 1, 7.856 Byte-Signaturen) „““# Verfügbare Varianten
VARIANTEN = {
"128s": „SPHINCS+-SHAKE-128s-einfach“,
"128f": „SPHINCS+-SHAKE-128s-einfach“,
"192s": „SPHINCS+-SHAKE-192s-simple“,
"192f": „SPHINCS+-SHAKE-192f-simple“,
"256s": „SPHINCS+-SHAKE-256s-simple“,
"256f": „SPHINCS+-SHAKE-256f-simple“,
}
def__init__(self, Variante: str = "128s"):
„““ Initialisieren Sie SPHINCS+ mit der angegebenen Variante. Argumente: Variante: Eine von „128s“, „128f“, „192s“, „192f“, „256s“, „256f“ „““if Variante nicht drin selbst.VARIANTEN:
erheben ValueError(f„Unbekannte Variante: {variant}“) self.variant = Variante self.algorithm = self.VARIANTS[variant] self._sig = oqs.Signature(self.algorithm)
defgenerieren_schlüsselpaar(selbst) -> Tupel[Bytes, Bytes]:
„““ Erzeuge ein neues SPHINCS+-Schlüsselpaar. Rückgabe: Tupel von (public_key, Secret_key) – public_key: 32/48/64 Bytes je nach Variante – Secret_key: 64/96/128 Bytes je nach Variante „““
public_key = self._sig.generate_keypair() Secret_key = self._sig.export_secret_key()
zurückkehren öffentlicher_Schlüssel, geheimer_Schlüssel
defZeichen(selbst, Nachricht: Bytes, geheimer_Schlüssel: Bytes) -> Bytes:
„““ Eine Nachricht mit SPHINCS+ signieren. Argumente: Nachricht: Die zu signierende Nachricht (beliebige Länge). Secret_key: Der geheime Schlüssel des Unterzeichners. Rückgabe: Signaturbytes (7.856 bis 49.856 Bytes, je nach Variante). „““# Signaturinstanz mit geheimem Schlüssel erstellen
sig = oqs.Signature(self.algorithm, Secret_key)
zurückkehren sig.sign(Nachricht)
defverifizieren(selbst, Nachricht: Bytes, Signatur: Bytes, öffentlicher_Schlüssel: Bytes) -> bool:
„““ Überprüfen Sie eine SPHINCS+-Signatur. Argumente: Nachricht: Die ursprüngliche Nachrichtensignatur: Die zu überprüfende Signatur. public_key: Der öffentliche Schlüssel des Unterzeichners. Rückgabewerte: „True“, wenn die Signatur gültig ist, andernfalls „False“.zurückkehren self._sig.verify(message, signatur, public_key) @property
defpublic_key_size(selbst) -> int:
„““Größe des öffentlichen Schlüssels in Bytes““zurückkehren self._sig.length_public_key @property
defSecret_key_size(selbst) -> int:
„““Größe des geheimen Schlüssels in Bytes““zurückkehren self._sig.length_secret_key @property
defSignaturgröße(selbst) -> int:
„““Größe der Signatur in Bytes““zurückkehren self._sig.length_signature
# Beispiel: Transaktionssignierungdefexample_transaction_signing(): Unterzeichner = SPHINCSPlus("128s")
# Schlüsselpaar generieren
pk, sk = signer.generate_keypair() print(f„Öffentlicher Schlüssel: {len(pk)} Bytes“) drucken(f„Geheimer Schlüssel: {len(sk)} Bytes“) drucken(f„Signaturgröße: {signer.signature_size} Bytes“)
# Transaktionsnachricht erstellen
Transaktion = {
"Absender": „Sx7nQ3kV9mP2xR5t…“,
"Empfänger": „Sx8pR4kW1nL6yT2u…“,
"Menge": 100000000,
"Gebühr": 1000,
„einmal“: 42
}
# Hashen Sie die Transaktion (SPHINCS+ signiert Nachrichten beliebiger Länge#, aber aus Effizienzgründen ist Pre-Hashing üblich)
message = str(transaction).encode() message_hash = hashlib.Blake2b(message, summary_size=32).digest()
# Zeichen
signatur = signer.sign(message_hash, sk) print(f„Signatur: {len(signatur)} Bytes“)
# Verifizieren
is_valid = signer.verify(message_hash, Signatur, pk) print(f„Gültig: {is_valid}“)
if __name__ == "__hauptsächlich__": example_transaction_signing()
Implementierung: Rust
// Cargo.toml:// [Abhängigkeiten]// pqcrypto-sphincsplus = "0,7"// pqcrypto-traits = "0.3"verwenden pqcrypto_sphincsplus::sphincsshake128ssimple as SPHINCS;
verwenden pqcrypto_traits::sign::{PublicKey, SecretKey, SignedMessage, DetachedSignature};
KneipenstrukturSphincsPlus;
implSphincsPlus {
/// Erzeuge ein neues SPHINCS+-SchlüsselpaarKneipe fngenerieren_schlüsselpaar() -> (SPHINCS::PublicKey, SPHINCS::SecretKey) { SPHINCS::keypair() }
/// Eine Nachricht signieren und die an die Nachricht angehängte Signatur zurücksendenKneipe fnZeichen(Nachricht: &[u8], Secret_Key: &SPHINCS::SecretKey) -> SPHINCS::SignedMessage { SPHINCS::sign(Message, Secret_Key) }
/// Eine Nachricht signieren und eine getrennte Signatur zurückgebenKneipe fnsign_dependent( Nachricht: &[u8], Secret_Key: &SPHINCS::SecretKey ) -> SPHINCS::DetachedSignature { SPHINCS::third_sign(message, Secret_key) }
/// Überprüfen Sie eine getrennte SignaturKneipe fnüberprüfen_losgelöst( Nachricht: &[u8], Signatur: &SPHINCS::DetachedSignature, öffentlicher_Schlüssel: &SPHINCS::PublicKey ) -> Ergebnis<(), pqcrypto_traits::Error> { SPHINCS::verify_scribed_signature(signature, message, public_key) }
/// Eine signierte Nachricht öffnen, das Original überprüfen und zurücksendenKneipe fnoffen( signierte_Nachricht: &SPHINCS::SignedMessage, öffentlicher_Schlüssel: &SPHINCS::PublicKey ) -> Ergebnis, pqcrypto_traits::Error> { SPHINCS::open(signed_message, public_key) } }
fnHaupt() {
// Schlüsselpaar generierenlassen (pk, sk) = SphincsPlus::generate_keypair();
// Nachricht zum Unterschreibenlassen Nachricht = b„Transaktion: 100 SYX an Empfänger senden“;
// Mit abgelöster Signatur signierenlassen Signatur = SphincsPlus::sign_dependent(message, &sk); println!(„Öffentlicher Schlüssel: {} Bytes“, pk.as_bytes().len()); println!(„Signatur: {} Bytes“, signatur.as_bytes().len());
// VerifizierenübereinstimmenSphincsPlus::verify_scribed(message, &signature, &pk) { Ok(_) => println!(„ ✓ Unterschrift gültig!“), Err(_) => println!(„✗ Unterschrift ungültig!“),
}
}
Transaktionssignaturmuster
Der SynX quantenresistente Geldbörse verwendet ein bestimmtes Muster für die Transaktionssignierung:
Import json
Import Hashlib
aus Datenklassen Import Datenklasse, Asdict
aus Tippen Import Optionale @dataclass
KlasseSynXTransaction:
„““SynX-Transaktionsstruktur““
Absender: str Empfänger: str Betrag: int Gebühr: int Nonce: int Zeitstempel: int Memo: Optional[str] = Keine Signatur: Optional[bytes] = Keine public_key: Optional[bytes] = Keine
KlasseTransaktionssignierer:
„““ SynX-Transaktionen mit SPHINCS+ signieren und überprüfen““def__init__(self): self.SPHINCS = SPHINCSPlus("128s")
def_get_signing_message(selbst, tx: SynXTransaction) -> Bytes:
„““ Deterministische Signaturnachricht aus Transaktion erstellen. Signatur- und public_key-Felder ausschließen „““
tx_dict = asdict(tx)
del tx_dict['Unterschrift']
del tx_dict['public_key']
# Sortierschlüssel für die deterministische Serialisierung
message = json.dumps(tx_dict, sort_keys=True).encode()
# Pre-Hash für Effizienz (SPHINCS+ verarbeitet jede Nachrichtenlänge#, aber Hashing zuerst ist konventionell)zurückkehren hashlib.Blake2b(message, Digest_size=32).digest()
defsign_transaction( selbst, tx: SynXTransaction, Secret_key: Bytes, public_key: Bytes ) -> SynXTransaction:
„““ Eine Transaktion signieren und mit angehängter Signatur zurücksenden. Argumente: tx: Zu signierende Transaktion Secret_key: Geheimer SPHINCS+-Schlüssel des Absenders public_key: Öffentlicher SPHINCS+-Schlüssel des Absenders Rückgaben: Transaktion mit Signatur und festgelegtem public_key „““
message = self._get_signing_message(tx) Signatur = self.SPHINCS.sign(message, Secret_key) tx.signature = Signatur tx.public_key = public_key
zurückkehren tx
defverify_transaction(selbst, tx: SynXTransaction) -> bool:
„““ Überprüfen Sie eine signierte Transaktion. Argumente: tx: Transaktion mit Signatur und öffentlichem_Schlüssel. Rückgabe: True, wenn die Signatur gültig ist. „““ifnicht tx.signatur oder nicht tx.public_key:
zurückkehren Falsche Nachricht = self._get_signing_message(tx)
zurückkehren self.SPHINCS.verify(message, tx.signature, tx.public_key)
# Anwendungsbeispieldefdemo_transaction_flow(): Unterzeichner = Transaktionssignierer() SPHINCS = SPHINCSPlus()
# Schlüsselpaar des Absenders generieren
sender_pk, sender_sk = SPHINCS.generate_keypair()
# Transaktion erstellen
tx = SynXTransaction( Absender=„Sx7nQ3kV9mP2xR5tW8yB4cF6hJ…“, Empfänger=„Sx8pR4kW1nL6yT2uZ9wC3dE5gK…“, Betrag=50000000, # 0,5 SYX in kleinsten Einheiten
Gebühr=2000, Nonce=1, Zeitstempel=1704067200, Memo=„Bezahlung für Dienstleistungen“
)
# Zeichen
signiert_tx = signer.sign_transaction(tx, sender_sk, sender_pk) print(f„Signaturgröße: {len(signed_tx.signature)} Bytes“)
# Verifizieren (normalerweise durch Validatoren durchgeführt)
is_valid = signer.verify_transaction(signed_tx) print(f„Transaktion gültig: {is_valid}“)
# Manipulationserkennung
signiert_tx.amount = 100000000 # Änderungsversuch
is_tampered = signer.verify_transaction(signed_tx) print(f„Manipuliert gültig: {is_tampered}“) # FALSCH
Optimierung der Stapelverifizierung
Für Validatoren, die viele Transaktionen verarbeiten, verbessert die parallele Überprüfung den Durchsatz:
Import gleichzeitige.Futures
aus Tippen Import Liste, Tupel
KlasseBatchVerifier:
„““ Effiziente Batch-Verifizierung von SPHINCS+-Signaturen „““def__init__(self, max_workers: int = 4): self.max_workers = max_workers self.signer = Transaktionssignierer()
defüberprüfen_batch( self, Transaktionen: Liste[SynXTransaction] ) -> Liste[Tupel[SynXTransaction, bool]]:
„““ Mehrere Transaktionen parallel überprüfen Argumente: Transaktionen: Liste der signierten Transaktionen Rückgabewerte: Liste der (Transaktion, is_valid)-Tupel „““mit concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as Testamentsvollstrecker:
# Senden Sie alle Überprüfungsaufgaben
Futures = { executor.submit(self.signer.verify_transaction, tx): tx
für tx in Transaktionen }
# Ergebnisse sammeln
Ergebnisse = []
für Zukunft in concurrent.futures.as_completed(Futures): tx = Futures[Future]
versuchen: is_valid = future.result() results.append((tx, is_valid))
außer Ausnahme as e: results.append((tx, False))
zurückkehren Ergebnisse
deffilter_valid( self, Transaktionen: Liste[SynXTransaction] ) -> Liste[SynXTransaction]:
„Nur gültige Transaktionen zurückgeben“
Ergebnisse = self.verify_batch(transactions)
zurückkehren [tx für tx, gültig in Ergebnisse if gültig]
# BenchmarkImport Zeit
defbenchmark_verification(): batch_verifier = BatchVerifier(max_workers=8)
# Testtransaktionen generieren
SPHINCS = SPHINCSPlus() Unterzeichner = Transaktionssignierer() Transaktionen = []
für i in range(100): pk, sk = SPHINCS.generate_keypair() tx = SynXTransaction( Absender=f„sender_{i}“, Empfänger=f„recipient_{i}“, Betrag=i * 1000, Gebühr=100, Nonce=i, Zeitstempel=int(time.time()) ) Transactions.append(signer.sign_transaction(tx, sk, pk))
# Benchmark-Parallelüberprüfung
start = time.time() results = batch_verifier.verify_batch(transactions) elapsed = time.time() - start valid_count = sum(1 für _, gültig in Ergebnisse if gültig) print(f„Überprüfte {len(transactions)} Transaktionen in {elapsed:.2f}s“) drucken(f„Gültig: {valid_count}, Ungültig: {len(transactions) – valid_count}“) drucken(f„Durchsatz: {len(transactions) / elapsed:.1f} tx/s“)
Optimierung der Signaturgröße
Ziehen Sie für Umgebungen mit eingeschränkter Bandbreite die Komprimierung in Betracht:
Import zlib
defcompress_signatur(Signatur: Bytes) -> Bytes:
„“ SPHINCS+-Signatur für Übertragung komprimieren SPHINCS+-Signaturen lassen sich aufgrund der internen Struktur gut komprimieren „““zurückkehren zlib.compress(signatur, level=6)
defdecompress_signature(komprimiert: Bytes) -> Bytes:
„Signatur vor Verifizierung dekomprimieren“zurückkehren zlib.decompress(komprimiert)
# Komprimierungsverhältnis testen
SPHINCS = SPHINCSPlus() pk, sk = SPHINCS.generate_keypair() Signatur = SPHINCS.sign(b„Testnachricht“, sk) compress = compress_signature(signature) print(f„Original: {len(signature)} Bytes“) drucken(f„Komprimiert: {len(compressed)} Bytes“) drucken(f„Verhältnis: {len(komprimiert) / len(signatur) * 100:.1f}%“)
# Typische Ausgabe: ~50–60 % Komprimierungsverhältnis für SPHINCS+-SHAKE-128s
Sicherheitshinweis zur Komprimierung
Während die Komprimierung die Bandbreite reduziert, stellen Sie sicher, dass die Dekomprimierung vor der Überprüfung erfolgt, um Oracle-Angriffe zu verhindern. Überprüfen Sie komprimierte Signaturen niemals direkt.
Best Practices für die Sicherheit
Schlüsselgenerierung
Verwenden Sie kryptografisch sichere Zufallszahlengeneratoren
Generieren Sie Schlüssel in sicheren Umgebungen (wenn möglich Hardware-Sicherheitsmodule)
Verwenden Sie geheime Schlüssel niemals in verschiedenen Anwendungen wieder
Geheime Schlüsselspeicherung
Speichern Sie geheime Schlüssel im Ruhezustand verschlüsselt
Verwenden Sie einen Speicherschutz für die verwendeten Schlüssel
Löschen Sie Schlüssel nach dem Signieren sicher aus dem Speicher
Implementierungssicherheit
Verwenden Sie einen Konstantzeitvergleich für die Ergebnisse der Signaturüberprüfung
Validieren Sie alle Eingaben vor kryptografischen Vorgängen
Behandeln Sie Fehler, ohne Zeitinformationen preiszugeben
Häufig gestellte Fragen
Welchen SPHINCS+-Parametersatz soll ich verwenden?
Für die meisten Kryptowährungsanwendungen bietet SPHINCS+-SHAKE-128s das beste Gleichgewicht zwischen Sicherheit (NIST Level 1) und Signaturgröße (7.856 Byte). Der SynX quantenresistente Geldbörse verwendet diesen Parametersatz und nur diesen. Andere Projekte greifen möglicherweise auf SPHINCS+-SHAKE-128s zurück, um auf Kosten größerer Signaturen (17.088 Bytes) schneller zu signieren, oder auf die 192/256-Sets, wenn sie einen größeren Spielraum benötigen. SynX nicht – 128s ist die ganze Geschichte.
Wie gehe ich mit großen SPHINCS+-Signaturen in meiner Anwendung um?
Größe für Ihren Parametersatz. SynX verarbeitet feste 7.856 Bytes pro Signatur mit SPHINCS+-SHAKE-128s; die größeren NIST-Sets laufen auf 49.856. Verwenden Sie Komprimierung für die Speicherung und Übertragung, berücksichtigen Sie nach Möglichkeit Signaturaggregationsmuster und aktualisieren Sie Datenbankschemata, um Felder variabler Länge zu verwenden. Der SynX quantenresistente Geldbörse Das SDK führt diese Optimierungen automatisch durch.
Ist SPHINCS+ langsamer als ECDSA?
Die SPHINCS+-Signatur ist langsamer als die ECDSA-Signatur (Zehntausende statt Tausende Vorgänge pro Sekunde), aber die Verifizierung ist relativ schnell. Für Kryptowährungen, bei denen das Signieren selten ist (Benutzertransaktionen) und die Verifizierung üblich ist (Validierung), ist dieser Kompromiss akzeptabel. Die Sicherheitsvorteile hashbasierter Signaturen rechtfertigen den Leistungsaufwand.
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.