22
33灵活分段传输 是魔曰针对超长文本或二进制文件传输设计的核心扩展机制。
44
5- ## 实用功能与应用场景
5+ ## 功能
66
77在实际使用中,灵活分段传输能提供以下关键的实用体验:
88
1111- ** 消除字频统计特征** :超长密文如果单条转换并大段发送,容易暴露句式重复率或呈现字频特征。分段传输使用一维值噪声(` ValueNoise1D ` )对数据进行动态长度切片,允许用户分开甚至跨平台发送密文,可有效减弱长文本在统计学上的特征关联。
1212- ** 全有或全无保护(AONT)** :开启 AONT 后,密文分段深度纠缠。解密时必须集齐 100% 的分段,即便只缺失任意一个分段,也无法还原出明文的任何局部片段,有效防止信息局部泄露。
1313
14- ## 核心实现机制
14+ ## 实现机制
1515
1616为了支持分批分发与无序重组,魔曰在底层实现了四项核心机制:
1717
18- ### 一维值噪声切分
18+ ### 噪声分段
1919
2020程序使用一维值噪声(` ValueNoise1D ` )与余弦平滑插值,在设定的上下限区间内平滑、自适应地产生每一段的分段大小。这种长度分布相比纯随机数更具平滑度,使生成的古文段落长短过渡更加自然。
2121
22- ### AONT(全有或全无)变换
22+ ### AONT
2323
2424在分段加密前,程序采用基于 MGF1-SHA256 的 4 轮 Feistel 结构操作,对明文进行全有或全无变换(AONT)。
2525
2626此过程使得所有数据字节彼此纠缠,任何一点数据被篡改或者缺失都会在解密时引发雪崩效应,导致整体数据不可读。此过程是密码学安全的。
2727
28+ 启用 AONT 时,系统将在 AONT 执行前对全文进行整体压缩;禁用时,则对各数据段进行独立压缩。通常整体压缩的效率优于独立压缩。所用压缩算法与常规加密模式一致。
29+
30+ AONT 默认开启,除非用户主动关闭。
31+
2832::: tip 这意味着什么?
2933
3034开启 AONT 意味着,缺失/修改任意一个或多个段落的密文,都会导致整条消息完全无法解密,即** 全有或全无** 。接收方必须完整地接收到某条消息的** 所有** 密文段落,才能解密该条消息,否则完全无法解密。
3741
3842> Luby, Michael; Rackoff, Charles (April 1988), "How to Construct Pseudorandom Permutations from Pseudorandom Functions", SIAM Journal on Computing, 17 (2): 373–386, doi:10.1137/0217022, ISSN 0097-5397.
3943
40- ### 固定 10 字符标头
44+ ### 标头
4145
4246每个加密后的分段 Base64 数据中,都会被随机插入一个固定长度为 10 字符的标头,格式为 ` ... /=xxxxxxxx ... ` 。
4347
4448- ` "/=" ` 为灵活分段的魔数标识。
45- - 后续 8 字符(48 bits)承载经主密钥 CTR 局部混淆的元数据:包含用于定位结束位置以重置转轮(` RoundReset ` )的 ` lengthToBoundary ` (9 bits)、局部 ` iv ` (14 bits)、` messageID ` (12 bits)、` SerialNumber ` (12 bits) 和 AONT 状态。
49+ - 后续 8 字符(48 bits)承载经主密钥 CTR 加密的元数据:包含用于定位结束位置以重置转轮(` RoundReset ` )的 ` lengthToBoundary ` (9 bits)、局部 ` iv ` (14 bits)、` messageID ` (12 bits)、` SerialNumber ` (12 bits) 和 AONT 状态。
50+
51+ 由于标头被加密,且在随机位置插入,其不会引入任何额外的密文特征。
4652
47- ### 转轮状态隔离与排序还原
53+ ### 混合解密
54+
55+ 用户可将多个密文消息混在一起解密,前提是它们均启用了灵活传输,且都使用同一个密钥加密。
4856
4957解密时,解映射器通过 ` lengthToBoundary ` 精确识别出当前分段的边界,在分段交界处重置三重转轮的状态以避免跨段状态污染。随后,按照 MessageID 归类,并在同一消息下基于 SerialNumber 升序排列,合并拼接后执行 DeAONT 与解密。
5058
5159::: tip 提示
5260
53- 当一次性导入多个属于不同消息(即 ` MessageID ` 不同)的密文段落进行合并解密时,** 所有消息的加密密码必须保持一致 ** 。
61+ 当一次性导入多个属于不同消息(即 ` MessageID ` 不同)的密文段落进行合并解密时,** 所有消息必须均启用了灵活分段传输,且加密密码必须保持一致 ** 。
5462
55- 由于解密函数在单次运行中仅接受单一密钥参数,若各消息的密码不同,将无法在同一次调用中成功解密。
63+ 由于解密函数在单次运行中仅接受单一密钥参数,若各消息的密码不同,或未携带分段加密标头, 将无法在同一次调用中成功解密。
5664
5765:::
5866
59- ::: warning 警告
67+ ::: warning ID 碰撞
6068
6169单条消息分段传输的分段数量上限为 4096 段。
6270
63- 同时, 两条本应是不同 ID 的消息,有 1/4096 (0.024%) 的概率发生 ` MessageID ` 碰撞。一旦发生 ID 碰撞,将无法将这两条 ID 相同的消息混在一起进行合并解密。
71+ 两条本应是不同 ID 的消息,有 1/4096 (0.024%) 的概率发生 ` MessageID ` 碰撞。一旦发生 ID 碰撞,将无法将这两条 ID 相同的消息混在一起进行合并解密。
6472
6573:::
6674
67- ## 核心配置参数
75+ ## 配置参数
6876
6977在调用 ` WenyanInput ` 加密时,可在配置项中传入 ` FlexibleTransfer ` 的相关参数:
7078
8189
8290:::
8391
84- ## 灵活分段传输流程
92+ ::: warning 限制
93+
94+ 在处理不同长度的数据时,可接受的每段字节数量上下限也有所不同。
95+
96+ 所有** 压缩后** 长度在 40KB 以内的数据均可使用最低下限(10 字节),若压缩后数据长度 X 大于 40KB,则给定的每段字节数量下限 N 必须满足 ` 4096 * N >= X ` ,否则程序将会报错。
97+
98+ 分段灵活传输能接受的最大数据长度为 1520KB(1.48MB),若压缩后数据长度大于此上限,程序也将报错。
99+
100+ :::
101+
102+ ## 流程
85103
86- ### 加密与分段流程
104+ ### 加密与分段
87105
88106``` mermaid
89107flowchart TD
@@ -105,7 +123,7 @@ flowchart TD
105123 LoopNext -- 是 --> Output[输出多段文言文密文]
106124```
107125
108- ### 解密与重组流程
126+ ### 解密与重组
109127
110128``` mermaid
111129flowchart TD
0 commit comments