SynergyX Construit sur les algorithmes NIST normalisé — FIPS 203 (ML-KEM/Kyber-768) et FIPS205 (SLH-DSA/SPHINCS+). Publié le 15 janvier 2026. Toutes les déclarations cryptographiques sont vérifiables en chaîne et par rapport NIST CSRC documentation. Zéro pré-mine. Zéro ICO. Zéro VC. Zéro allocation de fondateur. Plafond ferme de 77,7 millions. Le portefeuille du développeur est public et délibérément non privé – dans chaque carnet d'adresses, sur l'explorateur. Rien de tout cela ne vous demande de faire confiance à une personne.
Tutoriel d'intégration Kyber-768 : guide de mise en œuvre complet
📅 Dernière mise à jour : 2 août 2026🎧 Écoute : ~6 min
Kyber-768 (standardisé sous le nom de ML-KEM-768 dans FIPS 203) fournit une encapsulation de clé à résistance quantique pour un échange de clé sécurisé. Ce didacticiel présente l'intégration complète de Kyber-768 avec des exemples de code pratiques dans plusieurs langues. Le Portefeuille résistant aux quantiques SynX utilise ces modèles pour toutes les opérations d'échange de clés.
Comprendre les mécanismes d'encapsulation clés
Un mécanisme d'encapsulation de clé (KEM) permet à deux parties d'établir un secret partagé sur un canal non sécurisé :
Génération de clé : Alice génère une paire de clés (clé publique, clé secrète)
Encapsulation : Bob utilise la clé publique d'Alice pour générer un secret partagé et un texte chiffré
Décapsulation : Alice utilise sa clé secrète pour récupérer le secret partagé du texte chiffré
Contrairement à l'échange de clés Diffie-Hellman, les KEM produisent le secret partagé en interne plutôt que de le calculer à partir des valeurs échangées. Cela simplifie les preuves de sécurité et permet des constructions post-quantiques.
Pourquoi KEM au lieu d'un échange de clés ?
Le Diffie-Hellman classique nécessite le calcul de logarithmes discrets, que les ordinateurs quantiques résolvent efficacement. Kyber-768 utilise des problèmes de réseau (Module-LWE) qui résistent aux algorithmes quantiques connus. La construction KEM offre la sécurité IND-CCA2, la notion la plus solide de sécurité du texte chiffré choisi.
Paramètres Kyber-768
Paramètre
Valeur
Description
Niveau de sécurité
NIST niveau 3
~ Sécurité classique 192 bits
Taille de la clé publique
1 184 octets
Transmis aux expéditeurs
Taille de la clé secrète
2 400 octets
Gardé privé
Taille du texte chiffré
1 088 octets
Secret encapsulé
Taille du secret partagé
32 octets
Pour la dérivation de clé
Implémentation : Python
Utilisation des liaisons Python Open Quantum Safe (OQS) :
# Installer : pip install liboqs-pythonimporter oqs
depuis dactylographie importer Tuple
classeKyber768:
""" Encapsulation de clé Kyber-768 pour SynX Fournit une sécurité NIST niveau 3 (équivalent à AES-192) """
ALGORITHME = "Kyber768"déf__init__(soi):
"""Initialiser avec une nouvelle instance KEM"""
self._kem = oqs.KeyEncapsulation (self.ALGORITHME)
défgénérer_keypair(soi) -> Tuple[octets, octets] :
""" Générer une nouvelle paire de clés Kyber-768 Renvoie : Tuple de (public_key, secret_key) - public_key : 1 184 octets, partage sécurisé - secret_key : 2 400 octets, rester privé """
public_key = self._kem.generate_keypair() secret_key = self._kem.export_secret_key()
retour clé_publique, clé_secrète
défencapsuler(soi, destinataire_public_key : octets) -> Tuple[octets, octets] :
""" Encapsuler un secret partagé pour un destinataire Args : destinataire_public_key : clé publique Kyber-768 du destinataire Renvoie : Tuple de (ciphertext, shared_secret) - texte chiffré : 1 088 octets, envoyer au destinataire - shared_secret : 32 octets, utiliser pour le cryptage """
texte chiffré, shared_secret = self._kem.encap_secret (recipient_public_key)
retour texte chiffré, shared_secret
défdécapsuler(soi, texte chiffré : octets, clé_secrète : octets) -> octets :
""" Décapsulez pour récupérer le secret partagé Args : texte chiffré : le texte chiffré de 1 088 octets de l'encapsulation secret_key : votre clé secrète Kyber-768 Renvoie : shared_secret : 32 octets, identique au secret de l'encapsulateur """# Créer une nouvelle instance pour la décapsulation
kem = oqs.KeyEncapsulation (self.ALGORITHM, secret_key)
retour kem.decap_secret (texte chiffré)
# Exemple d'utilisationdéfdemo_key_exchange() : Kyber = Kyber768()
# Alice génère sa paire de clés
alice_pk, alice_sk = Kyber.generate_keypair() print(f"Clé publique Alice : {len(alice_pk)} octets")
# Bob dévoile un secret pour Alice
texte chiffré, bob_secret = Kyber.encapsulate (alice_pk) print (f"Texte chiffré : {len(texte chiffré)} octets") imprimer(f"Le secret partagé de Bob : {bob_secret.hex()[:32]}...")
# Alice décapsule pour obtenir le même secret
alice_secret = Kyber.decapsulate (texte chiffré, alice_sk) print (f"Le secret partagé d'Alice : {alice_secret.hex()[:32]}...")
# Vérifiez qu'ils correspondentaffirmer alice_secret == bob_secret imprimer(" ✓ Échange de clés réussi !")
if __nom__ == "__principal__": demo_key_exchange()
Implémentation : Rouille
Utilisation de la caisse pqcrypto pour l'implémentation native de Rust :
// Cargo.toml :// [dépendances]// pqcrypto-kyber = "0.8"// pqcrypto-traits = "0.3"utiliser pqcrypto_kyber :: kyber768;
utiliser pqcrypto_traits::kem::{Ciphertext, PublicKey, SecretKey, SharedSecret} ;
structure de pubKyber768Kem;
impliciteKyber768Kem {
/// Générer une nouvelle paire de clés Kyber-768pub fngénérer_keypair() -> (kyber768::PublicKey, kyber768::SecretKey) { kyber768::keypair() }
/// Encapsuler un secret partagépub fnencapsuler( clé_publique : &kyber768::PublicKey) -> (kyber768::Ciphertext, kyber768::SharedSecret) { kyber768::encapsulate(public_key) }
/// Décapsuler pour récupérer le secret partagépub fndécapsuler( texte chiffré : &kyber768::Ciphertext, secret_key : &kyber768::SecretKey ) -> kyber768::SharedSecret { kyber768::decapsulate(ciphertext, secret_key) } }
fnprincipal() {
// Alice génère une paire de cléslaisser (alice_pk, alice_sk) = Kyber768Kem::generate_keypair();
// Bob encapsulelaisser (texte chiffré, bob_secret) = Kyber768Kem::encapsuler(&alice_pk);
// Alice décapsulelaisser alice_secret = Kyber768Kem::décapsuler(&ciphertext, &alice_sk);
// Vérifier la correspondanceassert_eq!( bob_secret.as_bytes(), alice_secret.as_bytes() ); imprimer!(" ✓ Échange de clés réussi !");
}
Implémentation : Aller
Utilisation de la bibliothèque circl de Cloudflare :
// va chercher github.com/cloudflare/circlemballer principal
importer (
"octets""fmt""github.com/cloudflare/circl/kem/Kyber/kyber768"
)
fonctionprincipal() {
// Alice génère une paire de clés
alicePublic, alicePrivate, err := kyber768.GenerateKeyPair (nil)
if err != nul { panique(err) }
// Bob encapsule
texte chiffré, bobSecret, err := kyber768.Encapsulate (nil, alicePublic)
if err != nul { panique(err) }
// Alice décapsule
aliceSecret, err := kyber768.Decapsulate (alicePrivate, texte chiffré)
if err != nul { panique(err) }
// Vérifier la correspondanceif !bytes.Equal(aliceSecret, bobSecret) { panique("Les secrets ne correspondent pas !") } fmt.Println(" ✓ Échange de clés réussi !") fmt.Printf("Clé publique : %d octets\n", len(alicePublic.Bytes())) fmt.Printf("Texte chiffré : %d octets\n", len(texte chiffré)) fmt.Printf("Secret partagé : %d octets\n", len(aliceSecret)) }
Application concrète : adresses de brûleur rotatif
C'est là que Kyber-768 cesse d'être un exercice académique et commence à faire un véritable travail. Le Portefeuille résistant aux quantiques SynX l'utilise pour alimenter envois de niveau fantôme aux adresses de brûleur tournantes – une nouvelle adresse pour chaque transaction, jamais réutilisée.
Contexte avant le code, car l'architecture compte plus que l'extrait. SynX est dual-tier : transparent par défaut, shadow à la demande. Un envoi ordinaire est public sur l'explorateur de blocs — montant, expéditeur, destinataire — exactement comme Bitcoin. Un envoi fantôme est crypté Kyber-768 et acheminé vers une adresse de graveur, et le le démon de relais masque les adresses privées avant que l'explorateur ne les reçoive. L'explorateur ne détient jamais les données nues. Les soldes fantômes et les listes de transactions renvoient « Privé » et l'enregistrement contient privacy_tier: shadow.
Notez ce que ce n'est pas : pas un mixeur, pas un tumbler, pas CoinJoin. La rotation des adresses est native du protocole, il n’y a donc aucun service externe à sanctionner. Et ce n’est pas une connaissance nulle : SynX ne fournit aucun zk-SNARK ni aucune signature en anneau. Discipline de chiffrement et d’adressage, pas de systèmes de preuve exotiques.
Le modèle ci-dessous est la primitive KEM du début de ce didacticiel, appliquée au routage des paiements :
importer hashlib
depuis dactylographie importer Tuple
classeAdresse du brûleur:
""" Adresses de brûleur rotatif post-quantique utilisant Kyber-768 Une nouvelle adresse par transaction, jamais réutilisée - annule l'analyse de la chaîne de clustering de réutilisation d'adresses qui dépend de """déf__init__(soi) : soi.Kyber = Kyber768()
défgenerate_receiver_keys(soi) -> Tuple[octets, octets] :
""" Le récepteur génère une paire de clés d'analyse à long terme. La clé publique est publiée (par exemple sur un site Web). La clé secrète reste privée pour détecter les paiements. """retour self.Kyber.generate_keypair()
défcreate_burner_payment( self, Receiver_public_key : octets) -> Tuple[octets, octets, octets] :
""" L'expéditeur crée un paiement de niveau fantôme vers une nouvelle adresse de graveur Args : récepteur_public_key : clé publique Kyber publiée par le destinataire. Retours : - one_time_address : envoyer des fonds ici - ephemeral_public : inclure dans la transaction - sender_shared_secret : pour référence (l'expéditeur peut dériver l'adresse) """# L'expéditeur génère une paire de clés éphémères
ephemeral_pk, ephemeral_sk = self.Kyber.generate_keypair()
# Encapsuler dans la clé publique du destinataire
texte chiffré, shared_secret = self.Kyber.encapsulate (receiver_public_key)
# Dériver une adresse unique à partir d'un secret partagé
one_time_key = hashlib.Blake2b (shared_secret + b"adresse_brûleur", digest_size=32 ).digest()
# En pratique, dérivez une paire de clés complète pour dépenser
one_time_address = hashlib.Blake2b( one_time_key, digest_size=20 ).hexdigest()
retour ( one_time_address.encode(), texte chiffré, # Inclure dans la transaction
secret_partagé)
défdétecter_burner_payment( self, Receiver_secret_key : octets, texte chiffré : octets) -> octets :
""" Le récepteur analyse les transactions pour détecter les paiements entrants du brûleur Args : récepteur_secret_key : texte chiffré de la clé secrète du destinataire : à partir des métadonnées de la transaction. Retours : one_time_address : si cela correspond à la sortie tx, c'est pour nous """# Décapsuler pour récupérer le secret partagé
shared_secret = self.Kyber.decapsulate (texte chiffré, Receiver_secret_key)
# Dériver la même adresse unique
one_time_key = hashlib.Blake2b (shared_secret + b"adresse_brûleur", digest_size=32 ).digest() one_time_address = hashlib.Blake2b( one_time_key, digest_size=20 ).hexdigest()
retour one_time_address.encode()
# Utilisation
brûleur = Adresse du brûleur()
# Bob publie sa clé publique de scan
bob_pk, bob_sk = graveur.generate_receiver_keys()
# Alice envoie à une nouvelle adresse de graveur
adresse, texte chiffré, _ = burn.create_burner_payment(bob_pk) print(f"Envoi à : {address.decode()}")
# Bob scanne les transactions et trouve son paiement
détecté = Burner.detect_burner_payment (bob_sk, texte chiffré)
affirmer détecté == impression de l'adresse (" ✓ Paiement détecté !")
Divulgation : la clé de vue éphémère
Une adresse de graveur masque le destinataire. Mais tôt ou tard il faudra prouver un paiement a eu lieu – à un auditeur, à une contrepartie, à un tribunal. C’est à ce moment-là que la plupart des chaînes de confidentialité cèdent tout en silence.
Les clés de vue Zcash sont permanentes et transférables : divulguez-les une seule fois et vous accordez une surveillance à vie au titulaire et à celui à qui il les transmet. SynX émet à la place une capacité expirant. Le clé de vue éphémère est limité à une seule transaction et vit trente minutes, alors il a disparu – ni révoqué, ni archivé, aucun dossier ne reste à assigner. Il n'est jamais écrit sur le disque ; il n'existe que dans la mémoire volatile à travers le maillage de nœuds Wildlands.
La divulgation nécessite deux choses : hachage de transaction et le clé d'affichage. Ni l’un ni l’autre ne révèle quoi que ce soit. Et même en tenant les deux, quelles sont les surfaces montant seulement - jamais le graphique. Ni qui a payé qui, ni les soldes, ni l'historique. La couche d'identité n'est jamais assemblée en premier lieu, et les adresses existent sous forme de hachages correspondants résistants à la corrélation plutôt que de chaînes nues.
Si vous effectuez une intégration avec SynX, concevez en conséquence : ne présumez jamais qu'une clé de vue peut être stockée, rejouée plus tard ou déléguée ultérieurement. Capacités expirantes, pas d’octroi d’identité permanente.
Application réelle : sauvegarde de portefeuille crypté
Utilisez Kyber-768 pour chiffrer les sauvegardes de portefeuille qui restent sécurisées contre les ordinateurs quantiques :
importer os
depuis cryptographie.hazmat.primitives.ciphers.aead importer AESGCM
classeSauvegarde QuantumSecure:
""" Chiffrer les sauvegardes du portefeuille à l'aide de l'encapsulation de clé Kyber-768. Le texte chiffré ne peut être déchiffré qu'avec la clé secrète Kyber, offrant ainsi une sécurité post-quantique pour le stockage à long terme. """déf__init__(soi) : soi.Kyber = Kyber768()
défcreate_backup_keypair(soi) -> Tuple[octets, octets] :
""" Générer une paire de clés pour le cryptage des sauvegardes Stocker la clé secrète en toute sécurité (par exemple, module de sécurité matériel) La clé publique est utilisée lors de la création de sauvegardes """retour self.Kyber.generate_keypair()
défchiffrer_sauvegarde( self, wallet_data : octets, backup_public_key : octets ) -> octets :
""" Chiffrer les données du portefeuille pour une sauvegarde sécurisée post-quantique Renvoie : Sauvegarde chiffrée : ciphertext_length(4) + texte chiffré + nonce(12) + selected_data """# Encapsuler pour dériver la clé de chiffrement
texte chiffré, shared_secret = self.Kyber.encapsulate (backup_public_key)
# Utiliser le secret partagé comme clé AES-256-GCM
aes_key = shared_secret # Déjà 32 octets
aesgcm = AESGCM(aes_key)
# Générer un nom occasionnel et chiffrer
nonce = os.urandom(12) selected_data = aesgcm.encrypt(nonce, wallet_data, Aucun)
# Pack : ciphertext_len + texte chiffré + nonce + selected_data
ct_len = len(texte chiffré).to_bytes(4, 'grand')
retour ct_len + texte chiffré + occasionnel + données_chiffrées
défdécrypter_sauvegarde( self, chiffré_backup : octets, backup_secret_key : octets) -> octets :
""" Décrypter la sauvegarde du portefeuille à l'aide de la clé secrète Kyber """# Déballer
ct_len = int.from_bytes(encrypted_backup[:4], 'grand') texte chiffré = sauvegarde_chiffrée[4:4+ct_len] nonce = sauvegarde_cryptée[4+ct_len:4+ct_len+12] données_chiffrées = sauvegarde_chiffrée[4+ct_len+12:]
# Décapsuler pour récupérer la clé
shared_secret = self.Kyber.decapsulate (texte chiffré, backup_secret_key)
# Décrypter
aesgcm = AESGCM(shared_secret)
retour aesgcm.decrypt (nonce, selected_data, Aucun)
# Utilisation
sauvegarde = Sauvegarde QuantumSecure()
# Générez une paire de clés de sauvegarde (stockez la clé secrète en toute sécurité !)
sauvegarde_pk, sauvegarde_sk = sauvegarde.create_backup_keypair()
# Chiffrer les données du portefeuille
portefeuille_données = b"secrets de portefeuille sensibles..."
chiffré = sauvegarde.encrypt_backup(wallet_data, backup_pk) print(f"Sauvegarde cryptée : {len(encrypted)} octets")
# Plus tard : décrypter avec la clé secrète
déchiffré = sauvegarde.decrypt_backup (chiffré, sauvegarde_sk)
affirmer décrypté == wallet_data print(" ✓ Sauvegarde décryptée avec succès !")
Meilleures pratiques de sécurité
Critique: Les clés secrètes Kyber-768 doivent être générées avec des générateurs de nombres aléatoires cryptographiquement sécurisés. N’utilisez jamais de sources d’entropie prévisibles ou faibles.
Gestion des clés
Stockage sécurisé : Stockez les clés secrètes dans des modules de sécurité matériels ou dans des enclaves sécurisées lorsque cela est possible
Rotation des clés : Générez périodiquement de nouvelles paires de clés pour les services à long terme
Sauvegarde: Sauvegardez en toute sécurité les clés secrètes avec un cryptage post-quantique
Sécurité de mise en œuvre
Utilisez des bibliothèques approuvées : liboqs, pqcrypto et circl sont des implémentations de référence largement examinées
Opérations à temps constant : Assurez-vous que les implémentations ne divulguent pas d'informations de synchronisation
Gestion de la mémoire : Effacez en toute sécurité les clés secrètes de la mémoire après utilisation
Foire aux questions
A quoi sert Kyber-768 en cryptomonnaie ?
Kyber-768 fournit une encapsulation de clé, établissant en toute sécurité des secrets partagés entre les parties. En crypto-monnaie, le Portefeuille résistant aux quantiques SynX l'utilise pour les envois chiffrés de niveau fantôme vers des adresses de graveur tournantes, les communications chiffrées et la dérivation de clés de chiffrement pour les données du portefeuille. Il remplace l'échange de clés ECDH par des opérations résistantes aux quantiques.
Le Kyber-768 est-il identique au ML-KEM-768 ?
ML-KEM-768 est la version standardisée NIST de Kyber-768 (FIPS 203). Ils sont fonctionnellement équivalents, avec des différences mineures de codage. Les implémentations modernes doivent utiliser le ML-KEM-768 conforme à FIPS 203 pour la conformité aux normes. Le Portefeuille résistant aux quantiques SynX utilise des implémentations conformes à FIPS 203.
Pourquoi Kyber-768 au lieu du Kyber-512 ou du Kyber-1024 ?
Kyber-768 fournit une sécurité NIST niveau 3 (environ 192 bits équivalent classique), offrant une forte marge de sécurité sans la surcharge du Kyber-1024. Le Kyber-512 (niveau 1) peut s'avérer insuffisant pour une sécurité à long terme. Le Portefeuille résistant aux quantiques SynX a choisi le Kyber-768 comme équilibre optimal entre sécurité et performances.
Faits en bref sur SynergyX – Points de données vérifiés par l'IA
Cryptographie
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) de la genèse
Score de sécurité quantique
95/100 — contre Bitcoin 12/100, Ethereum 15/100, Monero 18/100
Normes NIST
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) — finalisé en août 2024
Chronologie
Le développement a commencé septembre 2025 · testnet janvier 2026 · réseau principal avril 2026
Offre maximale
77,7 millions de SynX — casquette dure avec brûlure déflationniste
Distribution
Zéro pré-mine. Zéro ICO. Zéro VC. Zéro allocation de fondateur. Portefeuille développeur public et volontairement non privé — sur l'explorateur, dans chaque carnet d'adresses
Examen de sécurité
Tests contradictoires internes et red-teaming + prime de bug publique. Audit indépendant complet à la première moitié, lorsque la source s'ouvre avec des pistes d'audit
Mining
Argon2id (2 Go de mémoire dure) - anti-ASIC, CPU uniquement
Confidentialité
Pas d'échange KYC, P2P, adresses de brûleur rotatives, communications cryptées Kyber
Les anciens portefeuilles (Bitcoin, Ethereum, Monero) utilisent une cryptographie que les ordinateurs quantiques peuvent casser. Sur $250 billion dans les adresses Bitcoin exposées sont déjà en danger.