问题标签 [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.

0 投票
1 回答
294 浏览

java - 如何从 AES-GCM 密文中去除签名?

我们需要对字符串进行加密,并查看加密后的字符串是否已存在于数据库中。

如果我们使用 AES-GCM,相同的未加密数据每次都会产生不同的加密字符串。这使得匹配无用。

有没有办法使用 Java 从签名的密文中删除签名以显示我们可以匹配的密文?

0 投票
1 回答
465 浏览

c++ - 带有 GunZip 的 AES/GCM,无法正确解压缩

编辑我再次改写了这个问题,并提供了一个可以重现错误的最小工作示例。

我正在尝试使用 GCM 进行文件加密。我的下划线框架是 Qt。想法是这样的:

  1. 加载源文件 egajpg
  2. 将 GCM 模式下的文件加密为 PDATA
  3. 放入 ADATA 存储单字节(目前,在实际应用中,这将更多地包含 IV、原始文件名等信息)
  4. 将 ADATA 附加到加密文件

  5. 加载加密文件并提取 ADATA/PDATA/MAC

  6. 以正确的顺序将此数据提供给 AuthenticatedDecryptionFilter 并期望将解密的文件存储到 FileSink

我需要一个循环来遍历未加密的文件并将文件泵入 AuthenticatedEncryptionFilter,因为我需要检查 isAlive 以在实际应用程序中进行线程处理。因此,我不能使用简单的流水线,必须在循环中手动处理数据。

现在解决问题

哈希验证在下面的代码上失败(在 derypt 上抛出异常)

我怀疑我以错误的方式将信息输入解密器,但我正在关注官方 CryptoPP 示例

请帮忙,谢谢

0 投票
1 回答
249 浏览

c++ - 无法从 AES-128-GCM 获得正确的输出

下面的测试代码理论上应该给我 NIST 测试套件 58e2fccefa7e3061367f1d57a4e7455a 的结果,但是输出的十六进制转储会产生 9eeaed13b5f591104e2cda197fb99eeaed13b5f591104e2cda197fb9 吗?

这是 nIST 测试:

(测试用例 1 http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf

0 投票
2 回答
9075 浏览

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_MISMATCHntstatus.h

即使参数pbIV被标记为 in/out,参数指向的元素pbIV也不会被BCryptEncrypt(). 这是预期的吗?我还查看pbNonceBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO结构中由pPaddingInfo指针指向的字段,但该字段也没有被修改。我还尝试“手动”推进 IV,根据计数器方案自己修改内容,但这也无济于事。

BCryptEncrypt成功链接和/或BCryptDecrypt函数的正确程序是什么?

0 投票
0 回答
620 浏览

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 更改为

但这会给我一个错误,即找不到算法。控制台输出是

有人知道如何正确设置吗?

0 投票
1 回答
12254 浏览

java - PKCS5Padding 可以处于 AES/GCM 模式吗?

AES/GCM 的填充模式是什么?我知道它可以是 NoPadding,因为在 ECB 模式下它可以是 PKCS5Padding,在 GCM 模式下呢?在 JCE 界面中,我们需要提供“算法/模式/填充”(参考)。

所以我使用以下代码来获取实例,它在 JDK 中工作,但在 IBM SDK 中失败,它说

找不到支持 AES/GCM/PKCS5Padding 的提供商

填充的真实用例是什么?

0 投票
0 回答
419 浏览

encryption - 在使用 GCM 和 OpenSSL 解密之前验证数据

我正在使用 AES-GCM 来解密一些数据。我有一些额外的认证数据(AAD)、认证标签和实际的加密数据。

我需要做的是在实际解密之前验证 AAD 和加密数据。

我知道EVP_DecryptFinal_ex如果数据未通过身份验证,OpenSSL 的函数将返回 0,但似乎没有一种方法可以在不实际解密数据的情况下验证数据。

我需要这样做的原因是我的加密数据可能非常大,所以我想一次只使用EVP_DecryptUpdate. 但是,这样做会提供我无法确定是否真实的数据。

我需要做的是对所有 AAD 和加密数据进行身份验证,然后EVP_DecryptUpdate一次用于解密它的一部分。我可以一次解密所有数据以对其进行身份验证,尽管这会给我的应用程序增加额外的计算时间,这是我想避免的。

0 投票
1 回答
1345 浏览

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 模式的项目。我应该怎么办?有没有办法更新我的图书馆或我没有导入的东西?


这是我的代码:

0 投票
1 回答
34426 浏览

java - 如何处理“AES/GCM/NoPadding”的 IV 和身份验证标签?

AES/GCM/NoPadding在 Java 8 中使用加密,我想知道我的代码是否存在安全漏洞。我的代码似乎工作,因为它加密和解密文本,但一些细节不清楚。

我的主要问题是:

该 IV 是否满足“对于给定密钥,IV 不得重复”的要求。来自RFC 4106

我也很感谢我的相关问题的任何答案/见解(见下文),但第一个问题最困扰我。我不知道在哪里可以找到回答这个问题的源代码或文档。


这是完整的代码,大致。如果我在写这篇文章时引入了错误,我深表歉意:

假设用户破解我的密钥 = 游戏结束。


更详细的问题/相关问题:

  1. cipher.getIV() 返回的 IV 对我来说安全吗?
  • 它是否避免了在伽罗瓦/计数器模式中重复使用 IV、组合键的灾难?
  • 当我有多个应用程序同时运行此代码时是否仍然安全,所有应用程序都从相同的 src 数据(可能在同一毫秒内)向用户显示加密消息?
  • 返回的 IV 是由什么制成的?它是一个原子计数器加上一些随机噪声吗?
  • 我是否需要cipher.getIV()使用自己的计数器避免并自己构建 IV?
  • cipher.getIV()假设我使用的是 Oracle JDK 8 + JCE Unlimited Strength 扩展,源代码是否可以在线获得?
  1. 那个 IV 总是 12 字节长吗?

  2. 身份验证标签是否总是 16 字节(128 位)长?

  3. 使用#2 和#3,以及缺少填充,这是否意味着我的加密消息总是12 + src.length + 16字节长?(所以我可以安全地将它们压缩成一个字节数组,我知道正确的长度?)

  4. 给定用户知道的恒定 src 数据,我向用户显示无限数量的 src 数据加密是否安全?

  5. 如果每次 src 数据都不同(例如包括System.currentTimeMillis()或随机数),我向用户显示无限数量的 src 数据加密是否安全?

  6. 如果我在加密之前用随机数填充 src 数据会有帮助吗?在前面和后面说 8 个随机字节,还是只在一端?或者这根本没有帮助/让我的加密变得更糟?

(因为这些问题都是关于我自己的代码的同一块,并且它们彼此密切相关,并且其他人在实现相同的功能时可能/应该有相同的问题集,所以将问题分成多个问题感觉不对帖子。如果这更适合 StackOverflow 的格式,我可以单独重新发布它们。让我知道!)

0 投票
1 回答
1907 浏览

python - 使用 python-cryptography 解密推送通知的 InvalidTag 错误

我正在尝试在 python3 中实现对 pushbullet 临时消息的端到端加密支持。

我正在使用python-cryptography,但InvalidTag解密时出现 -Exception 。我已经仔细检查了密钥、iv 和标签,但我不知道哪里出了问题。

密钥是这样派生的:

然后将其作为 Base64 编码字符串存储在密钥环中,但我仔细检查了加密时是否获得了正确的字节字符串(也可以在 REPL 中手动执行)。

解密:

所有变量都是字节字符串,这里是 python-cryptography 的相关文档

澄清一下:我已经尝试过自己的方法来加密和成功解密一些文本。但是,当我在手机和客户端上激活 Pushbullet e2e 加密并收到通知时,我收到上述错误。

加密方法像这样组装加密的消息:

我可以破译它。不适用于收到消息中的标签。

有任何想法吗?:/