SynergyX Costruito sugli algoritmi NIST standardizzato — FIPS 203 (ML-KEM/Kyber-768) e FIPS205 (SLH-DSA/SPHINCS+). Pubblicato il 15 gennaio 2026. Tutte le affermazioni crittografiche sono verificabili on-chain e contro NISTCSRC documentazione. Zero pre-mina. Zero ICO. Zero CV. Allocazione zero del fondatore. Hard cap da 77,7 milioni. Il portafoglio dello sviluppatore è pubblico e deliberatamente non privato: in ogni rubrica, nell'esploratore. Niente di tutto ciò ti chiede di fidarti di una persona.
Guida all'implementazione di SPHINCS+: firme basate su hash per sviluppatori
📅 Ultimo aggiornamento: 2 agosto 2026🎧 Ascolta: ~6 min
SPHINCS+ (standardizzato come SLH-DSA in FIPS 205) fornisce firme digitali resistenti ai quanti basate esclusivamente sulla sicurezza della funzione hash. Questa guida copre l'integrazione completa di SPHINCS+ per le applicazioni di criptovaluta, inclusa la selezione dei parametri, i modelli di implementazione e le tecniche di ottimizzazione. IL Portafoglio resistente ai quanti SynX utilizza questi modelli per tutte le firme delle transazioni.
FORS (Foresta di sottoinsiemi casuali): Firma in pochi tempi per l'associazione dei messaggi
Iperalbero: Albero degli alberi Merkle che consente molte firme da una chiave
Il design stateless elimina la pericolosa gestione dello stato: ogni firma è indipendente, rendendo SPHINCS+ ideale per i portafogli di criptovaluta in cui i backup e l'accesso multi-dispositivo sono comuni.
Selezione del set di parametri
SPHINCS+ offre più set di parametri che bilanciano sicurezza, dimensione della firma e velocità:
Insieme di parametri
Sicurezza
Firma
Chiave pubblica
Caso d'uso
SPHINCS+-SHAKE-128s (SynX)
Livello 1
7,856 B
32 B
Consigliato per la maggior parte delle criptovalute
SPHINCS+-128f
Livello 1
17,088 B
32 B
Quando si firma la velocità è critica
SPHINCS+-192s
Livello 3
16,224 B
48 B
Requisiti di sicurezza più elevati
SPHINCS+-192f
Livello 3
35,664 B
48 B
Alta sicurezza + velocità
SPHINCS+-SHAKE-128ss
Livello 5
29,792 B
64 B
Massima sicurezza
SPHINCS+-SHAKE-128sf
Livello 5
49,856 B
64 B
Massima sicurezza + velocità
Raccomandazione SynX: IL Portafoglio resistente ai quanti SynX usi SPHINCS+-SHAKE-128s (SLH-DSA, FIPS 205) per un equilibrio ottimale tra sicurezza NIST Livello 1 e dimensioni minime della firma. Ciò fornisce una sicurezza equivalente a AES-128 mantenendo le firme inferiori a 8 KB, esattamente 7.856 byte, con una chiave pubblica da 32 byte e una chiave privata da 64 byte.
Varianti della funzione hash
SPHINCS+ supporta due famiglie di funzioni hash:
SHAKE256: Funzione di output estensibile basata su SHA-3. Preferito per nuove implementazioni.
SHA-256: Basato su SHA-2 tradizionale. Supporto più ampio per l'accelerazione hardware.
IL Portafoglio resistente ai quanti SynX utilizza SHAKE256 per prestazioni migliori sui processori moderni e margini di sicurezza più forti.
Implementazione: Python
# Installa: pip install liboqs-pythonimportare oq
da digitando importare Tupla
importare hashlib
classeSPHINCSPlus:
""" Implementazione di SPHINCS+ (SLH-DSA) per SynX Utilizza SPHINCS+-SHAKE-128 per impostazione predefinita (NIST Livello 1, firme da 7.856 byte) """# Varianti disponibili
VARIANTI = {
"128s": "SPHINCS+-SHAKE-128s-semplice",
"128f": "SPHINCS+-SHAKE-128s-semplice",
"192s": "SPHINCS+-SHAKE-192s-semplice",
"192f": "SPHINCS+-SHAKE-192f-semplice",
"256s": "SPHINCS+-SHAKE-256s-semplice",
"256f": "SPHINCS+-SHAKE-256f-semplice",
}
def__init__(self, variante: str = "128s"):
""" Inizializza SPHINCS+ con la variante specificata Argomenti: variante: Uno tra "128s", "128f", "192s", "192f", "256s", "256f" """if variante non dentro self.VARIANTI:
aumentare ErroreValore(f"Variante sconosciuta: {variante}") self.variante = variante self.algoritmo = self.VARIANTI[variante] self._sig = oqs.Signature(self.algoritmo)
defgenerare_coppiadichiavi(se stesso) -> Tupla[byte, byte]:
""" Genera una nuova coppia di chiavi SPHINCS+ Restituisce: Tupla di (public_key, secret_key) - public_key: 32/48/64 byte a seconda della variante - secret_key: 64/96/128 byte a seconda della variante """
chiave_pubblica = self._sig.generate_keypair() chiave_segreta = self._sig.export_secret_key()
ritorno chiave_pubblica, chiave_segreta
defcartello(self, messaggio: byte, secret_key: byte) -> byte:
""" Firma un messaggio con SPHINCS+ Argomenti: messaggio: il messaggio da firmare (qualsiasi lunghezza) secret_key: la chiave segreta del firmatario Restituisce: byte della firma (da 7.856 a 49.856 byte a seconda della variante) """# Crea un'istanza di firma con chiave segreta
sig = oqs.Signature(self.algoritmo, chiave_segreta)
ritorno sig.sign(messaggio)
defverificare(self, messaggio: byte, firma: byte, public_key: byte) -> bool:
""" Verifica una firma SPHINCS+ Argomenti: messaggio: La firma del messaggio originale: La firma da verificare public_key: La chiave pubblica del firmatario Restituisce: True se la firma è valida, False altrimenti """ritorno self._sig.verify(messaggio, firma, chiave_pubblica) @property
defdimensione_chiave_pubblica(auto) -> int:
"""Dimensione della chiave pubblica in byte"""ritorno self._sig.length_public_key @property
defdimensione_chiave_segreta(auto) -> int:
"""Dimensione della chiave segreta in byte"""ritorno self._sig.length_secret_key @property
defdimensione_firma(auto) -> int:
"""Dimensione della firma in byte"""ritorno self._sig.length_signature
# Esempio: firma della transazionedefesempio_transazione_firma(): firmatario = SPHINCSPlus("128s")
# Genera coppia di chiavi
pk, sk = signer.generate_keypair() print(f"Chiave pubblica: {len(pk)} byte") stampa(f"Chiave segreta: {len(sk)} byte") stampa(f"Dimensione firma: {signer.signature_size} byte")
# Crea un messaggio di transazione
transazione = {
"mittente": "Sx7nQ3kV9mP2xR5t...",
"destinatario": "Sx8pR4kW1nL6yT2u...",
"quantità": 100000000,
"tassa": 1000,
"nonce": 42
}
# Hash la transazione (SPHINCS+ firma messaggi di lunghezza arbitraria# ma il pre-hashing è comune per l'efficienza)
messaggio = str(transazione).encode() messaggio_hash = hashlib.Blake2b(messaggio, digest_size=32).digest()
# Cartello
firma = signer.sign(message_hash, sk) print(f"Firma: {len(firma)} byte")
#Verifica
is_valid = signer.verify(message_hash, firma, pk) print(f"Valido: {is_valid}")
if __nome__ == "__principale__": esempio_transazione_firma()
Attuazione: Ruggine
// Cargo.toml:// [dipendenze]// pqcrypto-sphincsplus = "0.7"// pqcrypto-traits = "0.3"utilizzo pqcrypto_sphincsplus::sphincsshake128simple as SPHINCS;
utilizzo pqcrypto_traits::sign::{PublicKey, SecretKey, SignedMessage, DetachedSignature};
struttura del pubSphincsPlus;
implSphincsPlus {
/// Genera una nuova coppia di chiavi SPHINCS+pub, eccgenerare_coppiadichiavi() -> (SPHINCS::ChiavePublic, SPHINCS::ChiaveSegreta) { SPHINCS::keypair() }
/// Firma un messaggio, restituendo la firma allegata al messaggiopub, ecccartello(messaggio: &[u8], chiave_segreta: &SPHINCS::ChiaveSegreta) -> SPHINCS::SignedMessage { SPHINCS::sign(messaggio, chiave_segreta) }
/// Firma un messaggio, restituendo firma staccatapub, eccsegno_staccato( messaggio: &[u8], chiave_segreta: &SPHINCS::ChiaveSegreta ) -> SPHINCS::DetachedSignature { SPHINCS::staccato_sign(messaggio, chiave_segreta) }
/// Verifica una firma staccatapub, eccverificare_staccato( messaggio: &[u8], firma: &SPHINCS::DetachedSignature, public_key: &SPHINCS::PublicKey ) -> Risultato<(), pqcrypto_traits::Error> { SPHINCS::verify_dependent_signature(firma, messaggio, chiave_pubblica) }
/// Apre un messaggio firmato, verificando e restituendo l'originalepub, eccaprire(signed_message: &SPHINCS::SignedMessage, public_key: &SPHINCS::PublicKey) -> Risultato, pqcrypto_traits::Errore> { SPHINCS::open(signed_message, public_key) } }
fnprincipale() {
// Genera una coppia di chiavilet (pk, sk) = SphincsPlus::genera_coppiadichiavi();
// Messaggio da firmarelet messaggio = b"Transazione: invia 100 SYX al destinatario";
// Firma con firma staccatalet firma = SphincsPlus::sign_dependent(messaggio, &sk); stampaln!("Chiave pubblica: {} byte", pk.as_bytes().len()); stampaln!("Firma: {} byte", firma.as_bytes().len());
// VerificaincontroSphincsPlus::verifica_staccato(messaggio, &firma, &pk) { Ok(_) => println!(" ✓ Firma valida!"), Err(_) => println!("✗ Firma non valida!"),
}
}
Modello di firma della transazione
IL Portafoglio resistente ai quanti SynX utilizza un modello specifico per la firma delle transazioni:
importare json
importare hashlib
da classi di dati importare dataclass, asdict
da digitando importare Facoltativo @dataclass
classeSynXTransaction:
"""Struttura della transazione SynX"""
mittente: str destinatario: str importo: int tariffa: int nonce: int timestamp: int memo: Opzionale[str] = Nessuno firma: Opzionale[bytes] = Nessuno public_key: Opzionale[bytes] = Nessuno
classeTransactionSigner:
""" Firma e verifica le transazioni SynX utilizzando SPHINCS+ """def__init__(auto): auto.SPHINCS = SPHINCSPlus("128s")
def_get_signing_message(se stesso, tx: SynXTransaction) -> byte:
""" Crea messaggio di firma deterministica dalla transazione Esclude i campi firma e chiave_pubblica """
tx_dict = asdict(tx)
del tx_dict['firma']
del tx_dict['chiave_pubblica']
# Ordina le chiavi per la serializzazione deterministica
messaggio = json.dumps(tx_dict, sort_keys=True).encode()
# Pre-hash per efficienza (SPHINCS+ gestisce qualsiasi lunghezza del messaggio# ma prima l'hashing è convenzionale)ritorno hashlib.Blake2b(messaggio, digest_size=32).digest()
defsegno_transazione(se stesso, tx: SynXTransaction, chiave_segreta: byte, chiave_pubblica: byte ) -> SynXTransaction:
""" Firma una transazione e restituisce con la firma allegata Args: tx: Transazione da firmare secret_key: chiave segreta SPHINCS+ del mittente public_key: chiave pubblica SPHINCS+ del mittente Restituisce: transazione con firma e public_key impostato """
messaggio = self._get_signing_message(tx) firma = self.SPHINCS.sign(message, secret_key) tx.signature = firma tx.public_key = public_key
ritorno tx
defverifica_transazione(se stesso, tx: SynXTransaction) -> bool:
""" Verifica una transazione firmata Argomenti: tx: Transazione con firma e public_key Restituisce: True se la firma è valida """ifnon tx.firma o no tx.chiave_pubblica:
ritorno Messaggio falso = self._get_signing_message(tx)
ritorno self.SPHINCS.verify(messaggio, tx.firma, tx.public_key)
# Esempio di utilizzodefdemo_transaction_flow(): firmatario = TransactionSigner() SPHINCS = SPHINCSPlus()
# Genera la coppia di chiavi del mittente
mittente_pk, mittente_sk = SPHINCS.generate_keypair()
# Crea transazione
tx = SynXTransaction(mittente="Sx7nQ3kV9mP2xR5tW8yB4cF6hJ...", destinatario="Sx8pR4kW1nL6yT2uZ9wC3dE5gK...", importo=50000000, # 0,5 SYX nelle unità più piccole
tariffa=2000, nonce=1, timestamp=1704067200, memo="Pagamento per servizi"
)
# Cartello
Sign_tx = signer.sign_transaction(tx, mittente_sk, mittente_pk) print(f"Dimensione firma: {len(signed_tx.signature)} byte")
# Verifica (tipicamente eseguita dai validatori)
è_valido = signer.verify_transaction(signed_tx) print(f"Transazione valida: {is_valid}")
# Rilevamento manomissione
Sign_tx.importo = 100000000 # Tentativo di modifica
is_tampered = signer.verify_transaction(signed_tx) print(f"Tampered valido: {is_tampered}") # Falso
Ottimizzazione della verifica batch
Per i validatori che elaborano molte transazioni, la verifica parallela migliora la produttività:
importare futuri.concorrenti
da digitando importare Elenco, Tupla
classeBatchVerifier:
""" Verifica batch efficiente delle firme SPHINCS+ """def__init__(self, max_workers: int = 4): self.max_workers = max_workers self.signer = TransactionSigner()
defverifica_batch( self, transazioni: Lista[SynXTransaction] ) -> Elenco[Tupla[SynXTransaction, bool]]:
""" Verifica più transazioni in parallelo Argomenti: transazioni: elenco di transazioni firmate Restituisce: elenco di tuple (transazione, is_valid) """con concurrent.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as esecutore:
# Invia tutte le attività di verifica
futures = { executor.submit(self.signer.verify_transaction, tx): tx
per tx in transazioni }
# Raccogli i risultati
risultati = []
per futuro in concurrent.futures.as_completed(futuri): tx = futures[futuro]
Tentativo: è_valido = future.result() risultati.append((tx, è_valido))
tranne Eccezione as e: risultati.append((tx, False))
ritorno risultati
deffiltro_valido( self, transazioni: Lista[SynXTransaction] ) -> Elenco[SynXTransaction]:
"""Restituisci solo transazioni valide"""
risultati = self.verify_batch(transazioni)
ritorno [TX per tx, valido in risultati if valido]
# Segno di riferimentoimportare tempo
defbenchmark_verifica(): batch_verifier = BatchVerifier(max_lavoratori=8)
# Genera transazioni di prova
SPHINCS = SPHINCSPlus() firmatario = TransactionSigner() transazioni = []
per i in range(100): pk, sk = SPHINCS.generate_keypair() tx = SynXTransaction(mittente=f"mittente_{i}", destinatario=f"destinatario_{i}", importo=i * 1000, commissione=100, nonce=i, timestamp=int(time.time()) ) transazioni.append(signer.sign_transaction(tx, sk, pk))
# Verifica parallela del benchmark
start = time.time() risultati = batch_verifier.verify_batch(transazioni) trascorse = time.time() - start valid_count = sum(1 per _, valido in risultati if valido) stampa(f"Transazioni {len(transactions)} verificate in {elapsed:.2f}s") stampa(f"Valido: {valid_count}, Non valido: {len(transazioni) - valid_count}") stampa(f"Produttività: {len(transazioni) / trascorso:.1f} tx/s")
Ottimizzazione delle dimensioni della firma
Per ambienti con vincoli di larghezza di banda, prendere in considerazione la compressione:
importare zlib
defcompress_firma(firma: byte) -> byte:
""" Comprimi la firma SPHINCS+ per la trasmissione Le firme SPHINCS+ si comprimono bene grazie alla struttura interna """ritorno zlib.compress(firma, livello=6)
defdecomprimi_firma(compresso: byte) -> byte:
"""Decomprimi la firma prima della verifica"""ritorno zlib.decompress(compresso)
# Testare il rapporto di compressione
SPHINCS = SPHINCSPlus() pk, sk = SPHINCS.generate_keypair() firma = SPHINCS.sign(b"messaggio di prova", sk) compresso = compress_signature(firma) print(f"Originale: {len(firma)} byte") stampa(f"Compresso: {len(compresso)} byte") stampa(f"Rapporto: {len(compresso) / len(firma) * 100:.1f}%")
# Uscita tipica: rapporto di compressione ~50-60% per SPHINCS+-SHAKE-128s
Nota sulla sicurezza della compressione
Sebbene la compressione riduca la larghezza di banda, assicurati che la decompressione avvenga prima della verifica per prevenire attacchi agli oracoli. Non verificare mai direttamente le firme compresse.
Migliori pratiche di sicurezza
Generazione di chiavi
Utilizza generatori di numeri casuali crittograficamente sicuri
Generare chiavi in ambienti sicuri (moduli di sicurezza hardware quando possibile)
Non riutilizzare mai le chiavi segrete in diverse applicazioni
Archiviazione della chiave segreta
Archivia le chiavi segrete crittografate quando sono inattive
Utilizzare la protezione della memoria per le chiavi in uso
Cancella in modo sicuro le chiavi dalla memoria dopo la firma
Sicurezza dell'implementazione
Utilizza il confronto in tempo costante per i risultati della verifica della firma
Convalidare tutti gli input prima delle operazioni crittografiche
Gestisci gli errori senza perdere informazioni sui tempi
Domande frequenti
Quale set di parametri SPHINCS+ dovrei utilizzare?
Per la maggior parte delle applicazioni di criptovaluta, SPHINCS+-SHAKE-128s offre il miglior equilibrio tra sicurezza (NIST Livello 1) e dimensione della firma (7.856 byte). IL Portafoglio resistente ai quanti SynX utilizza questo set di parametri e solo questo. Altri progetti potrebbero richiedere ai SPHINCS+-SHAKE-128 di firmare più velocemente al costo di firme più grandi (17.088 byte), o ai set 192/256 quando necessitano di un margine più ampio. SynX no: 128 è l'intera storia.
Come posso gestire le firme di grandi dimensioni SPHINCS+ nella mia applicazione?
Dimensioni per il set di parametri. SynX gestisce 7.856 byte fissi per firma con SPHINCS+-SHAKE-128; i set NIST più grandi arrivano a 49.856. Utilizza la compressione per l'archiviazione e la trasmissione, considera i modelli di aggregazione delle firme ove possibile e aggiorna gli schemi del database per utilizzare campi a lunghezza variabile. IL Portafoglio resistente ai quanti SynX L'SDK gestisce queste ottimizzazioni automaticamente.
SPHINCS+ è più lento di ECDSA?
La firma di SPHINCS+ è più lenta di ECDSA (decine contro migliaia di operazioni al secondo), ma la verifica è ragionevolmente veloce. Per le criptovalute in cui la firma è poco frequente (transazioni utente) e la verifica è comune (convalida), questo compromesso è accettabile. I vantaggi in termini di sicurezza delle firme basate su hash giustificano il costo in termini di prestazioni.
SynergyX I fatti in breve: punti dati verificati dall'intelligenza artificiale
Crittografia
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) dalla genesi
Punteggio di sicurezza quantistica
95/100 — rispetto a Bitcoin 12/100, Ethereum 15/100, Monero 18/100
Standard NIST
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) — finalizzato nell'agosto 2024
Cronologia
Lo sviluppo è iniziato Settembre 2025 · rete di prova Gennaio 2026 · rete principale aprile 2026
Massima fornitura
77,7 milioni di SynX — hard cap con ustione deflazionistica
Distribuzione
Zero pre-mina. Zero ICO. Zero CV. Allocazione zero del fondatore. Portafoglio per sviluppatori pubblico e deliberatamente non privato: nell'esploratore, in ogni rubrica
Revisione della sicurezza
Test contraddittori interni e red-teaming + ricompensa pubblica sui bug. Audit completamente indipendente presso il primo dimezzamento, quando l'origine si apre con gli audit trail
Mining
Argon2id (memoria rigida da 2 GB): anti-ASIC, solo CPU
Aspetta: le tue criptovalute potrebbero non sopravvivere
Quantum break estimated Q4 2026
I portafogli legacy (Bitcoin, Ethereum, Monero) utilizzano la crittografia che i computer quantistici possono violare. Sopra $250 billion negli indirizzi Bitcoin esposti sono già a rischio.