computer-science - IT安全中的公钥和私钥基础
问题描述
John 和 Peter 各自生成了一对公钥和私钥。但是,他们还不知道彼此的密钥。现在他们正试图通过网络交换消息 M。
a) 保密交换消息的程序是什么, b) 如果可能发生主动攻击,可以采取哪些措施来降低风险?
解决方案
基本思想很简单:
约翰和彼得都公开了他们的公钥并向全世界广播,“用我的公钥加密你发给我的消息,所以只有我可以阅读它们”
John 使用 Peter 的公钥向 Peter 发送加密消息,只有 Peter 可以解密。同样,Peter 使用 John 的公钥加密响应,因此只有 John 可以读取它。
这一切都假设没有黑幕交易正在进行。如果有活跃的攻击者,则需要一些额外的预防措施。
你怎么知道发布彼得公钥的人是否真的是彼得?他们可能只是声称自己是彼得并发布自己的公钥。对此的解决方案是让受信任的证书颁发机构验证发布公钥的实体的身份,以便这些密钥的消费者可以咨询证书颁发机构,以确信公钥是由声称的同一实体提供的。
你怎么知道你从约翰那里收到的加密消息是否真的来自约翰,而不是其他阅读你的公钥并想冒充约翰的人?为此,您可以要求通信握手成功(以便彼得使用约翰的公钥回复约翰,约翰必须成功响应以确认他的身份),或者您可以要求约翰对发送给彼得的消息进行数字签名。签名包括 John 用他自己的私钥加密部分消息,而 Peter 随后使用 John 的公钥解密。Peter 可以验证使用 John 的公钥进行的解密是否有效(也许可以根据消息内容的散列或已知的固定值等进行检查),并且由于只有 John 知道 John 公钥的私钥,
推荐阅读
- php - Laravel 5.6 在关系中应用枢轴范围
- c++ - macOS 上的 Qt GUI 应用程序:如何找到当前活动的屏幕?
- r - 在 deSolve 中延迟参数值/流入和流出速率
- azureservicebus - PeekLock Microsoft Azure 服务总线
- c# - 如何将依赖项注入 signalR 核心的集线器构造函数?
- c# - 来自 API 的多种返回类型
- json - Google Cloud Text-to-Speech 返回“INVALID_ARGUMENT”
- java - 如何在 Android 9 上制作应用程序支持
- pyspark - 属性错误:“datetime.timedelta”对象没有属性“_get_object_id”
- php - 如何使唯一数组的自定义验证规则依赖于其他字段 laravel