小程序
小游戏
企业微信
微信支付
扫描小程序码分享
如下图,微信公众号提供的消息加解密算法,使用了NoPadding 和 固定IV,存在一定安全隐患,请问能否改进?
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
如何得出存在安全隐患的?
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
如何得出存在安全隐患的?
示例: 对明文P做流加密,转换成密文C。所使用的是流密钥K,它来自密钥与初始向量。我们可以得到等式:C = P xor K。假如攻击者得知密文C1与C2来自同一把密钥与初始向量。那么攻击者就能透过底下公式得到明文P1与P2:C1 xor C2 = (P1 xor K) xor (P2 xor K) = P1 xor P2.
许多要求初始向量必须让攻击者无法预测。这种要求一般使用随机数或拟随机数来达到。在这种应用中,重复的初始向量是可以被忽略的,但是生日攻击的问题依然得列入考量,因为若向量可以被预测,会让攻击者找到撤销明文的线索。
示例: 比如A使用CBC模式加密消息,而有一位攻击者E能截看所有密文并指定特定的明文给A,让A进行加密(即,E有办法运行选择明文攻击)。接着,我们假设A用明文PAlice与初始向量IV1做出密文CAlice。然后E设计了明文PEve,并能控制或得知初始向量IV2的出现。那么E就可以反复测试,直到E设计的明文被加密后等于密文CAlice。自此,E用以下公式得知自己设计的明文PEve等于明文PAlice
CAlice = E(IV1 xor PAlice) = E(IV2 xor (IV2 xor IV1 xor PAlice)).[6]
初始向量的值主要还是取决于密码算法。其做法不外乎就是随机或指定(stateful)。使用随机的方式则取值由发送方计算,并要将向量值送交给接收方。指定的方式则是让收发两方分享初始向量所能指定的所有值(state),这些值收发双方必须预先就定义好。
https://zh.wikipedia.org/wiki/%E5%88%9D%E5%A7%8B%E5%90%91%E9%87%8F