最近在工作中,我们有一位新员工参与我们的一个项目,该项目通过 PHP 的钠扩展利用 AES-256-GCM 加密和解密。由于我们都使用Macbook,新员工收到了一台带有M1芯片的2020款Macbook Pro。
启动并运行上述项目的第一次尝试是使用 HomeBrew 设置,该设置运行以下组件:
- Apache 2.4
- PHP 7.4
- MySQL 5.7
我们很快注意到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 似乎可以访问/能够使用它。
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
使用该项目的 docker 版本的第二次尝试产生了相同的结果,并且还声称硬件不支持带有 AEAD 的 AES-256-GCM,这是预期的,因为它在相同的主机硬件上运行。这是使用 Dockerhub 的官方 PHP 7.4 镜像完成的。
关于 M1 芯片、使用 (lib)sodium 的 AES-256-GCM 和 PHP 的组合是否存在任何已知问题?我们花了几天时间在这里和支持板上进行搜索,但这种组合似乎相当小众。目前,我建议每个开发人员仍使用基于英特尔的 Macbook,因为该平台上的一切都是开箱即用的。
到目前为止,我们已经检查了以下内容:
- PHP 中启用了 ext-sodium 吗?是的
- 它可以在使用 HomeBrew 的基于 Intel 的 Macbook Pro 上运行吗?是的
- 它可以在使用 Docker (compose) 的基于 Intel 的 Macbook Pro 上运行吗?是的
- OpenSSL 支持 AES-256-GCM 吗?是的
最佳答案
further inquiry之后在 Apple 支持论坛上,他们向我指出了 libsodium 中尚未完全提供 ARM 硬件加速支持的方向。标题为 Support for AES and GCM instructions on ARM processors #363 的 GitHub 问题进一步表明,鉴于该问题于 2016 年提出并于 2018 年突然关闭,似乎没有立即计划立即这样做。
目前,如果您的项目将在 ARM 架构上开发或运行,我建议您对 AES-256-GCM 使用 OpenSSL。他们似乎已经为 ARM 环境实现了硬件加速。
关于php - AES-256-GCM 在 M1 Macbook 上的 PHP ext-sodium 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67982144/