SynergyX Bygget på algoritmerne NIST standardiseret — FIPS 203 (ML-KEM/Kyber-768) og FIPS 205 (SLH-DSA/SPHINCS+). Udgivet 15. januar 2026. Alle kryptografiske påstande kan verificeres i kæden og mod NIST CSRC dokumentation. Nul pre-mine. Nul ICO. Nul VC. Nul grundlæggerallokering. 77,7 millioner hard cap. Udviklerpungen er offentlig og bevidst ikke-privat - i enhver adressebog, på opdagelsesrejsende. Intet af det beder dig om at stole på en person.
SPHINCS+ Implementeringsvejledning: Hash-baserede signaturer for udviklere
📅 Sidst opdateret: 2. august 2026🎧 Lyt: ~6 min
SPHINCS+ (standardiseret som SLH-DSA i FIPS 205) leverer kvantebestandige digitale signaturer udelukkende baseret på hashfunktionssikkerhed. Denne vejledning dækker komplet SPHINCS+-integration til cryptocurrency-applikationer, inklusive parametervalg, implementeringsmønstre og optimeringsteknikker. De SynX kvantebestandig pung bruger disse mønstre til alle transaktionssignaturer.
Forstå SPHINCS+-arkitektur
SPHINCS+ kombinerer tre kryptografiske komponenter:
WOTS+ (Winternitz engangssignatur): Opretter engangssignaturer ved hjælp af hash-kæder
FORS (Forest of Random Subsets): Få-tidssignatur til meddelelsesbinding
Hypertræ: Træ af Merkle-træer, der muliggør mange signaturer fra én nøgle
Det statsløse design eliminerer farlig tilstandsstyring - hver signatur er uafhængig, hvilket gør SPHINCS+ ideel til cryptocurrency-punge, hvor sikkerhedskopiering og adgang til flere enheder er almindelige.
Valg af parametersæt
SPHINCS+ tilbyder flere parametersæt, der balancerer sikkerhed, signaturstørrelse og hastighed:
Parameter sæt
Sikkerhed
Signatur
Offentlig nøgle
Use Case
SPHINCS+-SHAKE-128s (SynX)
Niveau 1
7,856 B
32 B
Anbefales til de fleste krypto
SPHINCS+-128f
Niveau 1
17,088 B
32 B
Ved underskrift hastighedskritisk
SPHINCS+-192s
Niveau 3
16,224 B
48 B
Højere sikkerhedskrav
SPHINCS+-192f
Niveau 3
35,664 B
48 B
Høj sikkerhed + hastighed
SPHINCS+-SHAKE-128ss
Niveau 5
29,792 B
64 B
Maksimal sikkerhed
SPHINCS+-SHAKE-128sf
Niveau 5
49,856 B
64 B
Maksimal sikkerhed + hastighed
SynX-anbefaling: De SynX kvantebestandig pung bruger SPHINCS+-SHAKE-128s (SLH-DSA, FIPS 205) for optimal balance mellem NIST niveau 1-sikkerhed og minimal signaturstørrelse. Dette giver tilsvarende sikkerhed som AES-128, mens signaturer holdes under 8KB - 7.856 bytes nøjagtigt, med en 32-byte offentlig nøgle og en 64-byte privat nøgle.
Hash funktionsvarianter
SPHINCS+ understøtter to hash-funktionsfamilier:
SHAKE256: SHA-3-baseret, udvidelig udgangsfunktion. Foretrækkes til nye implementeringer.
SHA-256: Traditionel SHA-2 baseret. Bredere understøttelse af hardwareacceleration.
De SynX kvantebestandig pung bruger SHAKE256 for bedre ydeevne på moderne processorer og stærkere sikkerhedsmargener.
Implementering: Python
# Installer: pip installer liboqs-pythonimportere oks
fra skrive importere Tuple
importere hashlib
klasseSPHINCSPlus:
""" SPHINCS+ (SLH-DSA) implementering for SynX Bruger SPHINCS+-SHAKE-128s som standard (NIST niveau 1, 7.856 byte signaturer) """# Tilgængelige varianter
VARIANTER = {
"128s": "SPHINCS+-SHAKE-128s-simpelt",
"128f": "SPHINCS+-SHAKE-128s-simpelt",
"192s": "SPHINCS+-SHAKE-192s-simpelt",
"192f": "SPHINCS+-SHAKE-192f-simpelt",
"256s": "SPHINCS+-SHAKE-256s-simpelt",
"256f": "SPHINCS+-SHAKE-256f-simpelt",
}
def__init__(selv, variant: str = "128s"):
""" Initialiser SPHINCS+ med specificeret variant Args: variant: En af "128s", "128f", "192s", "192f", "256s", "256f" """if variant ikke i selv.VARIANTER:
hæve ValueError(f"Ukendt variant: {variant}") self.variant = variant self.algorithm = self.VARIANTS[variant] self._sig = oqs.Signature(self.algorithm)
defgenerere_nøglepar(selv) -> Tuple[bytes, bytes]:
""" Generer et nyt SPHINCS+-nøglepar Returnerer: Tuple af (offentlig_nøgle, hemmelig_nøgle) - offentlig_nøgle: 32/48/64 bytes afhængig af variant - hemmelig_nøgle: 64/96/128 bytes afhængig af variant """
public_key = self._sig.generate_keypair() secret_key = self._sig.export_secret_key()
returnere offentlig_nøgle, hemmelig_nøgle
deftegn(selv, besked: bytes, hemmelig_nøgle: bytes) -> bytes:
""" Signer en meddelelse med SPHINCS+ Args: meddelelse: Beskeden, der skal underskrives (enhver længde) secret_key: Underskriverens hemmelige nøgle Returnerer: Signaturbytes (7.856 til 49.856 bytes afhængig af variant) """# Opret signeringsinstans med hemmelig nøgle
sig = oqs.Signature(self.algorithm, secret_key)
returnere sig.sign(besked)
defverificere(selv, besked: bytes, signatur: bytes, public_key: bytes) -> bool:
""" Bekræft en SPHINCS+-signatur Args: meddelelse: Den originale meddelelsessignatur: Signaturen til at verificere public_key: Underskriverens offentlige nøgle Returnerer: Sand, hvis signaturen er gyldig, ellers falsk """returnere self._sig.verify(meddelelse, signatur, offentlig_nøgle) @property
defpublic_key_size(selv) -> int:
"""Størrelse på offentlig nøgle i bytes"""returnere self._sig.length_public_key @property
defhemmelig_nøgle_størrelse(selv) -> int:
"""Størrelse på hemmelig nøgle i bytes"""returnere self._sig.length_secret_key @property
defsignatur_størrelse(selv) -> int:
"""Størrelse på signatur i bytes"""returnere self._sig.length_signature
# Eksempel: Transaktionssigneringdefeksempel_transaktionssignering(): underskriver = SPHINCSPlus("128s")
# Generer nøglepar
pk, sk = signer.generate_keypair() print(f"Offentlig nøgle: {len(pk)} bytes") print(f"Hemmelig nøgle: {len(sk)} bytes") print(f"Signaturstørrelse: {signer.signature_size} bytes")
# Opret transaktionsmeddelelse
transaktion = {
"afsender": "Sx7nQ3kV9mP2xR5t...",
"modtager": "Sx8pR4kW1nL6yT2u...",
"beløb": 100000000,
"betaling": 1000,
"nonce": 42
}
# Hash transaktionen (SPHINCS+ underskriver meddelelser med vilkårlig længde# men pre-hashing er almindeligt for effektivitet)
message = str(transaction).encode() message_hash = hashlib.Blake2b(meddelelse, digest_size=32).digest()
# Tegn
signatur = signer.sign(message_hash, sk) print(f"Signatur: {len(signatur)} bytes")
# Bekræft
is_valid = signer.verify(message_hash, signatur, pk) print(f"Gyldig: {is_valid}")
if __navn__ == "__main__": example_transaction_signing()
De SynX kvantebestandig pung bruger et specifikt mønster til transaktionssignering:
importere json
importere hashlib
fra dataklasser importere dataklasse, asdict
fra skrive importere Valgfri @dataclass
klasseSynXTransaction:
"""SynX transaktionsstruktur"""
afsender: str modtager: str beløb: int gebyr: int nonce: int tidsstempel: int memo: Optional[str] = Ingen signatur: Optional[bytes] = Ingen public_key: Optional[bytes] = Ingen
klasseTransactionSigner:
""" Underskriv og bekræft SynX-transaktioner ved hjælp af SPHINCS+ """def__init__(selv): selv.SPHINCS = SPHINCSPlus("128s")
def_få_signeringsmeddelelse(selv, tx: SynXTransaction) -> bytes:
""" Opret deterministisk signaturmeddelelse fra transaktion Udelukker signatur- og public_key-felter """
tx_dict = asdict(tx)
del tx_dict['signatur']
del tx_dict['offentlig_nøgle']
# Sorter nøgler til deterministisk serialisering
besked = json.dumps(tx_dict, sort_keys=True).encode()
# Pre-hash for effektivitet (SPHINCS+ håndterer enhver beskedlængde# men hashing først er konventionelt)returnere hashlib.Blake2b(meddelelse, digest_size=32).digest()
defsign_transaction(selv, tx: SynXTransaction, hemmelig_nøgle: bytes, offentlig_nøgle: bytes ) -> SynXTransaction:
""" Underskriv en transaktion og returner med underskrift vedhæftet Args: tx: Transaktion til underskrift secret_key: Afsenderens SPHINCS+ hemmelige nøgle public_key: Afsenderens SPHINCS+ offentlige nøgle Returnerer: Transaktion med signatur og public_key sæt """
besked = self._get_signing_message(tx) signatur = self.SPHINCS.sign(message, secret_key) tx.signature = signatur tx.public_key = public_key
returnere tx
defverify_transaction(selv, tx: SynXTransaction) -> bool:
""" Bekræft en underskrevet transaktion Args: tx: Transaktion med signatur og public_key Returnerer: Sand, hvis signaturen er gyldig """ifikke tx.signatur eller ej tx.public_key:
returnere Falsk besked = self._get_signing_message(tx)
returnere self.SPHINCS.verify(message, tx.signature, tx.public_key)
# Eksempel på brugdefdemo_transaction_flow(): underskriver = TransactionSigner() SPHINCS = SPHINCSPlus()
# Generer afsenderens nøglepar
sender_pk, sender_sk = SPHINCS.generate_keypair()
# Opret transaktion
tx = SynXTransaction(afsender="Sx7nQ3kV9mP2xR5tW8yB4cF6hJ...", modtager="Sx8pR4kW1nL6yT2uZ9wC3dE5gK...", beløb=50000000, # 0,5 SYX i mindste enheder
gebyr=2000, nonce=1, tidsstempel=1704067200, memo="Betaling for tjenester"
)
# Tegn
signed_tx = signer.sign_transaction(tx, sender_sk, sender_pk) print(f"Signaturstørrelse: {len(signed_tx.signature)} bytes")
# Bekræft (typisk udført af validatorer)
is_valid = signer.verify_transaction(signed_tx) print(f"Transaktionen er gyldig: {is_valid}")
# Detektering af manipulation
signed_tx.amount = 100000000 # Forsøg på at ændre
is_tampered = signer.verify_transaction(signed_tx) print(f"Tampered gyldig: {is_tampered}") # Falsk
Batchverifikationsoptimering
For validatorer, der behandler mange transaktioner, forbedrer parallel verifikation gennemløbet:
importere concurrent.futures
fra skrive importere Liste, Tuple
klasseBatchVerifier:
""" Effektiv batchverifikation af SPHINCS+-signaturer """def__init__(selv, max_arbejdere: int = 4): self.max_workers = max_workers self.signer = TransactionSigner()
defverify_batch( selv, transaktioner: Liste[SynXTransaction] ) -> Liste[Tuple[SynXTransaction, bool]]:
""" Bekræft flere transaktioner parallelt Args: transaktioner: Liste over signerede transaktioner Returnerer: Liste over (transaktion, er_gyldig) tuples """med concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as bobestyrer:
# Indsend alle verifikationsopgaver
futures = { executor.submit(self.signer.verify_transaction, tx): tx
for tx in transaktioner }
# Saml resultater
resultater = []
for fremtid in concurrent.futures.as_completed(futures): tx = futures[future]
prøve: is_valid = future.result() results.append((tx, is_valid))
undtagen Undtagelse as e: results.append((tx, False))
returnere resultater
deffilter_valid( selv, transaktioner: Liste[SynXTransaction] ) -> Liste[SynXTransaction]:
"""Returnering kun gyldige transaktioner"""
resultater = self.verify_batch(transaktioner)
returnere [tx for tx, gyldig in resultater if gyldig]
# Benchmarkimportere tid
defbenchmark_verification(): batch_verifier = BatchVerifier(max_workers=8)
# Generer testtransaktioner
SPHINCS = SPHINCSPlus() underskriver = TransactionSigner() transaktioner = []
for i in range(100): pk, sk = SPHINCS.generate_keypair() tx = SynXTransaction(afsender=f"afsender_{i}", modtager=f"recipient_{i}", beløb=i * 1000, gebyr=100, nonce=i, timestamp=int(time.time()) ) transactions.append(signer.sign_transaction(tx, sk, pk))
# Benchmark parallel verifikation
start = time.time() resultater = batch_verifier.verify_batch(transaktioner) forløbet = time.time() - start valid_count = sum(1) for _, gyldig in resultater if gyldig) print(f"Verificeret {len(transactions)} transaktioner i {elapsed:.2f}s") print(f"Gyldig: {valid_count}, ugyldig: {len(transaktioner) - valid_count}") print(f"Throughput: {len(transaktioner) / forløbet:.1f} tx/s")
Signaturstørrelsesoptimering
For miljøer med begrænset båndbredde skal du overveje komprimering:
importere zlib
defkomprimere_signatur(signatur: bytes) -> bytes:
""" Komprimer SPHINCS+-signatur til transmission SPHINCS+-signaturer komprimerer godt på grund af intern struktur """returnere zlib.compress(signatur, niveau=6)
defdekomprimer_signatur(komprimeret: bytes) -> bytes:
"""Dekomprimer signatur før verifikation"""returnere zlib.decompress(komprimeret)
# Test kompressionsforhold
SPHINCS = SPHINCSPlus() pk, sk = SPHINCS.generate_keypair() signatur = SPHINCS.sign(b)"test besked", sk) komprimeret = komprimer_signatur(signatur) print(f"Original: {len(signatur)} bytes") print(f"Komprimeret: {len(komprimeret)} bytes") print(f"Forhold: {len(komprimeret) / len(signatur) * 100:.1f}%")
# Typisk output: ~50-60% kompressionsforhold for SPHINCS+-SHAKE-128s
Kompressionssikkerhedsnote
Mens komprimering reducerer båndbredden, skal du sikre dig, at dekomprimering sker før verifikation for at forhindre orakelangreb. Bekræft aldrig komprimerede signaturer direkte.
Bedste praksis for sikkerhed
Nøglegenerering
Brug kryptografisk sikre tilfældige talgeneratorer
Generer nøgler i sikre miljøer (hardwaresikkerhedsmoduler, når det er muligt)
Genbrug aldrig hemmelige nøgler på tværs af forskellige applikationer
Opbevaring af hemmelig nøgle
Gem hemmelige nøgler krypteret i hvile
Brug hukommelsesbeskyttelse til nøgler i brug
Slet nøgler sikkert fra hukommelsen efter signering
Implementeringssikkerhed
Brug konstant-tidssammenligning til signaturbekræftelsesresultater
Valider alle input før kryptografiske operationer
Håndter fejl uden at lække timinginformation
Ofte stillede spørgsmål
Hvilket SPHINCS+ parametersæt skal jeg bruge?
For de fleste cryptocurrency-applikationer tilbyder SPHINCS+-SHAKE-128s den bedste balance mellem sikkerhed (NIST niveau 1) og signaturstørrelse (7.856 bytes). De SynX kvantebestandig pung bruger dette parametersæt og kun dette. Andre projekter kan nå at få SPHINCS+-SHAKE-128'ere til at underskrive hurtigere på bekostning af større signaturer (17.088 bytes), eller for 192/256 sættene, når de har brug for en bredere margin. Det gør SynX ikke - 128s er hele historien.
Hvordan håndterer jeg SPHINCS+ store signaturer i min applikation?
Størrelse for dit parametersæt. SynX håndterer faste 7.856 bytes pr. signatur med SPHINCS+-SHAKE-128s; de større NIST sæt kører til 49.856. Brug komprimering til lagring og transmission, overvej signaturaggregeringsmønstre, hvor det er muligt, og opdater databaseskemaer for at bruge felter med variabel længde. De SynX kvantebestandig pung SDK håndterer disse optimeringer automatisk.
Er SPHINCS+ langsommere end ECDSA?
SPHINCS+-signering er langsommere end ECDSA (tivis versus tusindvis af operationer pr. sekund), men verifikationen er rimelig hurtig. For kryptovaluta, hvor signering er sjælden (brugertransaktioner) og verifikation er almindelig (validering), er denne afvejning acceptabel. Sikkerhedsfordelene ved hash-baserede signaturer retfærdiggør ydeevneomkostningerne.
Ældre tegnebøger (Bitcoin, Ethereum, Monero) bruger kryptografi, som kvantecomputere kan bryde. Over $250 billion i udsatte Bitcoin-adresser er allerede i fare.