叠加结果 S1 + S2
两张 share 物理叠加 → 可见原图
Share 2
单独看也是纯噪声
名字由来——"2-out-of-2" 是什么意思?
这是密码学里"门限方案"的标准记号
(k, n)-threshold:n 张 share 中任意 k 张就能解。所以:
- (2, 2) = "2-out-of-2":共 2 张,必须凑齐才能解(本 tab)
- (2, 3) = "2-out-of-3":共 3 张,任意 2 张就能解(多秘密 tab 的变体)
- (k, n):通用情况,少于 k 张完全无信息
这是 Naor-Shamir 1994 论文里建立的命名。
本 tab 的算法:每个原像素 → 2×2 子像素块。随机选一个"2 黑 2 白"的模式(共 6 种):
• 原像素是
白:S1、S2 用
相同模式 → 叠加 = 2 黑 2 白(50% 灰)
• 原像素是
黑:S1、S2 用
互补模式 → 叠加 = 4 个全黑(100% 黑)
因为每个 share 的局部模式是均匀随机的(每像素是 6 种模式之一),单张完全看不出原图——这是
信息论意义上的完美保密(等同于 one-time pad 的强度)。
① 上传三张秘密图(每张对应一对 share 叠加时显形)
② 三张 Share(每张就是均匀网点噪声,单看完全无信息)
Share 1 打印
参与解密:秘密 #1、#2
Share 2 打印
参与解密:秘密 #1、#3
Share 3 打印
参与解密:秘密 #2、#3
③ 三对 Share 的物理叠加预览(OR 模拟)
3-share / 3-secret 半色调 VC(无 cover)原理:
每张 share 默认填入
独立的随机 50% 黑白噪声(视觉上像均匀的 TV static / 半色调网点)。
对每个秘密像素 →
N×N 子像素块,块内随机抽
6K 个位置分给 3 个 pair:
- Z₁₂ (2K 子像素):编码秘密 #1。Share 1、2 在这里用 2-of-2 VC pattern;Share 3 保留原随机噪声。
- Z₁₃ (2K 子像素):编码秘密 #2。Share 1、3 走 VC;Share 2 保留噪声。
- Z₂₃ (2K 子像素):编码秘密 #3。Share 2、3 走 VC;Share 1 保留噪声。
- Z_rest (N²−6K):三张 share 全保留随机噪声。
约束:
6K ≤ N²。
为什么单 share 完全均匀(彻底无泄漏):无论 SEP pattern 还是随机噪声,每个子像素都是 50% 黑 50% 白。所以三张 share 的密度处处恒等于 50%(均匀 TV static),
不携带任何秘密相关结构——与 tab 2 那种"share 上能看到 ~15% 密度偏差勾勒出秘密轮廓"的情况彻底不同。
叠加为什么显形秘密:
• Z_ij 区域:SEP 起作用——秘密=白时 K 个子像素黑(50% 灰),秘密=黑时 2K 个全黑(100%)
• 其它区域:两张独立 50% 随机噪声 OR = 75% 灰(背景)
所以叠加图:均匀 75% 灰背景里,秘密的白区呈 50% 灰(亮斑),黑区呈 100% 纯黑(深斑),双向对比都可见。
调参:K 越大单 pair 信号越强(
K/N² 对比);N 越大单像素的网点更细腻。
N=6, K=3(默认)= 8% 对比;
N=4, K=2 = 12.5% 对比(更明显但子像素粗)。
秘密图选图建议:简单高对比的形状最佳(图标、文字、剪影);不要用照片当秘密——细节会被半色调网点淹没。
打印:点 "导出 3 张打印 PNG" 一次性按 mm 尺寸以 300 DPI 透明 PNG 下载 3 张 share。
必须一次性导出因为算法依赖共享的随机种子——如果分次导出会得到 3 张互不相干的 share,叠加根本无法解密!
预览 PNG 也是透明底,从当前画布抓取,三张预览只要在同一次生成之后下载也是一致的。
物理打印:胶片 + 激光打印机 → 实际尺寸 100% 打印(不要"自适应页面")→ 角标对齐叠加即可。