问题标签 [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 回答
1824 浏览

encryption - 在 openssl 中使用 EVP_aes_128_gcm 用于大小不是 16 的倍数的广告

我正在尝试使用 openssl EVP (EVP_aes_128_gcm) 作为 GMAC 的接口。我正在针对 NIST 的 CAVP GCM 测试向量(http://csrc.nist.gov/groups/STM/cavp/documents/mac/gcmtestvectors.zip)测试代码。问题是:当广告大小是 16 的倍数时,代码可以给出正确的 GMAC 标签。但如果大小不是 16 的倍数,则结果是错误的。可能是什么问题呢?

代码是:

对于测试向量(代码中的注释部分):

输出错误...

对于测试向量:

输出是正确的:

我使用的版本是:OpenSSL 1.0.1 14 Mar 2012

0 投票
2 回答
17945 浏览

java - AES-GCM:AEADBadTagException:GCM 中的 mac 检查失败

在第一次尝试实现 AES-GCM 时,我们面临生成 AuthenticationTag、加密密码和 GCM mac 检查最终失败的问题。对于当前的实现tag[]正在填充,但byte[] encrypted仍然为空。并因此cipher.doFinal(data1, offset)给出了' mac check in GCM failed'。字节数组的大小似乎存在一些问题,有人可以分享在什么基础上确定输出缓冲区大小吗?这应该分块完成吗?

任何指向 AES-GCM 实现的指针/链接都将受到高度赞赏。

以下是我们的实现:

它给出了以下异常:

提前致谢!!

0 投票
2 回答
2896 浏览

java - 使用openssl解密用java加密的aes-gcm

我在Java中有以下代码:

样本输出:

我将 Base64 输出复制到一个文件(测试输入)中,并尝试使用以下命令对其进行解密:

我收到一条bad decrypt错误消息(退出代码:1)。尝试不同的模式(id-aes192-GCM 和 id-aes256-GCM)结果相同。

我做错了什么?

0 投票
2 回答
3139 浏览

c - EVP_DecryptFinal_ex 中用于解密的最终块的正确格式是什么?

为了学习目的,我实现了一个简单的 AES-256-GCM 加密和解密。在测试我的代码时,如果我输入长度为 6 的倍数的字符串,那么我会得到正确的输出,但在其他情况下,解密的数据会附加一些垃圾字符。

现在我在https://www.openssl.org/docs/crypto/EVP_EncryptFinal_ex.html上读到

但是由于在这种情况下默认启用填充,我猜测问题出在最终块的正确格式上。我在下面附上了我的代码:

0 投票
0 回答
1605 浏览

encryption - 如何使用内核 Crypto API 实现 AES-GCM 加密?

您好我正在开发一个可堆叠的文件系统WrapFS并尝试在其上实现 AES-GCM 密码以加密存储在底层文件系统中的数据。我在内核级别处理 AES 的 GCM 模式时遇到了很大的麻烦。但是,我成功地在 CTR 模式下实现了 AES,下面附上了相同的代码。有人可以为我指出如何将其修改为 AES-GCM 的正确方向吗?

我查看了此链接,但这并没有太大帮助。我正在寻找两件事:1.)如何将身份验证标签与加密数据一起存储在写入的文件中,以及 2.)如何通过向较低文件系统发送和接收来处理 AES-GCM 的 IV。

谢谢

0 投票
1 回答
2861 浏览

java - 解密 TLS 1.2 AES-GCM 数据包

我正在开发一个 Java 程序来解密使用密码的TLS 1.2会话TLS_RSA_WITH_AES_128_GCM_SHA256。我使用wireshark录制了一个测试会话。大师的秘密是众所周知的。

Packet 11包含HTTP GET Request 我正在尝试解密的内容。

握手数据:

包 11 数据:

到目前为止我做了什么:

密钥推导:

我这里只需要客户端密钥,因为我想解密一个客户端->服务器包。我根据 RFC 扩展了服务器和客户端密钥以及 IV。 Client Write Key: 4B119DFBFC930ABE130030BD53C3BF78 Client Write IV: 2029CAE2

随机数:

我从 salt(=Client Write IV)和显式 nonce(=加密数据的前 8 个字节)创建 AES-GCM nonce。 Salt: 2029CAE2 explicitNonce: C91DE005E2AE50A8 Nonce: 2029CAE2C91DE005E2AE50A8

附加身份验证数据 (AAD):

这就是我显然被卡住的地方。RFC5246 说:

附加数据 = seq_num + TLSCompressed.type + TLSCompressed.version + TLSCompressed.length;其中“+”表示串联。

所以我做了这个:

我认为seq_no是 1。发送记录时,它会重置为零Change Cipher Spec。( Packet #8) 那么加密Finished记录就有了seq_no = 0。下一个客户端数据包是我们的Packet #11 with seq_no = 1

代码:

现在我将所有东西都输入 BouncyCastle:

这总是抛出MAC failed: mac check in GCM failed但是解密的输出是正确的:

这打印GET / HTTP/1.0\n

解压助手:

结论: 由于解密后的输出是正确的,我可以放心地假设密钥派生和解密工作正常。只有认证失败。所以我想也许我在附加身份验证数据 (AAD) 上做错了。所以这个问题归结为:

如何正确组装附加身份验证数据 (AAD)?

谢谢!

0 投票
1 回答
3136 浏览

php - PHP的GCM认证加密功能

我需要在运行 PHP 引擎版本 5.4.34 的共享虚拟主机帐户上运行以下命令。(即我无法安装任何 3rd 方库。)

是否有标准函数在二进制字符串上实现伽罗瓦/计数器模式(GCM) 认证加密(AES标准)?

0 投票
2 回答
8250 浏览

c++ - AES、128 和 256 无效密钥长度

我正在尝试使用 Crypto++ 加密文本。上次使用 AES CTR 时效果很好,但现在使用 CBC 或 GCM 时,我可以使用的最大密钥长度是 32 位?

处理加密的代码:

运行此 Crypto++ 时会抛出Exception

请注意,使用 Wiki 中提供的 example.zip 时会发生同样的事情(并将密钥长度更改为 256 或 128)

任何想法为什么Exception被抛出?

0 投票
1 回答
3439 浏览

php - AES-256-GCM 模式解密在 php 中失败

这是我的代码:

我得到了加密的消息,但解密没有给出任何结果或错误消息。相同的代码正在使用另一种方法,例如 aes-256-cbc。

0 投票
1 回答
2228 浏览

c - AES-CBC + HMAC 和 AES-GCM 之间的极端时间差异

所以我一直在广泛地寻找 CBC 和 GCM 的不同 AES 实现,我不想自己实现这个,以防我出错,所以我找到了以下 AES CBC 代码并在我的 RX63NB 上测试了它们的速度(瑞萨测试板)。

我对 Cyclone 的速度有多快感到惊讶,为了澄清我从CycloneSSL 获取了 AES、CBC 和 Endian 文件并且只使用了这些文件。

然后我尝试了 CycloneSSl 的 GCM,这是输出:

我检查了 HMAC 时间(来自 CycloneSSL),看看需要多少时间:

其中最慢的是漩涡。

如果您将 128 字节的 cbc 加密时间添加到带有 128 字节的漩涡的 hmac 中,您将获得 6795 μs,这大约是 GCM 所需时间的一半。

现在我可以理解,由于 galios 字段等原因,GHASH 比 HMAC 需要更长的时间,但与我知道的最慢的 HASH 算法相比,它的速度要慢 2 倍,这太疯狂了。

所以我开始怀疑我是否做错了什么,或者 CycloneSLL gcm 的实现是否真的很明显。不幸的是,我还没有在 c 中找到其他易于使用的 GCM 实现来与之进行比较。

我使用的所有代码都可以在 pastebin上找到,不同的文件用 -------------------- 分隔

这是我用来用 GCM 加密的代码:

out[] 中的数据是来自 in[] 的 gcm 加密数据,并且一切正常。(正确解密并通过身份验证。

问题

  • 所有 GCM 实现都这么慢吗?
  • 还有其他(更好的)GCM 实现吗?
  • 如果我想要快速加密+验证,我应该只使用 HMAC 吗?

编辑

我已经能够从mbedTLS (PolarSSL)获得 GCM 方法,它比旋风分离器快 11 倍(加密/解密 128 个字节需要 880us)。它产生与 cylcone GCM 相同的输出,所以我相信它可以正常工作。