6

我已经阅读了很多关于GCM的内容以及它有多棒,我想知道如何使用PHP使用AES-GCM身份验证加密。支持吗?我在 Codeigniter 框架文档中发现了一些对GCM的引用,这让我相信它可以在Codeigniter中使用。mcrypt()

我还在一篇关于Zend的文档中发现了一些东西。我不打算使用Codeigniter驱动程序,因为我不使用任何框架,也不打算用于我当前的项目。然而,在我看来,如果Codeigniter能够做到这一点,那么我们应该能够在没有框架的情况下做到这一点。

似乎GCM是兼顾安全性和性能的方式(我看到了非常令人印象深刻的性能数据)。我的感觉是我们需要这个,但我找不到任何例子。必须有人知道如何实现这一点。我知道OpenSSL支持它。

任何帮助将不胜感激。

4

3 回答 3

5

你在这里问了几个问题,所以我将如上所述分别解决它们:

mcrypt() 是否支持它?

不,mcrypt 本身不支持 AES 加密。但是,它确实支持 Rijndael(发音为“rain-doll”),这是 AES 的基本算法。AES 被定义为 Rijndael 的一组特定参数,因此您可以使用适当的参数来匹配 AES,但 GCM 模式不可用。

似乎 GCM 是兼顾安全性和性能的方式(我看到了非常令人印象深刻的性能数据)。我的感觉是我们需要这个,但我找不到任何例子。

不幸的是,这是选择安全模型或实现的错误方法。不同的算法和密码模式有不同的用途,例如,应用错误的模式可能会使您的应用程序容易受到攻击,即使您使用的是像 AES 这样明显强的密码。GCM 非常受欢迎,因为这种模式可以一次性提供加密和身份验证。并非所有应用程序都需要两者,或者可能会以削弱其设计强度的方式使用它们。您需要做好功课,以确保这是适用于您的应用程序的正确模式,以及当前要使用的最小参数是什么。

除非您是安全专家,否则最好使用经过验证的框架。实施自己的加密或安全管理绝不是一个好主意,因为很容易犯错误,从而使您容易受到简单的攻击。最好的选择是找到一个开源的、经过验证和测试的框架,它可以完成您想要完成的任务,并仔细配置它以满足您的需求。在那之后,保持框架的补丁和最新是关键。

既然您提到了 AES-GCM 的性能统计数据,是的,它在现代 CPU(i7 和更新版本)上确实表现得非常好,这些 CPU 具有专门设计用于加速所需操作的硬件支持。如果你的服务器或客户端没有硬件加速,AES-GCM 会慢很多。除了实际的硬件支持之外,您使用的软件库也是关键,因为它需要调用所需的硬件才能利用提高的速度。

我知道 OpenSSL 支持它。

OpenSSL 是实现 AES-GCM 的此类库之一,如果 AES-NI(硬件加速技术)可用,它确实可以利用。

坏消息是今天(2015 年 2 月上旬)可用的 PHP 扩展不支持实现 AES-GCM 的特定库。使用 GCM 的热潮源于最近在 SSL 协议中发现的漏洞,这些漏洞最终迫使每个人迁移到 TLS 并迁移到具有身份验证的加密模式。尽管安全专家多年来一直在推动这一举措,但服务器和浏览器制造商一直在拖延时间,等待对方迈出实现身份验证加密的第一步。我们终于开始看到朝着正确方向发展。

我相信今年晚些时候我们将最终在 PHP 中使用 AES-GCM,但目前它还不是免费的。

一些信息来源: http ://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption其中显示了 EVP 库。利用 AES-NI 的 AES-GCM 高级实现

http://phpaes.com PHP 的 AES 实现。我不知道他们是否已经过适当的测试,或者他们是否使用了硬件加速。他们不提供 GCM,但它可能是一个很好的学习工具。

于 2015-02-10T16:52:10.723 回答
2

您可以将模式设置为初始化函数的参数:

$this->encryption->initialize(
        array('mode' => 'gcm')
);

要使用此代码,您当然要使用 ci 及其加密类

$this->load->library('encryption');

您还可以在初始化方法中更改密码、驱动程序和密钥 - 有关更多信息,请查看http://www.storycon.us/ci3/libraries/encryption.html#id11

于 2014-07-01T21:33:45.123 回答
1

OpenSSL 将无法正常工作,因为 PHP 7.1 之前的所有版本都不支持 AEAD。

你可以使用这个库:https ://github.com/Spomky-Labs/php-aes-gcm

这是一个纯 PHP 库。加密/解密可能比 PHP 扩展慢,但它可以完成这项工作。该库还使用 NIST 的测试向量进行了测试。

于 2016-04-28T14:13:57.613 回答