我正在尝试实现简单的 El-Gamal 密码系统。
而且我不明白如何将消息表示为 1 和 n-1 之间的整数。我唯一想到的是:如果 n 位长度为 k,则将输入消息 m 除以 t | t < k 位,每个位都用作整数。
我认为这是错误的。
那么如何将消息表示为 1 到 n-1 之间的整数呢?
我正在尝试实现简单的 El-Gamal 密码系统。
而且我不明白如何将消息表示为 1 和 n-1 之间的整数。我唯一想到的是:如果 n 位长度为 k,则将输入消息 m 除以 t | t < k 位,每个位都用作整数。
我认为这是错误的。
那么如何将消息表示为 1 到 n-1 之间的整数呢?
您可以执行基本上相当于在分组密码中使用ECB 模式的操作,但是对此存在攻击。攻击者可能会重新排序密文的不同块,您可以毫无问题地对其进行解密,但收到的明文会在您不知情的情况下被破坏。这也可能为重放攻击打开大门,因为这些块都是独立加密的。您将需要某种经过身份验证的加密。
回到你原来的问题。这样的问题通常通过使用混合加密来解决。像 AES 这样的分组密码用于使用随机密钥加密整个明文。这个随机密钥又通过 ElGamal 加密,因为密钥小到可以用 < k位表示。
现在取决于分组密码的操作模式,这仍然是可延展的。您要么需要将密文/明文的散列放在随机密钥旁边作为完整性检查。或者使用 GCM 等经过身份验证的操作模式,并将生成的标签添加到随机密钥旁边。根据k,这应该适合。
random key | hash/tag
请注意,如果它没有达到k,您应该使用某种填充。