首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么FATCA“协议”不直接在Zip存档上使用RSA加密?

为什么FATCA“协议”不直接在Zip存档上使用RSA加密?
EN

Security用户
提问于 2015-06-29 13:48:53
回答 2查看 301关注 0票数 1

下面是上下文:为了将FATCA数据传输到美国IRS服务,IDES协议定义了以下步骤

  1. 将带有信封签名的XML Payload.xml文件、使用RSA私钥的SHA-256签名签名为Payload-signed.xml
  2. 将签名的XML Payload-signed.xml文件打包到zip文件Payload.zip中。
  3. 为AES-256生成一个单用32字节键。
  4. 用AES-256作为Payload.zip加密Zip存档Payload
  5. 用RSA公钥加密AES作为Key交换
  6. 在zip存档中捆绑加密的AES密钥Key和加密的Zip文件Payload

问题:

  • 是否有任何安全原因不直接加密的Payload.zip公开密钥设计为交换?
  • 如何比较RSA加密的安全性(非常小) 32字节( AES密钥)文件和更大的Zip文件?
EN

回答 2

Security用户

发布于 2015-06-29 14:02:31

由于该算法的工作方式,RSA不能“加密”大于密钥大小的数据。当使用填充时,这个大小会进一步下降-例如,对于PKCS#1填充,您只能加密(k/8) - 11字节的消息,其中k是您的密钥大小(以位为单位)。

扩展到处理任意大小的消息是不可行的,因为长RSA密钥的额外成本。作为其他地方提到的,RSA的加密性能是二次型的(即密钥长度加倍会导致密钥长度增加4倍)和三次解密(即密钥长度加倍会使密钥长度增加8倍)。因此,如果您想要使用足够长的密钥来加密,例如,16 as的数据,那么您需要一个131072位的密钥,它在解密时所花费的时间是2048位密钥上的相同操作的262144倍。这根本不符合比例。

他们在规范中所指的是一种混合密码系统,它使用对称密码(例如AES)加密数据,然后用RSA加密其密钥。这提供了非对称密码的共享属性(例如,任何人都能够创建消息,但只有私钥所有者能够解密消息),而不使用可笑的巨大非对称密钥,这会破坏性能。

票数 1
EN

Security用户

发布于 2019-11-12 22:06:40

是否有任何安全原因不直接加密的Payload.zip公开密钥设计为交换?

从技术上讲,人们可以使用RSA作为分组密码(如AES),以(密钥大小填充)长度的块加密数据,并使用操作方式安全地将相同的算法应用于多个数据块。然而,这将是非常缓慢的。在计算上,RSA是一种极其昂贵的操作,特别是如果您使用的密钥在未来几十年内都是安全的(通常您必须这样做,因为公钥当然是公共的;除非数据在很短的时间内是没有价值的,否则您需要使用长度相当昂贵的密钥)。幸运的是,从来没有必要这样做。每个广泛使用的依赖RSA加密的系统都是混合密码体制,它使用昂贵的非对称密码(如RSA)来安全地交换一个强大的、廉价的、通常是短暂的(单次使用)对称密钥(如AES)。因此,昂贵的RSA操作只需执行一次(两端),其余的操作可以使用对称算法完成,这种算法不仅在软件上速度更快,而且常常可以被现代硬件加速。

如何比较RSA加密的安全性(非常小) 32字节( AES密钥)文件和更大的Zip文件?

32字节(256位)听起来可能很短,但这么多纯粹的熵(随机性)就足以保证从现在到宇宙的热死这段时间,一个ZIP文件的长度是安全的,即使你把所有的地球都变成CPU,并以某种方式为它们供电那么长时间。2^256 --这种键的可能值的数目--是一个非常大的数字;您可能只需使用256位就可以为可观测宇宙中的每个原子分配一个唯一的值。

几乎任何RSA密钥实际上都会比它弱得多。与AES密钥不同,RSA密钥绝不接近100%熵;大多数给定长度的数字都不是有效密钥。一个有效的RSA密钥需要是两个非常大的素数的乘积。大多数大的数字都有两个以上的素因子(而且比例越大越糟),因此要获得两倍的熵(可能的有效密钥数量是可能的有效密钥的两倍),您需要使RSA密钥的长度大大超过原来的两倍。要获得与256位AES密钥相同的熵,您需要大约17000位的RSA密钥。

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

https://security.stackexchange.com/questions/92670

复制
相关文章

相似问题

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