问题标签 [aes-gcm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何从 AES-GCM 密文中去除签名?
我们需要对字符串进行加密,并查看加密后的字符串是否已存在于数据库中。
如果我们使用 AES-GCM,相同的未加密数据每次都会产生不同的加密字符串。这使得匹配无用。
有没有办法使用 Java 从签名的密文中删除签名以显示我们可以匹配的密文?
c++ - 带有 GunZip 的 AES/GCM,无法正确解压缩
编辑我再次改写了这个问题,并提供了一个可以重现错误的最小工作示例。
我正在尝试使用 GCM 进行文件加密。我的下划线框架是 Qt。想法是这样的:
- 加载源文件 egajpg
- 将 GCM 模式下的文件加密为 PDATA
- 放入 ADATA 存储单字节(目前,在实际应用中,这将更多地包含 IV、原始文件名等信息)
将 ADATA 附加到加密文件
加载加密文件并提取 ADATA/PDATA/MAC
- 以正确的顺序将此数据提供给 AuthenticatedDecryptionFilter 并期望将解密的文件存储到 FileSink
我需要一个循环来遍历未加密的文件并将文件泵入 AuthenticatedEncryptionFilter,因为我需要检查 isAlive 以在实际应用程序中进行线程处理。因此,我不能使用简单的流水线,必须在循环中手动处理数据。
现在解决问题
哈希验证在下面的代码上失败(在 derypt 上抛出异常)
我怀疑我以错误的方式将信息输入解密器,但我正在关注官方 CryptoPP 示例。
请帮忙,谢谢
c++ - 无法从 AES-128-GCM 获得正确的输出
下面的测试代码理论上应该给我 NIST 测试套件 58e2fccefa7e3061367f1d57a4e7455a 的结果,但是输出的十六进制转储会产生 9eeaed13b5f591104e2cda197fb99eeaed13b5f591104e2cda197fb9 吗?
这是 nIST 测试:
(测试用例 1 http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf)
c - 如何在 GCM 模式下使用 AES 链接 BCryptEncrypt 和 BCryptDecrypt 调用?
使用 Windows CNG API,我可以在 GCM 模式下使用 AES,通过身份验证加密和解密单个数据块。我现在想连续加密和解密多个缓冲区。
根据CNG的文档,支持以下场景:
如果加密或解密的输入分散在多个缓冲区中,则必须将调用链接到 BCryptEncrypt 和 BCryptDecrypt 函数。通过在 dwFlags 成员中设置 BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG 标志来指示链接。
如果我理解正确,这意味着我可以BCryptEncrypt
在多个缓冲区上顺序调用,并在最后获取组合缓冲区的身份验证标签。同样,我可以BCryptDecrypt
在多个缓冲区上按顺序调用,同时将实际的身份验证检查推迟到最后。不过,我无法让它工作,看起来 for 的值dwFlags
被忽略了。每当我使用BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG
时,我都会得到一个返回值,0xc000a002
它等于.STATUS_AUTH_TAG_MISMATCH
ntstatus.h
即使参数pbIV
被标记为 in/out,参数指向的元素pbIV
也不会被BCryptEncrypt()
. 这是预期的吗?我还查看pbNonce
了BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO
结构中由pPaddingInfo
指针指向的字段,但该字段也没有被修改。我还尝试“手动”推进 IV,根据计数器方案自己修改内容,但这也无济于事。
BCryptEncrypt
成功链接和/或BCryptDecrypt
函数的正确程序是什么?
xml - 带有 AES-GCM 的 xmlsec
我在 cygwin 环境中从https://www.aleksey.com/xmlsec/news.html编译了最新版本的 XMLSec。现在我按照这个示例使用会话密钥和数字签名加密 XML 文件。http://users.dcc.uchile.cl/~pcamacho/tutorial/web/xmlsec/xmlsec.html#htoc9 由于 CBC 存在一些严重的安全问题,我现在想加强使用 AES-128-GCM 而不是 3DES- 192-CBC。我尝试将 Session-Key-Template.xml 更改为
但这会给我一个错误,即找不到算法。控制台输出是
有人知道如何正确设置吗?
java - PKCS5Padding 可以处于 AES/GCM 模式吗?
AES/GCM 的填充模式是什么?我知道它可以是 NoPadding,因为在 ECB 模式下它可以是 PKCS5Padding,在 GCM 模式下呢?在 JCE 界面中,我们需要提供“算法/模式/填充”(参考)。
所以我使用以下代码来获取实例,它在 JDK 中工作,但在 IBM SDK 中失败,它说
找不到支持 AES/GCM/PKCS5Padding 的提供商
填充的真实用例是什么?
encryption - 在使用 GCM 和 OpenSSL 解密之前验证数据
我正在使用 AES-GCM 来解密一些数据。我有一些额外的认证数据(AAD)、认证标签和实际的加密数据。
我需要做的是在实际解密之前验证 AAD 和加密数据。
我知道EVP_DecryptFinal_ex
如果数据未通过身份验证,OpenSSL 的函数将返回 0,但似乎没有一种方法可以在不实际解密数据的情况下验证数据。
我需要这样做的原因是我的加密数据可能非常大,所以我想一次只使用EVP_DecryptUpdate
. 但是,这样做会提供我无法确定是否真实的数据。
我需要做的是对所有 AAD 和加密数据进行身份验证,然后EVP_DecryptUpdate
一次用于解密它的一部分。我可以一次解密所有数据以对其进行身份验证,尽管这会给我的应用程序增加额外的计算时间,这是我想避免的。
c++ - 在 OS X 上的 Xcode 中使用 AES/GCM 时出现编译错误
我正在使用带有 Xcode 7 beta 2 的 OS X 10.10。我想使用来自 OpenSSL 的 AES/GCM。我想从一个示例开始,所以我从OpenSSL wiki中获取了一个示例。代码如下。
代码无法编译。看起来编译器找不到以下内容:
EVP_aes_256_gcm
EVP_CTRL_GCM_SET_IVLEN
EVP_CTRL_GCM_GET_TAG
我认为缺少涉及 GCM 模式的项目。我应该怎么办?有没有办法更新我的图书馆或我没有导入的东西?
这是我的代码:
java - 如何处理“AES/GCM/NoPadding”的 IV 和身份验证标签?
我AES/GCM/NoPadding
在 Java 8 中使用加密,我想知道我的代码是否存在安全漏洞。我的代码似乎工作,因为它加密和解密文本,但一些细节不清楚。
我的主要问题是:
该 IV 是否满足“对于给定密钥,IV 不得重复”的要求。来自RFC 4106?
我也很感谢我的相关问题的任何答案/见解(见下文),但第一个问题最困扰我。我不知道在哪里可以找到回答这个问题的源代码或文档。
这是完整的代码,大致。如果我在写这篇文章时引入了错误,我深表歉意:
假设用户破解我的密钥 = 游戏结束。
更详细的问题/相关问题:
- cipher.getIV() 返回的 IV 对我来说安全吗?
- 它是否避免了在伽罗瓦/计数器模式中重复使用 IV、组合键的灾难?
- 当我有多个应用程序同时运行此代码时是否仍然安全,所有应用程序都从相同的 src 数据(可能在同一毫秒内)向用户显示加密消息?
- 返回的 IV 是由什么制成的?它是一个原子计数器加上一些随机噪声吗?
- 我是否需要
cipher.getIV()
使用自己的计数器避免并自己构建 IV? cipher.getIV()
假设我使用的是 Oracle JDK 8 + JCE Unlimited Strength 扩展,源代码是否可以在线获得?
那个 IV 总是 12 字节长吗?
身份验证标签是否总是 16 字节(128 位)长?
使用#2 和#3,以及缺少填充,这是否意味着我的加密消息总是
12 + src.length + 16
字节长?(所以我可以安全地将它们压缩成一个字节数组,我知道正确的长度?)给定用户知道的恒定 src 数据,我向用户显示无限数量的 src 数据加密是否安全?
如果每次 src 数据都不同(例如包括
System.currentTimeMillis()
或随机数),我向用户显示无限数量的 src 数据加密是否安全?如果我在加密之前用随机数填充 src 数据会有帮助吗?在前面和后面说 8 个随机字节,还是只在一端?或者这根本没有帮助/让我的加密变得更糟?
(因为这些问题都是关于我自己的代码的同一块,并且它们彼此密切相关,并且其他人在实现相同的功能时可能/应该有相同的问题集,所以将问题分成多个问题感觉不对帖子。如果这更适合 StackOverflow 的格式,我可以单独重新发布它们。让我知道!)
python - 使用 python-cryptography 解密推送通知的 InvalidTag 错误
我正在尝试在 python3 中实现对 pushbullet 临时消息的端到端加密支持。
我正在使用python-cryptography,但InvalidTag
解密时出现 -Exception 。我已经仔细检查了密钥、iv 和标签,但我不知道哪里出了问题。
密钥是这样派生的:
然后将其作为 Base64 编码字符串存储在密钥环中,但我仔细检查了加密时是否获得了正确的字节字符串(也可以在 REPL 中手动执行)。
解密:
所有变量都是字节字符串,这里是 python-cryptography 的相关文档。
澄清一下:我已经尝试过自己的方法来加密和成功解密一些文本。但是,当我在手机和客户端上激活 Pushbullet e2e 加密并收到通知时,我收到上述错误。
加密方法像这样组装加密的消息:
我可以破译它。不适用于收到消息中的标签。
有任何想法吗?:/