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 的道路 →
奥本海默从沙漠中得到了一句话。这个世纪将迎来一个不同的世纪——而发电机就是你。