在下面的例子中,如果privateKeyOfA被泄露了,安全问题是什么?有人能在没有privateKeyOfB的情况下解密消息吗??
Aes.encrypt(privateKeyOfA,publicKeyOfB,message) Aes.decrypt(publicKeyOfA,privateKeyOfB)
如果不是,我猜为什么我们这里需要privateKeyOfA是为了A的签名?
发布于 2018-10-26 19:07:59
签名是必需的,因为接收者必须知道消息来自他可以识别的人。如果他不能验证签名,这意味着他不认识这个人。
如果A的私钥被黑客泄露,他可以向每个人发送带有模拟A的签名的消息。
发布于 2018-10-27 01:57:39
A将使用密钥交换(例如,使用DH或ECDH)来将privateKeyOfA + publicKeyOfB转换为AES密钥。B也可以使用privateKeyOfB + publicKeyOfA以相同的方式生成相同的AES密钥。A和B之间的所有流量都将使用相同的AES密钥进行加密。
假设所有公钥都是已知的(毕竟它们是公钥),那么任何有权访问privateKeyOfA的人都可以重新生成A生成的所有AES密钥,以便与任何人通信。这意味着涉及此密钥的所有流量(由A、B或其他任何人发送或接收的消息)都将被泄露。
但如果使用了临时版本(如在TLS的某些模式中),则会为每个会话生成一个新密钥,因此如果1个密钥被泄露,则只有该会话被泄露。你可以阅读更多关于forward secrecy的内容。
如果按您所描述的方式使用密钥,则不会将其用于签名。
https://stackoverflow.com/questions/53002796
复制相似问题