ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP的mcrypt扩展名是否符合FIPS 197标准?

2019-07-26 06:31:08  阅读:250  来源: 互联网

标签:mcrypt php cryptography fips


我正在使用以下加密代码,它就像一个魅力,但我必须验证它符合FIPS 197,否则法律会杀了我.

mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SALT, $plaintext, MCRYPT_MODE_ECB,
               mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),
                                MCRYPT_RAND))

mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SALT, $plaintext, MCRYPT_MODE_ECB,
               mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),
                                MCRYPT_RAND))

解决方法:

Mcrypt的RIJNDAEL_256算法是具有256位块大小的Rijndael算法的版本. AES(这是FIPS 197定义的)仅具有128位块大小(以及三种不同的密钥大小)的版本.

所以不,你这里没有使用AES.请改用RIJNDAEL_128,它与AES相同.

您的代码还有其他问题:

>如果使用相同的密钥加密多个块,则不应使用ECB.所以,永远不要.使用安全操作模式,如CBC或CTR.
>正如CodeInChaos评论的那样,您通常希望确保您也具有真实性,而不仅仅是机密性(根据您的协议,您甚至可能需要进行身份验证以进行保密).因此,在您的消息中添加MAC,或使用一种操作模式,该操作模式还提供身份验证以及机密性(如CCM或GCM) – 不确定mcrypt中包含哪些.
>您在加密(好)和解密(坏)上生成随机初始化向量.这对于ECB无关紧要,因为它不使用初始化向量,但是对于任何其他模式,您将为这两个操作获得不同的初始化向量,这意味着解密将获得不同的结果.对于CBC,只有第一个块是垃圾,而CTR一切都是垃圾(而CCM / GCM只会报告“失败”).

由于初始化向量不需要是秘密的(只是不可预测或不重复,取决于模式),因此可以将其与消息(作为前缀)一起发送,或者派生它(在双方)来自一个共同的秘密(就像SSL / TLS中的第一个初始化向量,它们来自主密钥,就像加密密钥和MAC密钥一样).

标签:mcrypt,php,cryptography,fips
来源: https://codeday.me/bug/20190726/1541154.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有