加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – AES-128-GCM似乎没有检查身份验证

发布时间:2020-12-17 02:25:56 所属栏目:百科 来源:网络整理
导读:如果我正确理解GCM模式,它不仅应该提供加密,还应该提供密文的认证.但是,当我使用 Ruby的OpenSSL实现来使用AES-256-GCM模式加密数据时,即使我篡改了auth_tag,它也会很高兴地解密数据.我在这里遗漏了什么或者实施确实破了吗? require 'openssl'# ALICE encryp
如果我正确理解GCM模式,它不仅应该提供加密,还应该提供密文的认证.但是,当我使用 Ruby的OpenSSL实现来使用AES-256-GCM模式加密数据时,即使我篡改了auth_tag,它也会很高兴地解密数据.我在这里遗漏了什么或者实施确实破了吗?

require 'openssl'

# ALICE encrypts some secret data

data = 'secret'
cipher = OpenSSL::Cipher.new('aes-128-gcm')
cipher.encrypt
key = cipher.random_key
iv = cipher.random_iv
cipher.auth_data = 'auth_data'
ciphertext = cipher.update(data) + cipher.final
auth_tag = cipher.auth_tag

# EVE tampers with the auth tag,e.g. dropping the last 10 bytes

auth_tag = auth_tag[0..-11]

# BOB decrypts the ciphertext

cipher = OpenSSL::Cipher.new('aes-128-gcm')
cipher.decrypt
cipher.key = key
cipher.iv = iv
cipher.auth_tag = auth_tag
cipher.auth_data = 'auth_data'
data = cipher.update(ciphertext) + cipher.final

# BOB is very sad because no error is raised!

我使用的是OpenSSL版本内置的OS X:

% openssl version
OpenSSL 0.9.8zg 14 July 2015

解决方法

GCM支持多种大小的身份验证标记.通过从右侧删除字节,在这些版本中缩短了身份验证标记.这正是攻击者似乎正在做的事情.

现在API危险地不稳定.首先,(16 – 10)* 8 = 48,这不是AES-GCM的有效大小(根据NIST SP 800-38D.此外,认证标签大小应该是密码的输入或配置参数.至少API应警告用户自己检查身份验证标记大小,而不是仅允许任何身份验证标记输入.

所以,是的,你错过了一些东西,我会说实施 – 或者至少是文档 – 被打破了;接得好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读