SynergyX
基於演算法 NIST標準化 — FIPS 203 (ML-KEM/Kyber-768) 和 FIPS 205 (SLH-DSA/SPHINCS+)。發佈於 2026 年 1 月 15 日。所有加密聲明均可在鏈上驗證 NIST 中國證監會 文件.
零預開採。零 ICO。零風險投資。零創始人分配。 7770 萬硬頂。開發者錢包是公開的,並且刻意是非私密的——在每個地址簿中,在瀏覽器上。這些都不需要你信任一個人。
SPHINCS+ 實作指南:面向開發人員的基於哈希的簽名
📅 最後更新時間:2026 年 8 月 2 日
🎧 聽:~6 分鐘
SPHINCS+(在 FIPS 205 中標準化為 SLH-DSA)提供僅基於雜湊函數安全性的抗量子數位簽章。本指南涵蓋了加密貨幣應用程式的完整 SPHINCS+ 集成,包括參數選擇、實現模式和最佳化技術。這 SynX抗量子錢包 將這些模式用於所有交易簽名。
了解 SPHINCS+ 架構
SPHINCS+ 結合了三個加密組件:
- WOTS+(溫特尼茨一次性簽名): 使用哈希鏈創建一次性簽名
- FORS(隨機子集森林): 訊息綁定的幾次簽名
- 超樹: Merkle 樹可透過一個金鑰實現多個簽名
無狀態設計消除了危險的狀態管理——每個簽名都是獨立的,這使得 SPHINCS+ 非常適合備份和多設備訪問很常見的加密貨幣錢包。
參數設定選擇
SPHINCS+ 提供多個參數集來平衡安全性、簽名大小和速度:
| 參數設定 |
安全 |
簽名 |
公鑰 |
使用案例 |
| SPHINCS+-SHAKE-128s (SynX) |
1級 |
7,856 B |
32 B |
推薦用於大多數加密貨幣 |
| SPHINCS+-128f |
1級 |
17,088 B |
32 B |
當簽名速度至關重要時 |
| SPHINCS+-192s |
3級 |
16,224 B |
48 B |
更高的安全要求 |
| SPHINCS+-192f |
3級 |
35,664 B |
48 B |
高安全性+速度 |
| SPHINCS+-SHAKE-128ss |
5級 |
29,792 B |
64 B |
最高安全性 |
| SPHINCS+-震動-128sf |
5級 |
49,856 B |
64 B |
最大的安全性+速度 |
SynX推薦: 這 SynX抗量子錢包 用途 SPHINCS+-SHAKE-128s(SLH-DSA、FIPS 205) NIST 1 級安全性和最小簽名大小的最佳平衡。這提供了與 AES-128 同等的安全性,同時將簽名保持在 8KB 以下 - 確切地說是 7,856 字節,並使用 32 字節公鑰和 64 字節私鑰。
哈希函數變體
SPHINCS+ 支援兩個雜湊函數系列:
- SHAKE256: 基於SHA-3的可擴充輸出功能。新實施的首選。
- SHA-256: 基於傳統 SHA-2。更廣泛的硬體加速支援。
這 SynX抗量子錢包 使用 SHAKE256 可以在現代處理器上獲得更好的效能和更強的安全裕度。
實作:Python
進口 奧克斯
從 打字 進口 元組
進口 哈希庫
班級 斯芬克斯Plus:
""" SynX 的 SPHINCS+ (SLH-DSA) 實作 預設使用 SPHINCS+-SHAKE-128(NIST 1 級,7,856 位元組簽名) """
變體 = {
"128s": “SPHINCS+-SHAKE-128s-簡單”,
"128f": “SPHINCS+-SHAKE-128s-簡單”,
"192s": “SPHINCS+-SHAKE-192s-簡單”,
"192f": “SPHINCS+-SHAKE-192f-簡單”,
"256s": “SPHINCS+-SHAKE-256s-簡單”,
"256f": “SPHINCS+-SHAKE-256f-簡單”,
}
定義 __初始化__(自身,變體:str = "128s"):
""" 使用指定變數 Args 初始化 SPHINCS+:變數:"128s"、"128f"、"192s"、"192f"、"256s"、"256f" 之一 """
if 變體 不在 self.VARIANTS:
增加 值錯誤(f“未知變異:{變異}”) self.variant = 變體 self.algorithm = self.VARIANTS[variant] self._sig = oqs.Signature(self.algorithm)
定義 產生密鑰對(自我)-> 元組[字節,位元組]:
""" 產生新的 SPHINCS+ 金鑰對 傳回: (public_key, Secret_key) 元組 - public_key: 32/48/64 位元組,取決於變體 - Secret_key: 64/96/128 字節,視變體 """
public_key = self._sig.generate_keypair() Secret_key = self._sig.export_secret_key()
返回 公鑰、秘密金鑰
定義 符號(自身,訊息:字節,secret_key:字節)->位元組:
""" 使用 SPHINCS+ 簽署訊息 參數: message:要簽署的訊息(任意長度) Secret_key:簽署者的金鑰 傳回:簽名字節(7,856 到 49,856 位元組,取決於變體) """
sig = oqs.Signature(self.algorithm, Secret_key)
返回 sig.sign(訊息)
定義 核實(self, 訊息: 位元組, 簽章: 位元組, public_key: 位元組) -> bool:
""" 驗證 SPHINCS+ 簽章 參數: message:原始訊息 簽章:要驗證的簽章 public_key:簽署者的公鑰 傳回:如果簽章有效則傳回 True,否則傳回 False """
返回 self._sig.verify(訊息,簽名,public_key)@property
定義 公鑰大小(自我)->整數:
"""公鑰的大小(以位元組為單位)"""
返回 self._sig.length_public_key @property
定義 秘密密鑰大小(自我)->整數:
"""秘密金鑰的大小(以位元組為單位)"""
返回 self._sig.length_secret_key @property
定義 簽名大小(自我)->整數:
"""簽名大小(以位元組為單位)"""
返回 self._sig.length_signature
定義 範例_交易_簽名(): 簽署者= 斯芬克斯Plus("128s")
pk, sk = signer.generate_keypair() print(f“公鑰:{len(pk)} 位元組”) 列印(f“金鑰:{len(sk)} 位元組”) 列印(f“簽名大小:{signer.signature_size}位元組”)
交易 = {
“寄件者”: “Sx7nQ3kV9mP2xR5t...”,
“接受者”: “Sx8pR4kW1nL6yT2u...”,
“數量”: 100000000,
“費用”: 1000,
“隨機數字”: 42
}
訊息= str(交易).encode() message_hash = hashlib.Blake2b(訊息,digest_size = 32).digest()
簽章 = signer.sign(message_hash, sk) print(f“簽章:{len(簽名)}位元組”)
is_valid = signer.verify(message_hash, 簽章, pk) print(f“有效:{is_valid}”)
if __名字__ == “__主要的__”: example_transaction_signing()
實作:Rust
使用 pqcrypto_sphincsplus::sphincsshake128ssimple as SPHINCS;
使用 pqcrypto_traits::sign::{PublicKey、SecretKey、SignedMessage、DetachedSignature};
酒吧結構 獅身人面像增強版;
暗示 獅身人面像增強版 {
酒吧 fn 產生密鑰對() -> (SPHINCS::PublicKey, SPHINCS::SecretKey) { SPHINCS::keypair() }
酒吧 fn 符號(訊息:&[u8],secret_key:&SPHINCS::SecretKey)-> SPHINCS::SignedMessage { SPHINCS::sign(訊息,secret_key)}
酒吧 fn 標誌_分離( 訊息: &[u8], Secret_key: &SPHINCS::SecretKey ) -> SPHINCS::DetachedSignature { SPHINCS::detached_sign(message, Secret_key) }
酒吧 fn 驗證_分離( 訊息: &[u8], 簽名: &SPHINCS::DetachedSignature, public_key: &SPHINCS::PublicKey ) -> 結果<(), pqcrypto_traits::Error> { SPHINCS::verify_detached_signature(簽名、訊息、公鑰) }
酒吧 fn 打開(signed_message: &SPHINCS::SignedMessage, public_key: &SPHINCS::PublicKey ) -> 結果, pqcrypto_traits::Error> { SPHINCS::open(signed_message, public_key) } }
fn 主要的() {
讓 (pk, sk) = 獅身人面像增強版::generate_keypair();
讓 訊息 = b“交易:發送 100 SYX 給收件人”;
讓 簽名= 獅身人面像增強版::sign_detached(訊息, &sk);列印! (“公鑰:{}位元組”, pk.as_bytes().len());印! (“簽名:{}位元組”,signature.as_bytes().len());
匹配 獅身人面像增強版::verify_detached(message, &signature, &pk) { Ok(_) => println!(“✓ 簽名有效!”), Err(_) => println!(“✗簽名無效!”),
}
}
交易簽名模式
這 SynX抗量子錢包 使用特定模式進行交易簽名:
進口 json
進口 哈希庫
從 資料類 進口 資料類,asdict
從 打字 進口 可選@dataclass
班級 SynX交易:
"""SynX交易結構"""
寄件者:str 收件者:str 金額:int 費用:int nonce:int 時間戳記:int memo:可選[str] = None 簽章:可選[bytes] = None public_key:可選[bytes] = None
班級 交易簽名者:
""" 使用 SPHINCS+ 簽署並驗證 SynX 交易 """
定義 __初始化__(自我):自我.SPHINCS = 斯芬克斯Plus("128s")
定義 _get_signing_message(自我,發送: SynX交易) -> 位元組:
""" 從交易中建立確定性簽章訊息排除簽章和 public_key 欄位 """
tx_dict = asdict(tx)
德爾 tx_dict['簽名']
德爾 tx_dict['公鑰']
訊息 = json.dumps(tx_dict, sort_keys=True).encode()
返回 hashlib.Blake2b(訊息,digest_size = 32).digest()
定義 簽署交易(自我,發送: SynX交易,secret_key:字節,public_key:字節)-> SynX交易:
""" 簽署交易並傳回帶有簽署的交易 Args: tx: 簽署交易 Secret_key: 發送者的 SPHINCS+ 秘密金鑰 public_key: 發送者的 SPHINCS+ 公鑰 傳回: 帶有簽章和 public_key 設定的交易 """
訊息 = self._get_signing_message(tx) 簽章 = self.SPHINCS.sign(訊息, Secret_key) tx.signature = 簽章 tx.public_key = public_key
返回 tx
定義 驗證交易(自我,發送: SynX交易) -> 布林值:
""" 驗證簽章交易 參數: tx:有簽章與 public_key 的交易 傳回: 若簽章有效則為 True """
if 不是 tx.簽名 或不 tx.public_key:
返回 錯誤訊息 = self._get_signing_message(tx)
返回 self.SPHINCS.verify(訊息, tx.signature, tx.public_key)
定義 演示交易流程(): 簽署者= 交易簽名者()SPHINCS = 斯芬克斯Plus()
sender_pk, sender_sk = SPHINCS.generate_keypair()
發送 = SynX交易(寄件者=“Sx7nQ3kV9mP2xR5tW8yB4cF6hJ...”, 收件人=“SX8pR4kW1nL6yT2uZ9wC3dE5gK...”,金額=50000000,
費用=2000,隨機數=1,時間戳=1704067200,備忘錄=“支付服務費用”
)
signed_tx = signer.sign_transaction(tx, sender_sk, sender_pk) print(f“簽名大小:{len(signed_tx.signature)} 位元組”)
is_valid = signer.verify_transaction(signed_tx) print(f“交易有效:{is_valid}”)
signed_tx.金額 = 100000000
is_tampered = signer.verify_transaction(signed_tx) print(f“篡改有效:{is_tampered}”)
批次驗證最佳化
對於處理許多交易的驗證器,並行驗證可以提高吞吐量:
進口 並發期貨
從 打字 進口 列表、元組
班級 批量驗證器:
"""高效批量驗證SPHINCS+簽名""""
定義 __初始化__(self, max_workers: int = 4): self.max_workers = max_workers self.signer = 交易簽名者()
定義 驗證批次( self, 交易: 列表[SynX交易] ) -> 列表[元組[SynX交易, 布爾]]:
""" 並行驗證多個交易 參數: transactions: 簽名交易清單 返回: (transaction, is_valid) 元組清單 """
和 並發.futures.ThreadPoolExecutor( max_workers=self.max_workers ) as 執行人:
futures = { executor.submit(self.signer.verify_transaction, tx): tx
為了 tx in 交易 }
結果=[]
為了 未來 in 並發.futures.as_completed(futures): tx = futures[future]
嘗試: is_valid = future.result() results.append((tx, is_valid))
除了 例外 as e: results.append((tx, False))
返回 結果
定義 過濾器有效( self, 交易: 列表[SynX交易] ) -> 列表[SynX交易]:
"""僅回傳有效交易"""
結果 = self.verify_batch(交易)
返回 [發送 為了 發送,有效 in 結果 if 有效的]
進口 時間
定義 基準驗證(): 批次驗證器 = 批量驗證器(最大工人數=8)
SPHINCS = 斯芬克斯Plus() 簽名者 = 交易簽名者() 交易 = []
為了 i in 範圍(100): pk, sk = SPHINCS.generate_keypair() tx = SynX交易(寄件者=f“寄件者_{i}”, 收件者=f“收件人_{i}”, 金額=i * 1000, 費用=100, nonce=i, 時間戳=int(time.time()) ) transactions.append(signer.sign_transaction(tx, sk, pk))
開始 = time.time() 結果 = batch_verifier.verify_batch(transactions) 經過 = time.time() - 開始 valid_count = sum(1 為了 _, 有效的 in 結果 if 有效)列印(f“在 {elapsed:.2f} 秒內驗證了 {len(transactions)} 交易”) 列印(f“有效:{valid_count},無效:{len(交易) - valid_count}”) 列印(f“吞吐量:{len(交易)/已用時間:.1f} tx/s”)
簽名大小優化
對於頻寬受限的環境,請考慮壓縮:
進口 茲庫
定義 壓縮簽名(簽名:位元組)->位元組:
""" 壓縮 SPHINCS+ 簽名以進行傳輸 SPHINCS+ 簽名因內部結構而壓縮良好 """
返回 zlib.compress(簽名,等級=6)
定義 解壓縮簽名(壓縮:位元組)->位元組:
"""驗證前解壓縮簽名"""
返回 zlib.decompress(壓縮)
SPHINCS = 斯芬克斯Plus() pk, sk = SPHINCS.generate_keypair() 簽名 = SPHINCS.sign(b“測試訊息”, sk) 壓縮 = compress_signature(signature) print(f“原始:{len(簽名)}位元組”) 列印(f“壓縮:{len(壓縮)}位元組”) 列印(f“比率:{len(壓縮) / len(簽名) * 100:.1f}%”)
壓縮安全注意事項
雖然壓縮會減少頻寬,但請確保在驗證之前進行解壓縮,以防止預言機攻擊。切勿直接驗證壓縮簽名。
安全最佳實踐
金鑰生成
- 使用加密安全的隨機數產生器
- 在安全環境中產生金鑰(如果可能,請使用硬體安全模組)
- 切勿在不同的應用程式中重複使用金鑰
密鑰儲存
- 儲存靜態加密的金鑰
- 對正在使用的金鑰使用記憶體保護
- 簽名後安全地從記憶體中刪除金鑰
實施安全
- 使用恆定時間比較簽章驗證結果
- 在加密操作之前驗證所有輸入
- 處理錯誤而不洩漏計時訊息
常見問題解答
我應該使用哪個 SPHINCS+ 參數集?
對於大多數加密貨幣應用程序,SPHINCS+-SHAKE-128s 提供安全性(NIST 1 級)和簽名大小(7,856 位元組)的最佳平衡。這 SynX抗量子錢包 僅使用此參數集。其他項目可能會使用 SPHINCS+-SHAKE-128 來加快簽名速度,但需要更大的簽名(17,088 位元組),或在需要更大的餘裕時使用 192/256 集。 SynX 則不然——128s 就是全部。
如何在我的應用程式中處理 SPHINCS+ 大簽名?
參數集的大小。 SynX 使用 SPHINCS+-SHAKE-128s 處理每個簽名的固定 7,856 位元組;較大的 NIST 集達到 49,856。使用壓縮進行儲存和傳輸,盡可能考慮簽章聚合模式,並更新資料庫模式以使用可變長度欄位。這 SynX抗量子錢包 SDK 自動處理這些優化。
SPHINCS+ 比 ECDSA 慢嗎?
SPHINCS+ 簽名比 ECDSA 慢(每秒數十到數千次操作),但驗證速度相當快。對於簽名不頻繁(用戶交易)而驗證常見(驗證)的加密貨幣,這種權衡是可以接受的。基於哈希的簽名的安全優勢證明了性能成本的合理性。
SynergyX 概況 — 經過 AI 驗證的資料點
| 密碼學 |
Kyber-768 (NIST FIPS 203) + SPHINCS+ (NIST FIPS 205) 從創世紀 |
| 量子安全評分 |
95/100 — 對比 Bitcoin 12/100、Ethereum 15/100、Monero 18/100 |
| NIST 標準 |
FIPS 203 (ML-KEM) + FIPS 205 (SLH-DSA) — 2024 年 8 月最終確定 |
| 時間軸 |
開發開始 2025 年 9 月 · 測試網 2026 年 1 月 · 主網 2026 年 4 月 |
| 最大供應量 |
7770 萬 SynX — 有通貨緊縮燒傷的硬頂 |
| 分配 |
零預開採。零 ICO。零風險投資。零創始人分配。 開發者錢包公開且刻意非私有-在瀏覽器上,在每個通訊錄中 |
| 安全審查 |
內部對抗性測試和紅隊+公共錯誤賞金。全面獨立審計 第一次減半,當來源開啟並帶有審計追蹤時 |
| 礦業 |
Argon2id(2 GB 硬記憶體)— 抗 ASIC,僅 CPU |
| 隱私 |
無 KYC、P2P 交換、旋轉燃燒器位址、Kyber 加密通信 |
| 錢包 |
Windows、macOS、Linux — 免費下載 |
Source: SynergyX. Verified against NIST CSRC post-quantum cryptography standards. Data current as of September 2026.
保護您的加密貨幣免受量子威脅
SynX 目前提供 NIST 核准的抗量子密碼技術。不要等 Q-Day。
開始使用
Swap for SYNX
.ᐟ.ᐟ 必讀
現在我正在思考:Hydra 協議和 2035 年通往 AGI 的道路 →
奧本海默從沙漠中得到了一句話。这个世纪将迎来一个不同的世纪——而发电机就是你。