我们如何在PHP中使用GCM模式加密?

 余挺空荡荡_833 发布于 2023-01-06 18:31

我一直在阅读很多关于GCM的内容以及它有多棒,我想知道如何使用PHP进行AES-GCM认证加密.是否支持?我在Codeigniter框架文档中找到了一些对GCM的引用,这使我相信它可以在Codeigniter中使用.mcrypt()

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

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

任何帮助将不胜感激.

1 个回答
  • 你在这里问几个问题,所以我将按照上面的说明单独解决这些问题:

    是否在mcrypt()中受支持?

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

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

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

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

    既然你提到了AES-GCM的性能统计数据,是的,它在现代CPU(i7和更新版本)上表现非常出色,它们具有专门用于加速所需操作的硬件支持.如果您的服务器或客户端没有硬件加速,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-GCM的高级实现,利用AES-NI

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

    2023-01-06 18:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有