Alice提供了一个消息签名软件。该软件在空隙环境中运行。
软件给出了要签名的消息和私钥。然后,该软件生成一个有签名的PGP消息,并显示正确的公钥。软件是否可能将私钥隐藏在消息签名的某个地方?
发布于 2015-08-13 16:13:47
与大多数现代签名方案一样,PGP签名也不是确定性的:也就是说,对同一个消息进行两次签名不会导致相同的签名。要做到这一点,需要使用一个随机的nonce (使用一次的数字)。现在需要看起来是随机的,但是没有办法保证它是随机的:你可以用一个固定的密钥加密一些你想要提取的数据,而且它和正常的现在是无法区分的。签名仍然会被验证,但是“知道的人”可以解密现在的信息,以恢复提取出来的数据。
话虽如此,但通常情况下,非诚勿扰还不足以拥有完整的私钥。您可以轻松地通过与每条消息一起提取私钥的随机段来缓解这一问题;然后,接收方可以在看到足够多的消息后将密钥拼凑在一起。
编辑后续:上面描述的天真方法每次都会产生相同的签名,一个死掉的赠品。不过,修起来很容易。协议中的当前长度通常足以提供密码强度,这足以包含一些随机比特,以确保无法检测到恶意签名。例如,你可以把现在的数字一分为二;前半部分可能是真正随机的,后半部分可能是使用前半部分作为IV加密的私钥的一部分。作为进一步的改进,提取数据的第一个字节可以用作偏移量,显示该消息中泄露的密钥的哪一部分。
发布于 2015-04-13 15:21:11
是的是可能的。考虑:
signature = sign_message(message, private_key)
// super secret sneaky private key theft
signature = signature + "/" + base64(private_key)
signed_message = embed_signature(message, signature)如果您希望该签名仍然使用标准gpg --verify验证,则可以使用注释或MessageID签名头。
发布于 2015-04-14 15:07:32
Debian /DSA漏洞实际上确实允许这样做。
如果您使用坏的随机数(例如,在Debian缺陷中发生的小范围内),私钥可以从签名中计算出来(通过暴力强制遍历所有可能的随机数)。sesse.net对它的工作原理有一个很好的解释。
因此,使用一个糟糕的随机数生成器(例如,返回一个常量值而不是一个随机数)和DSA密钥一起使用,您实际上将密钥隐藏在签名中。通过在GnuPG中执行一些微小的更改并重新编译,这是可能的。

(XKCD连环画)
https://security.stackexchange.com/questions/85913
复制相似问题