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应警告用户自己检查身份验证标记大小,而不是仅允许任何身份验证标记输入. 所以,是的,你错过了一些东西,我会说实施 – 或者至少是文档 – 被打破了;接得好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |