SynergyX Gebouwd op de algoritmen NIST gestandaardiseerd — FIPS 203 (ML-KEM/Kyber-768) en FIPS 205 (SLH-DSA/SPHINCS+). Gepubliceerd op 15 januari 2026. Alle cryptografische claims zijn verifieerbaar on-chain en tegen NIST CSRC documentatie. Nul voormijn. Nul ICO. Nul VC. Nul toewijzing van oprichters. 77,7 miljoen harde cap. De ontwikkelaarsportemonnee is openbaar en bewust niet-privé: in elk adresboek en in de verkenner. Niets ervan vraagt je om iemand te vertrouwen.
SPHINCS+-implementatiehandleiding: op hash gebaseerde handtekeningen voor ontwikkelaars
📅 Laatst bijgewerkt: 2 augustus 2026🎧 Luister: ~6 min
SPHINCS+ (gestandaardiseerd als SLH-DSA in FIPS 205) biedt kwantumbestendige digitale handtekeningen uitsluitend gebaseerd op hashfunctiebeveiliging. Deze handleiding behandelt de volledige SPHINCS+-integratie voor cryptocurrency-toepassingen, inclusief parameterselectie, implementatiepatronen en optimalisatietechnieken. De SynX kwantumbestendige portemonnee gebruikt deze patronen voor alle transactiehandtekeningen.
De SPHINCS+-architectuur begrijpen
SPHINCS+ combineert drie cryptografische componenten:
WOTS+ (eenmalige Winternitz-handtekening): Creëert eenmalige handtekeningen met behulp van hash-ketens
FORS (Bos van willekeurige subsets): Enkele handtekening voor het binden van berichten
Hyperboom: Boom van Merkle-bomen die veel handtekeningen uit één sleutel mogelijk maken
Het staatloze ontwerp elimineert gevaarlijk statusbeheer; elke handtekening is onafhankelijk, waardoor SPHINCS+ ideaal is voor cryptocurrency-wallets waar back-ups en toegang tot meerdere apparaten gebruikelijk zijn.
Selectie van parameterset
SPHINCS+ biedt meerdere parametersets die de beveiliging, handtekeninggrootte en snelheid balanceren:
Parameterset
Beveiliging
Handtekening
Openbare sleutel
Gebruikscasus
SPHINCS+-SHAKE-128s (SynX)
Niveau 1
7,856 B
32 B
Aanbevolen voor de meeste cryptovaluta
SPHINCS+-128f
Niveau 1
17,088 B
32 B
Bij het ondertekenen is snelheid cruciaal
SPHINCS+-192s
Niveau 3
16,224 B
48 B
Hogere veiligheidseisen
SPHINCS+-192f
Niveau 3
35,664 B
48 B
Hoge beveiliging + snelheid
SPHINCS+-SHAKE-128ss
Niveau 5
29,792 B
64 B
Maximale veiligheid
SPHINCS+-SHAKE-128sf
Niveau 5
49,856 B
64 B
Maximale veiligheid + snelheid
SynX-aanbeveling: De SynX kwantumbestendige portemonnee gebruikt SPHINCS+-SHAKE-128s (SLH-DSA, FIPS 205) voor een optimale balans tussen NIST Level 1-beveiliging en minimale handtekeninggrootte. Dit biedt een gelijkwaardige beveiliging als AES-128, terwijl de handtekeningen kleiner blijven dan 8 KB – precies 7.856 bytes, met een openbare sleutel van 32 bytes en een privésleutel van 64 bytes.
Hash-functievarianten
SPHINCS+ ondersteunt twee hashfunctiefamilies:
SHAKE256: Op SHA-3 gebaseerde uitbreidbare uitvoerfunctie. Voorkeur voor nieuwe implementaties.
SHA-256: Traditioneel gebaseerd op SHA-2. Bredere ondersteuning voor hardwareversnelling.
De SynX kwantumbestendige portemonnee gebruikt SHAKE256 voor betere prestaties op moderne processors en sterkere beveiligingsmarges.
Implementatie: Python
# Installeren: pip installeer liboqs-pythonimporteren oké
van typen importeren Tupel
importeren hasjlib
klasSPHINCSPlus:
""" SPHINCS+ (SLH-DSA)-implementatie voor SynX Gebruikt standaard SPHINCS+-SHAKE-128s (NIST niveau 1, handtekeningen van 7.856 bytes) """# Beschikbare varianten
VARIANTEN = {
"128s": "SPHINCS+-SHAKE-128s-eenvoudig",
"128f": "SPHINCS+-SHAKE-128s-eenvoudig",
"192s": "SPHINCS+-SHAKE-192s-eenvoudig",
"192f": "SPHINCS+-SHAKE-192f-eenvoudig",
"256s": "SPHINCS+-SHAKE-256s-eenvoudig",
"256f": "SPHINCS+-SHAKE-256f-eenvoudig",
}
zeker__init__(zelf, variant: str = "128s"):
""" Initialiseer SPHINCS+ met gespecificeerde variant Args: variant: Eén van "128s", "128f", "192s", "192f", "256s", "256f" """if variant niet binnen zelf.VARIANTEN:
salarisverhoging Waardefout(f"Onbekende variant: {variant}") self.variant = variant self.algorithm = self.VARIANTS[variant] self._sig = oqs.Signature(self.algorithm)
zekergenereer_sleutelpaar(zelf) -> Tupel[bytes, bytes]:
""" Genereer een nieuw SPHINCS+-sleutelpaar. Resultaat: Tuple van (public_key, secret_key) - public_key: 32/48/64 bytes afhankelijk van variant - secret_key: 64/96/128 bytes afhankelijk van variant """
public_key = zelf._sig.generate_keypair() geheime_sleutel = zelf._sig.export_secret_key()
opbrengst openbare_sleutel, geheime_sleutel
zekerteken(zelf, bericht: bytes, geheime_sleutel: bytes) -> bytes:
""" Onderteken een bericht met SPHINCS+ Args: message: Het te ondertekenen bericht (ongeacht de lengte) secret_key: De geheime sleutel van de ondertekenaar Retourneert: Handtekeningbytes (7.856 tot 49.856 bytes, afhankelijk van de variant) """# Maak een ondertekeningsinstantie met geheime sleutel
sig = oqs.Handtekening(zelf.algoritme, geheime_sleutel)
opbrengst sig.teken(bericht)
zekerverifiëren(zelf, bericht: bytes, handtekening: bytes, publieke_sleutel: bytes) -> bool:
""" Controleer een SPHINCS+-handtekening Args: message: De originele berichthandtekening: De handtekening om te verifiëren public_key: De publieke sleutel van de ondertekenaar Returns: Waar als de handtekening geldig is, anders False """opbrengst self._sig.verify(bericht, handtekening, publieke_sleutel) @property
zekerpublieke_sleutel_grootte(zelf) -> int:
"""Grootte van de openbare sleutel in bytes"""opbrengst self._sig.length_public_key @property
zekergeheime_sleutel_grootte(zelf) -> int:
"""Grootte van de geheime sleutel in bytes"""opbrengst self._sig.length_secret_key @property
zekerhandtekening_grootte(zelf) -> int:
"""Grootte van de handtekening in bytes"""opbrengst self._sig.lengte_handtekening
# Voorbeeld: ondertekening van transactiezekervoorbeeld_transactie_ondertekening(): ondertekenaar = SPHINCSPlus("128s")
# Genereer sleutelpaar
pk, sk = signer.generate_keypair() print(f"Openbare sleutel: {len(pk)} bytes") afdrukken(v"Geheime sleutel: {len(sk)} bytes") afdrukken(v"Handtekeninggrootte: {signer.signature_size} bytes")
# Transactiebericht maken
transactie = {
"afzender": "Sx7nQ3kV9mP2xR5t...",
"ontvanger": "Sx8pR4kW1nL6yT2u...",
"hoeveelheid": 100000000,
"tarief": 1000,
"nonce": 42
}
# Hash de transactie (SPHINCS+ ondertekent berichten van willekeurige lengte# maar pre-hashing is gebruikelijk voor efficiëntie)
bericht = str(transactie).encode() message_hash = hashlib.Blake2b(bericht, digest_size=32).digest()
# Teken
handtekening = ondertekenaar.teken(bericht_hash, sk) print(f"Handtekening: {len(handtekening)} bytes")
# Verifieer
is_valid = ondertekenaar.verify(message_hash, handtekening, pk) print(f"Geldig: {is_valid}")
if __naam__ == "__voornaamst__": voorbeeld_transactie_signing()
Uitvoering: Roest
// Cargo.toml:// [afhankelijkheden]// pqcrypto-sfincsplus = "0,7"// pqcrypto-traits = "0.3"gebruik pqcrypto_sphincsplus::sphincsshake128ssimple as SPHINCS;
gebruik pqcrypto_traits::sign::{PublicKey, SecretKey, SignedMessage, DetachedSignature};
pub structuurSphincsPlus;
implSphincsPlus {
/// Genereer een nieuw SPHINCS+-sleutelpaarkroeg fngenereer_sleutelpaar() -> (SPHINCS::PublicKey, SPHINCS::SecretKey) { SPHINCS::sleutelpaar() }
/// Onderteken een bericht en retourneer de handtekening als bijlage bij het berichtkroeg fnteken(bericht: &[u8], geheime_sleutel: &SPHINCS::SecretKey) -> SPHINCS::Ondertekend bericht { SPHINCS::sign(bericht, geheime_sleutel) }
/// Onderteken een bericht en retourneer een losse handtekeningkroeg fnteken_vrijstaand( bericht: &[u8], geheime_sleutel: &SPHINCS::SecretKey ) -> SPHINCS::DetachedSignature { SPHINCS::detached_sign(bericht, geheime_sleutel) }
/// Controleer een vrijstaande handtekeningkroeg fnverifiëren_detached( bericht: &[u8], handtekening: &SPHINCS::DetachedSignature, public_key: &SPHINCS::PublicKey ) -> Resultaat<(), pqcrypto_traits::Error> { SPHINCS::verify_detached_signature(handtekening, bericht, publieke_sleutel) }
/// Open een ondertekend bericht, controleer het origineel en stuur het terugkroeg fnopen( ondertekende_bericht: &SPHINCS::Ondertekend bericht, publieke_sleutel: &SPHINCS::PublicKey ) -> Resultaat, pqcrypto_traits::Error> { SPHINCS::open(signed_message, public_key) } }
fnvoornaamst() {
// Genereer sleutelpaarlaten (pk, sk) = SphincsPlus::genereer_sleutelpaar();
// Bericht om te ondertekenenlaten bericht = b"Transactie: stuur 100 SYX naar ontvanger";
// Bord met losse handtekeninglaten handtekening = SphincsPlus::sign_detached(bericht, &sk); println!("Openbare sleutel: {} bytes", pk.as_bytes().len()); println!("Handtekening: {} bytes", handtekening.as_bytes().len());
// VerifieerovereenkomstSphincsPlus::verify_detached(bericht, &handtekening, &pk) { Ok(_) => println!("✓ Handtekening geldig!"), Err(_) => println!("✗ Handtekening ongeldig!"),
}
}
Transactie-ondertekeningspatroon
De SynX kwantumbestendige portemonnee gebruikt een specifiek patroon voor het ondertekenen van transacties:
importeren json
importeren hasjlib
van dataklassen importeren dataclass, asdict
van typen importeren Optioneel @dataclass
klasSynXTransactie:
"""SynX transactiestructuur"""
afzender: str ontvanger: str bedrag: int vergoeding: int nonce: int tijdstempel: int memo: Optioneel[str] = Geen handtekening: Optioneel[bytes] = Geen public_key: Optioneel[bytes] = Geen
klasTransactieondertekenaar:
""" SynX-transacties ondertekenen en verifiëren met SPHINCS+ """zeker__init__(zelf): zelf.SPHINCS = SPHINCSPlus("128s")
zeker_get_signing_message(zelf, tx: SynXTransactie) -> bytes:
""" Creëer een deterministisch ondertekeningsbericht van de transactie. Exclusief handtekening- en public_key-velden """
tx_dict = verslaafde(tx)
del tx_dict['handtekening']
del tx_dict['openbare_sleutel']
# Sorteersleutels voor deterministische serialisatie
bericht = json.dumps(tx_dict, sort_keys=True).encode()
# Pre-hash voor efficiëntie (SPHINCS+ verwerkt elke berichtlengte# maar eerst hashen is conventioneel)opbrengst hashlib.Blake2b(bericht, digest_size=32).digest()
zekerteken_transactie(zelf, tx: SynXTransactie, geheime_sleutel: bytes, publieke_sleutel: bytes ) -> SynXTransactie:
""" Een transactie ondertekenen en retourneren met bijgevoegde handtekening Args: tx: Transactie om te ondertekenen geheime_sleutel: geheime SPHINCS+-sleutel van de afzender public_key: openbare SPHINCS+-sleutel van de afzender Retourneert: transactie met handtekening en publieke_sleutel ingesteld """
bericht = self._get_signing_message(tx) handtekening = self.SPHINCS.sign(bericht, geheime_sleutel) tx.signature = handtekening tx.public_key = publieke_sleutel
opbrengst tx
zekerverifieer_transactie(zelf, tx: SynXTransactie) -> bool:
""" Een ondertekende transactie verifiëren Args: tx: Transactie met handtekening en public_key Resultaat: True als handtekening geldig is """ifniet tx.handtekening of niet tx.public_key:
opbrengst Vals bericht = self._get_signing_message(tx)
opbrengst self.SPHINCS.verify(bericht, tx.handtekening, tx.public_key)
# Gebruiksvoorbeeldzekerdemo_transactie_stroom(): ondertekenaar = Transactieondertekenaar() SPHINCS = SPHINCSPlus()
# Genereer het sleutelpaar van de afzender
afzender_pk, afzender_sk = SPHINCS.generate_keypair()
# Transactie aanmaken
tx = SynXTransactie(afzender="Sx7nQ3kV9mP2xR5tW8yB4cF6hJ...", ontvanger="Sx8pR4kW1nL6yT2uZ9wC3dE5gK...", bedrag=50000000, # 0,5 SYX in de kleinste eenheden
vergoeding=2000, nonce=1, tijdstempel=1704067200, memo="Betaling voor diensten"
)
# Teken
ondertekende_tx = ondertekenaar.sign_transactie(tx, afzender_sk, afzender_pk) print(f"Handtekeninggrootte: {len(signed_tx.signature)} bytes")
# Verifiëren (meestal gedaan door validators)
is_valid = ondertekenaar.verify_transaction(signed_tx) print(f"Transactie geldig: {is_valid}")
# Detectie van manipulatie
ondertekende_tx.bedrag = 100000000 # Probeer te wijzigen
is_tampered = ondertekenaar.verify_transaction(signed_tx) print(f"Er is mee geknoeid, geldig: {is_tampered}") # Vals
Optimalisatie van batchverificatie
Voor validators die veel transacties verwerken, verbetert parallelle verificatie de doorvoer:
importeren gelijktijdige toekomsten
van typen importeren Lijst, Tupel
klasBatchVerifier:
""" Efficiënte batchverificatie van SPHINCS+-handtekeningen """zeker__init__(self, max_workers: int = 4): self.max_workers = max_workers self.signer = Transactieondertekenaar()
zekerverifieer_batch( zelf, transacties: Lijst[SynXTransactie] ) -> Lijst[Tupel[SynXTransactie, bool]]:
""" Meerdere transacties parallel verifiëren Args: transacties: Lijst met ondertekende transacties Resultaat: Lijst met (transactie, is_valid) tupels """met concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as uitvoerder:
# Dien alle verificatietaken in
futures = {uitvoerder.submit(self.signer.verify_transaction, tx): tx
voor tx in transacties }
# Verzamel resultaten
resultaten = []
voor toekomst in concurrent.futures.as_completed(futures): tx = futures[toekomst]
poging: is_valid = future.result() results.append((tx, is_valid))
behalve Uitzondering as e: resultaten.append((tx, False))
opbrengst resultaten
zekerfilter_geldig( zelf, transacties: Lijst[SynXTransactie] ) -> Lijst[SynXTransactie]:
"""Alleen geldige transacties retourneren"""
resultaten = self.verify_batch(transacties)
opbrengst [tx voor tx, geldig in resultaten if geldig]
# Benchmarkimporteren tijd
zekerbenchmark_verificatie(): batch_verifier = BatchVerifier(max_workers=8)
# Genereer testtransacties
SPHINCS = SPHINCSPlus() ondertekenaar = Transactieondertekenaar() transacties = []
voor i in bereik(100): pk, sk = SPHINCS.generate_keypair() tx = SynXTransactie(afzender=v"afzender_{i}", ontvanger=f"ontvanger_{i}", bedrag=i * 1000, vergoeding=100, nonce=i, timestamp=int(time.time()) ) transacties.append(signer.sign_transaction(tx, sk, pk))
# Benchmark parallelle verificatie
start = tijd.tijd() resultaten = batch_verifier.verify_batch(transacties) verstreken = tijd.tijd() - start valid_count = som(1 voor _, geldig in resultaten if geldig) afdrukken(v"Geverifieerde {len(transactions)} transacties in {elapsed:.2f}s") afdrukken(v"Geldig: {valid_count}, ongeldig: {len(transacties) - valid_count}") afdrukken(v"Doorvoer: {len(transacties) / verstreken:.1f} tx/s")
Optimalisatie van handtekeninggrootte
Voor omgevingen met beperkte bandbreedte kunt u compressie overwegen:
Hoewel compressie de bandbreedte vermindert, moet u ervoor zorgen dat decompressie plaatsvindt vóór verificatie om orakelaanvallen te voorkomen. Verifieer gecomprimeerde handtekeningen nooit rechtstreeks.
Beste praktijken op het gebied van beveiliging
Sleutel generatie
Gebruik cryptografisch beveiligde generatoren voor willekeurige getallen
Genereer sleutels in beveiligde omgevingen (hardware beveiligingsmodules indien mogelijk)
Gebruik geheime sleutels nooit voor verschillende toepassingen
Geheime sleutelopslag
Bewaar geheime sleutels versleuteld in rust
Gebruik geheugenbeveiliging voor sleutels die in gebruik zijn
Wis sleutels veilig uit het geheugen na ondertekening
Implementatiebeveiliging
Gebruik constante tijdvergelijking voor handtekeningverificatieresultaten
Valideer alle invoer vóór cryptografische bewerkingen
Behandel fouten zonder timinginformatie te lekken
Veelgestelde vragen
Welke SPHINCS+-parameterset moet ik gebruiken?
Voor de meeste cryptocurrency-toepassingen biedt SPHINCS+-SHAKE-128s de beste balans tussen beveiliging (NIST niveau 1) en handtekeninggrootte (7.856 bytes). De SynX kwantumbestendige portemonnee gebruikt deze parameterset en alleen deze. Andere projecten kunnen SPHINCS+-SHAKE-128's bereiken om sneller te ondertekenen ten koste van grotere handtekeningen (17.088 bytes), of voor de 192/256 sets wanneer ze een grotere marge nodig hebben. SynX niet – 128s is het hele verhaal.
Hoe ga ik om met SPHINCS+ grote handtekeningen in mijn applicatie?
Grootte voor uw parameterset. SynX verwerkt een vaste 7.856 bytes per handtekening met SPHINCS+-SHAKE-128s; de grotere NIST-sets lopen op 49.856. Gebruik compressie voor opslag en verzending, overweeg waar mogelijk handtekeningaggregatiepatronen en update databaseschema's om velden met variabele lengte te gebruiken. De SynX kwantumbestendige portemonnee SDK verwerkt deze optimalisaties automatisch.
Is SPHINCS+ langzamer dan ECDSA?
Ondertekening met SPHINCS+ is langzamer dan met ECDSA (tientallen versus duizenden bewerkingen per seconde), maar de verificatie is redelijk snel. Voor cryptocurrency waarbij ondertekening niet vaak voorkomt (gebruikerstransacties) en verificatie gebruikelijk is (validatie), is deze afweging acceptabel. De beveiligingsvoordelen van op hash gebaseerde handtekeningen rechtvaardigen de prestatiekosten.
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) vanaf het ontstaan
Kwantumveiligheidsscore
95/100 — versus Bitcoin 12/100, Ethereum 15/100, Monero 18/100
NIST-normen
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) - afgerond in augustus 2024
Tijdlijn
De ontwikkeling begon September 2025 · testnet Januari 2026 · hoofdnet april 2026
Maximaal aanbod
77,7 miljoen SynX — harde dop met deflatoire verbranding
Verdeling
Nul voormijn. Nul ICO. Nul VC. Nul toewijzing van oprichters. Ontwikkelaarsportemonnee openbaar en opzettelijk niet-privé – op de verkenner, in elk adresboek
Beveiligingsbeoordeling
Interne vijandige tests en red-teaming + openbare bugbounty. Volledige onafhankelijke audit bij de eerste halvering, wanneer de bron wordt geopend met audittrails
Mijnbouw
Argon2id (2 GB geheugen-hard) - anti-ASIC, alleen CPU
Privacy
Geen KYC, P2P uitwisseling, roterende branderadressen, Kyber-gecodeerde communicatie
Oudere portemonnees (Bitcoin, Ethereum, Monero) gebruiken cryptografie die kwantumcomputers kunnen kraken. Over $250 billion in blootgestelde Bitcoin-adressen lopen al gevaar.