AES-256-GCM 在 PHP M1 Macbook 的 ext-sodium 中不可用

AES-256-GCM unavailable in PHP ext-sodium on M1 Macbook

最近在工作中,我们有一个新员工来处理我们的一个项目,该项目通过 PHP 的钠扩展使用 AES-256-GCM 加密和解密。由于大家都用的是Macbook,新员工收到了一台2020款的M1芯片Macbook Pro。

启动上述项目的第一次尝试 运行 是使用 HomeBrew 安装程序,它运行以下组件:

我们很快注意到 sodium_crypto_aead_aes256gcm_is_available() 在我们的代码中返回 false,表明 Macbook 的硬件不支持 AES-256-GCM。另一方面,运行 openssl list-cipher-algorithms | grep "GCM" 给了我们这个列表:

id-aes128-GCM
id-aes192-GCM
id-aes256-GCM
id-aes128-GCM
id-aes192-GCM
id-aes256-GCM

运行 openssl speed -elapsed -evp aes-256-gcm 也返回了预期的输出,所以 openssl 似乎 access/is 可以使用它。

You have chosen to measure elapsed time instead of user CPU time.
Doing aes-256-gcm for 3s on 16 size blocks: 26616041 aes-256-gcm's in 3.00s
Doing aes-256-gcm for 3s on 64 size blocks: 6757776 aes-256-gcm's in 3.00s
Doing aes-256-gcm for 3s on 256 size blocks: 1647975 aes-256-gcm's in 3.00s
Doing aes-256-gcm for 3s on 1024 size blocks: 411604 aes-256-gcm's in 3.00s
Doing aes-256-gcm for 3s on 8192 size blocks: 51239 aes-256-gcm's in 3.00s
LibreSSL 2.8.3
built on: date not available
options:bn(64,64) rc4(ptr,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: information not available

第二次尝试使用项目的 dockerized 版本产生了相同的结果,并且还声称硬件不支持带有 AEAD 的 AES-256-GCM,这是意料之中的,因为它在相同的主机硬件上运行。这是使用来自 Dockerhub.

的官方 PHP 7.4 图像完成的

关于 M1 芯片、使用 (lib)sodium 的 AES-256-GCM 和 PHP 的组合是否存在任何已知问题?我们花了几天时间在这里和支持板上进行搜索,但这种组合似乎非常小众。现在我建议每个开发人员都使用基于 Intel 的 Macbook,因为在该平台上一切都开箱即用。

到目前为止,我们已经检查了以下内容:

在 Apple 支持论坛 further inquiry 之后,他们向我指出了 ARM 硬件加速支持的方向未完全存在于 libsodium 中。 GitHub 题为 Support for AES and GCM instructions on ARM processors 的问题 #363 进一步表明,鉴于该问题于 2016 年打开并于 2018 年突然关闭,因此似乎近期内没有立即执行此操作的计划。

目前,如果您的项目将在 ARM 架构上开发或运行,我建议在 AES-256-GCM 中使用 OpenSSL。他们似乎已经为 ARM 环境实现了硬件加速。