# Shamir 秘密共享

把秘密拆分为 n 份 share，任意 k 份（阈值）即可重建——基于 GF(256) 的 Shamir k-of-n 方案。纯本地密码学（多项式系数用 crypto.randomBytes），无网络。可把密码/密钥/口令拆分给多个人保管，再用任意 k 份恢复。仅保证机密性，不保证真实性。

> 标准页面: https://elysiatools.com/zh/tools/shamir-secret-sharing

- **分类:** Security

- **关键词:** Shamir, 秘密共享, 门限, k-of-n, 拆分, 恢复, 密钥托管

## 概述

本工具基于 GF(256) 实现 **Shamir 门限秘密共享**：秘密被拆成 `n` 份 share，任意 `k` 份（阈值）即可重建，而 `k-1` 份或更少*完全不泄露*秘密——这是信息论意义上的安全。

**两种模式：**
- **拆分**：粘贴秘密（任意 UTF-8 文本——密码、API 密钥、助记词、恢复短语），设定阈值 `k` 和总数 `n`（2 ≤ k ≤ n ≤ 255），得到 `n` 份 share。每份分发给一个不同的持有人。
- **恢复**：粘贴 `k` 份或更多 share（每行一份），通过在 x=0 的拉格朗日插值重建原始秘密。

**原理。** 秘密的每个字节是 GF(256) 上一个随机 `k-1` 次多项式的常数项。share `i` 是多项式在 `x=i` 处的值。恢复需要 `k` 个点才能唯一确定一个 `k-1` 次多项式。多项式系数取自 `crypto.randomBytes()`（操作系统 CSPRNG），绝不使用 `Math.random()`。

**限制——请务必阅读：**
- **仅机密性，无完整性。** 持有 share 的人可以在恢复时提交*伪造*值；数学运算会产生一个看似合理但错误的秘密，而你无法察觉。若需检测篡改，请在拆分*之前*对秘密（或其哈希）签名，恢复后再验签。
- **GF(256) 边界。** `n` 上限 255（域大小），`k` 必须 ≥ 2。
- **share 格式。** 每个 share 是 `sss:` + `[x 坐标, y 字节₁, y 字节₂, …]` 的 base64url。保持完整字符串；截断会导致恢复失败。

**适用场景。** 密钥托管/恢复（把主密钥拆分给多位高管）、自托管钱包的社交恢复、把口令分发给多人确保无单点持有、"死人开关"式秘密取回。

## 输入项

- **模式** (select)
- **要拆分的秘密** (textarea): The secret to split (any text: a password, API key, seed phrase). Used in Split mode.
- **阈值 (k)** (number): e.g. 3
- **Share 总数 (n)** (number): e.g. 5
- **要恢复的 share** (textarea): Paste shares to combine (one per line). At least k shares required. Used in Combine mode.

## 适用场景

- 需要将高权限的主密码或私钥分发给多位团队成员共同保管，避免单点泄露或丢失风险时。
- 为加密货币钱包或敏感账户设计社交恢复方案，确保在遗忘主密码时能通过受信任的联系人协作找回。
- 实施紧急备份机制，在特定安全事件发生时集齐足够授权即可重建核心凭据。

## 工作原理

- 选择模式与输入：选择“拆分”模式并输入需要保护的文本，设定分片总数 n 和恢复所需的最小阈值 k。
- 多项式生成与求值：系统将秘密的每个字节作为 GF(256) 有限域上随机 k-1 次多项式的常数项，利用 crypto.randomBytes 生成其余系数，并计算多项式在不同 x 坐标处的值。
- 分发分片：生成 n 个以 sss: 开头的 Base64url 编码分片，每个分片包含 x 坐标及对应的多项式值，分发给不同的保管人。
- 拉格朗日插值恢复：在“恢复”模式下输入至少 k 个有效分片，系统通过拉格朗日插值法在 x=0 处求解，重建并输出原始秘密。

## 使用案例

- 多签密钥托管：将公司的根证书私钥拆分为 5 份，规定必须有 3 位高管同时授权才能恢复并使用。
- 钱包社交恢复：将助记词拆分为 3 份，自己保留 1 份，另外 2 份分别交给两位受信任的联系人，丢失时找回任意一位即可恢复。
- 安全凭据备份：将服务器的紧急救援口令拆分备份，防止因单一备份介质损坏或被盗导致系统彻底失控。

## 常见问题

### 这个工具安全吗？我的秘密会被上传吗？

安全。本工具完全在本地浏览器中运行，不进行任何网络传输。多项式系数使用操作系统级安全随机数生成器（CSPRNG）生成，确保信息论意义上的安全性。

### 如果我只有 k-1 个分片，能破解出部分秘密吗？

不能。根据 Shamir 门限方案的数学原理，少于 k 个分片在数学上无法提供关于原始秘密的任何有效信息，其安全性是绝对的。

### 为什么恢复出来的秘密是乱码或错误的？

Shamir 方案仅保证机密性，不保证真实性。如果输入的任何一个分片被篡改、截断或输入错误，数学计算仍会强行求解出一个看似合理但完全错误的文本。

### 分片总数 n 和阈值 k 有什么限制？

基于 GF(256) 的实现限制，分片总数 n 最大为 255，阈值 k 必须大于或等于 2 且小于或等于 n。

### 如何防止分片持有者在恢复时提供伪造的分片？

本工具不提供完整性校验。建议在拆分秘密前，先对秘密或其哈希值进行签名，并在恢复后验证签名以确保数据未被篡改。

## 相关工具

- [ML-KEM / Kyber 密钥对与封装测试器](https://elysiatools.com/zh/tools/ml-kem-kyber-keypair-and-encapsulation-tester): 生成 ML-KEM-512/768/1024（FIPS 203 / CRYSTALS-Kyber）密钥对，用公钥封装随机共享密钥，再用私钥解封装并验证两边一致——同时现场核对三个参数集的精确线上尺寸。
- [安全响应头检查器](https://elysiatools.com/zh/tools/security-headers-checker): 审计 HTTP 响应头的安全合规性——解析你粘贴的原始头（无网络），按 OWASP 安全头集做值级检查：HSTS max-age、CSP unsafe-inline/eval、X-Content-Type-Options、Referrer-Policy、Permissions-Policy、COOP/COEP/CORP 等。输出字母评级（A+ 到 F）及逐项 Finding 与可复制的修复建议。
- [环境变量文件密钥轮换规划器](https://elysiatools.com/zh/tools/env-file-secret-rotation-planner): 粘贴 .env 文件，生成分阶段的密钥轮换计划。识别数据库 URL、API 密钥、认证令牌、私钥、云凭证、支付密钥与加密密钥，按暴露程度与使用时长评分，并排入 4 周轮换时间线，附双密钥清单与生成的 .env.example。可选上次轮换日期与可配置周期（30/90/180/365 天）驱动合规评分。
- [RSA 密钥对生成器](https://elysiatools.com/zh/tools/rsa-key-generator): 用 Node 的 crypto.generateKeyPairSync() 生成匹配的 RSA 公私钥对，PEM 格式。支持 2048/3072/4096 位，PKCS#8（推荐）或 PKCS#1 私钥格式，可用口令加密私钥。密钥在本地生成，不会外传。
- [URL 安全检查器](https://elysiatools.com/zh/tools/url-safety-checker): 通过深度结构分析检测 URL 中的钓鱼和欺诈信号——punycode/IDN 同形异义攻击（拉丁/西里尔混合）、嵌入凭据（user:pass@host 把戏）、高风险 TLD、双重编码与控制字符走私、子域品牌欺骗、数字/IP 主机混淆。仅静态分析，无网络。补充 URL Validator（它做基础协议/IP 检查）。
- [AGEX 口令强度检查器](https://elysiatools.com/zh/tools/agex-passphrase-strength-checker): 评估 AGEX 文件包口令强度，并推荐最适合的保护档位
- [AGEX 安全分享说明页](https://elysiatools.com/zh/tools/agex-secure-share-note): 为 AGEX 包生成面向接收方的分享说明页，解释如何安全解密与验签
- [数字签名生成器](https://elysiatools.com/zh/tools/digital-signature-generator): 用私钥签名消息或用公钥验签——支持 RSA-PSS (SHA-256)、ECDSA (P-256)、Ed25519。纯本地加密（Node crypto.createSign/createVerify），无网络。粘贴 PEM 密钥来签名或验证 base64 签名。本工具只做签名/验签，不生成密钥对。

## 示例

- [Web Python 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-python): Web Python 图像处理示例，使用 PIL/Pillow 包括读取、保存、缩放和格式转换
- [Android Java 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-java): Android Java 图像处理示例，包括图像读取保存、缩放和格式转换
- [Android Kotlin 图像处理示例](https://elysiatools.com/zh/samples/android-image-processing-kotlin): Android Kotlin 图像处理示例，包括图像读取保存、缩放和格式转换
- [Web Rust 图像处理示例](https://elysiatools.com/zh/samples/web-image-processing-rust): Web Rust 图像处理示例，包括图像读取保存、缩放和格式转换
