首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确生成RSA+AES密钥

正确生成RSA+AES密钥
EN

Stack Overflow用户
提问于 2015-11-06 15:34:05
回答 1查看 1.8K关注 0票数 1

为了学习,我创建了一个聊天应用程序,其中连接通过SSL/TLS完成,消息使用AES-CBC-256加密,AES密钥使用RSA-2048加密。

AES密钥是每个用户在每个会话中随机生成(AesProvider.GenerateKey())的(这意味着每一个用户正在聊天),而IV是通过传入生成的密钥随机生成的(AesProvider.GenerateIV()),每次创建消息(在发送之前)。

在RSA方面,我正在生成一个安全的随机会话名来存储容器中生成的私钥,并发送公钥。我还使用了与AES中相同的模型(每个用户使用一个密钥对)。

我还应该声明,我使用HMAC - the 512散列消息,并发送使用AES密钥/Iv加密的相同公钥加密的HMAC密钥。因为我已经读到它不需要经常重新生成,所以我计划每5000或10000次调用一次HMAC密钥。

问题:

1)我应该只为每个用户创建一个RSA密钥对,并在所有会话中使用它,还是说它现在是好的呢?

( 2)使用相同的AES密钥,只像上面解释的那样更改IV,是否被视为安全?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-06 15:52:37

答案不多,因为你正在做的是最好的实践。

不过,也有一些笔记;

每个会话不需要RSA密钥对(并且生成密钥是花费的)。

在应用程序的生命周期或数年内,您只能拥有一个2048位强RSA密钥,因为这就是即使是最需要安全性要求的web应用程序(如电子商务站点或金融应用程序)所做的事情。

每个会话都应该有一个随机的AES密钥/IV对,这很好。

最好是每个会话有一个HMAC密钥(而不是处理范围很宽),因为您正在安全地发送密钥(RSA加密),并且您还在有线上安全地发送HMAC值(AES加密)。

只更改IV几乎等于更改密钥和IV (从某种意义上说),因为如果更改IV,加密的输出对于相同的内容将是不同的。

不过,有一个音符。为了防止中间人攻击模仿您的服务器证书,您的客户端代码是通过签名检查来验证证书,还是仅仅是您在客户端发送的公钥而没有进行任何验证?

您应该有一个自签名的持久证书,或者生成由持久证书(例如,CN=FrozenDeathChatServer)颁发的随机证书(RSA密钥对),其中客户端在安装客户端软件时安装在受信任的根证书颁发机构之下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33570264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档