security - 一次性 RSA 公钥
问题描述
我是加密新手,我正在尝试了解有关 RSA 和 AES 加密的更多信息,并将其合并到我正在从事的项目中。
情况是,我有一台在本地网络上运行的服务器,我们称它为本地服务器。本地服务器通过 Internet 与远程 API 服务器通信,只有在 API 服务器上注册的用户通过 Oauth2 进行身份验证后才允许访问 API 服务器路由,该 Oauth2 在本地服务器上创建会话。一次只有一个用户登录到本地服务器。
我设定的目标是启用从 API 服务器到登录用户调用的本地服务器的文件传输。我在阅读各种在线资源后整理出的当前解决方案如下。
(假设用户正在登录服务器并且我们刚刚验证了他的身份)(1)本地服务器创建自签名证书(2)将带有消息摘要的公钥发送到 API 服务器(3)API 服务器验证消息,并创建 AES 密钥 (4) 使用来自本地服务器的公钥加密 AES 密钥,并使用消息摘要作为响应发送回本地服务器 (5) 本地服务器检查消息摘要并使用私钥解密AES 密钥。(6) AES 密钥将用于在 API 服务器上加密文件并在本地服务器上解密。(7) 在本地服务器和 API 服务器上都丢弃公钥 (8) 在用户下次登录时创建新的公钥。
据我所知,使用自签名证书可能会导致中间人攻击。这通常不是一个好习惯。然而,另一方面,很难为本地网络生成证书。
为这个模糊的问题道歉,但我正在尝试找出我的解决方案存在哪些潜在的安全问题。我很想了解这个话题,但我觉得我发现的大多数解决方案都不适用于我的场景。
所以我想问一下这样的协议是否可以接受?如果公钥仅用于一个请求而不是丢弃,会有什么风险?谢谢你的帮助。
解决方案
推荐阅读
- swift - Swift:以编程方式自动布局图像
- c - 为什么输出参数不会在函数之外改变
- c# - xaml ResourceDictionary 中预期的标识符,用于 Xamarin 表单中的主题化目的
- laravel - 当我在 macOS 的终端上运行它时出现 laravel 错误
- git - 如何进行合并提交
- sql - 如何在 2 分钟内将 90 亿条记录插入数据库?
- camunda - Camunda:提交响应后无法创建会话
- python - 在 Python 中使用迭代器创建无限随机游走
- postgresql - 在 postgres 的流复制中排除表的解决方法
- sql - 在 oracle 中,我可以将字符串放在 num 数据类型列中吗?