高效三"Ships",一消息算法

Efficient Three "Ships", One Message Algorithm

前提是人 1 想跨洋向人 2 发送秘密消息 M(没有密钥共享)。她决定通过 3 艘船发送部分消息,例如如果任何两艘船的版本都被送达人2 可以构建完整的原始消息。目标是使每个部分消息 (M1、M2、M3) 无法自行破译。在所有 3 条消息都到达的情况下,冗余消息可以用作 ECC/parity.

假设消息由一系列 8 位字符 (m1,m2,m3...,mM) 组成。在最有效的编码中,len(M1+M2+M3) 将是 1.5X len(M)。

一个低效的编码是:M1每个字符由高半字节(UN)加低半字节(LN)组成,M2由UN减去LN组成,M3就是简单的LN。 M1 和 M2 每个字符使用 5 位,M3 每个字符使用 4 位。

注意:赋值可以轮换,这样 M1 得到 UN+LN,UN-LN,LN,... M2 得到移位 UN-LN,LN,UN+LN,.. M3 得到双移位 LN ,UN+LN,UN-LN 为了:

1) 使消息长度相同(每3个字符) 2) 添加进一步混淆

此架构有效但效率不高。有任何建议的改进或替代方法吗?

Assume the message is comprised of a series of 8-bit characters (m1,m2,m3...,mM). In the most efficient encoding len(M1+M2+M3) will be 1.5X len(M).

符合这个要求的方案是:

  • M1:高半字节(4 位)
  • M2:低半字节(4 位)
  • M3 : 高半字节和低半字节异或(4位)

即:

    bit of original 8 byte:
M1: 7   6   5   4
M2: 3   2   1   0
M3: 7^3 6^2 5^1 4^0

在收到M1和M2的情况下,你有消息。在接收到M1和M3的情况下,可以通过对M1和M3进行异或来重构M2。在接收到M2和M3的情况下,可以通过对M2和M3进行异或来重构M1。在每种情况下,第三个值都可以用作奇偶校验。

可以通过打乱半字节中每一位的含义来进一步混淆代码。例如,位 0 可以使用上述方法,但对于(半字节的)位 1,低半字节可以在 M1 中,XOR 值在 M2 中等。即:

    bit of original 8 byte:
M1: 7   6^2 1   4
M2: 3   6   5^1 0
M3: 7^3 2   5   4^0

注意这是混淆,不是安全。