我正在斯坦福大学的 coursera 学习密码学课程。 我有以下问题。
我有一个问题,为什么在 G(k) 中附加 0,即 G'(k) = G(k) || 0 是 被视为不安全的 PRG,因为消息中的 0 被复制而不带出 加密。而在语义安全的 E'(k,m) = 0 ||E(k,m) 即 前置 0 被视为语义安全。为什么附加 0 不会破坏语义安全?
请澄清。
你正在比较两个不同的东西。一个是PRG(伪随机生成器),另一个是,我相信,PRP(伪随机排列)。
PRG 只有一个输入,即密钥,输出应该是随机的,与真正的随机块无法区分。这意味着当对手查看字符串时,他无法确定输出是来自 PRG 还是真正的随机块。但是,当您附加 0 时,您可以轻松区分是使用真正的随机生成器还是 G'(因为真随机仅在所有情况下的一半情况下以 0 结尾,而 G' 总是以 0 结尾)。
在第二种情况下,攻击者想要找到有关明文 m 的一些信息。我们假设 E(k,m) 是安全的。现在的问题是:E'(k,m)安全吗?前面的 0 是否为您提供了有关明文 m 的一些信息?如果是这样,这意味着你有"一个工具",可以从E'(k,m)中提取一些关于m的信息。如果你有这样的工具,你能用它来打破E(k,m)吗?是的,你可以。您可以获得 E(k,m) 的输出,在前面加上 0 并将其传递给您的工具。瞧,你刚刚打破了E(k,m),但这意味着我们对E(k,m)是安全的假设是不正确的。