【发布时间】:2016-01-03 23:46:07
【问题描述】:
TL;DR
我是否必须对每条消息进行签名,还是有更有效的方法来验证消息的来源?
为了好玩,我正在开发一个简单的加密协议。我当然知道,在任何严肃的项目中,我都应该使用一些行业标准,比如 OpenSSL,但这是用于学习和实验的。
这个想法是,通信终端交换 RSA 公钥,然后使用这些密钥安全地交换 AES 密钥,这样 AES 密钥就可以用来加密从这一点开始的每条消息。我已经实现了所有这些,并且运行良好。
问题是:由于 AES,潜在的攻击者无法读取任何内容,但仍然可能导致错误或尝试劫持通信或通过中间人(例如她/他可以复制加密的消息并通过一次又一次地发送来破坏事物)。我需要的是数字签名,这样我就可以确认消息来自有效的来源,而且我很幸运,因为我已经有了一个有效的 RSA 实现。
我知道数字签名的工作原理(获取消息的哈希并使用私钥对其进行加密等),但我能想到的唯一方法是对每条消息进行签名,然后在接收端检查签名是否有效。但是,我担心这会减慢我的协议。使用 AES 来保护通信(或任何对称密钥加密)的全部目的是它比 RSA(或任何公钥加密)快得多。这样做不会违背 AES(或任何对称密钥加密)的目的吗?所以问题是:我必须对每条消息都签名吗?或者有更有效的方法吗?例如,OpenSSL 如何处理这个?
【问题讨论】:
标签: security networking encryption cryptography digital-signature