繁体   English   中英

PHP:mcrypt与非对称openssl,用于加密双方之间的消息

[英]PHP: mcrypt vs. asymmetrical openssl for encrypting messages between two parties

我正在开发一个基本的安全消息系统。 我希望默认情况下使用用户的哈希密码(加上盐和胡椒)作为密钥来加密存储在MySQL数据库中的消息。 运行此系统的站点仅通过SSL访问。

我一直在使用以下过程在PHP的mcrypt扩展下开发它:

  1. user1user2发送$message

  2. $message使用user1的密钥存储在user1的聊天记录中,也存储在“传输”表中,使用全局密钥(存储在数据库外部)进行加密,只要表空为空,就会重新生成

  3. 下一次user2检查新消息时,它将使用全局密钥解密存储在传输表中的$message ,用user2的密钥加密user2的聊天记录的消息(因此,每个消息之间发送的消息)两个用户实际存储两次;一次使用每个用户自己的密钥)并从传输表中删除该消息

我意识到这不是完美的(传输表是明显的弱点),但在咨询各种讨论和文章之后,这是我能想到的最好的。

然后我突然意识到,使用OpenSSL扩展来进行非对称加密可能会更好。 但是,在我与mcrypt几天之前:

  1. 这是正确的想法吗?

  2. OpenSSL是为此设计的和/或能够实现的吗?

  3. 我读到非对称加密在计算上更加繁重。 我自己的基本测试似乎表明OpenSSL慢了OpenSSL数量级。 加密更强大还是仅仅是非对称加密的本质?

我会回答每个项目:

  1. 是的,使用非对称加密通常用于传输消息。 请参阅例如CMS和PGP容器格式。 当然还有更多。 特别是使用某种PKI建立信任。

  2. 绝对。 它包含用于创建和读取PKCS#7容器格式的方法,这些格式等同于加密消息语法(CMS)和用于处理保存非对称公钥(需要信任)的X509证书的库。 您当然也可以创建自己的格式。 目前还包括GCM加密,这对聊天应用程序非常有用。 最后,您可能最终会使用混合加密 - 部分不对称,部分对称。

  3. 这是非对称加密的本质。 对于相同大小的密钥,通常对称加密更强。 攻击可能是完全不同的,所以你不能创建一个直接比较,或说一个是另一个的两倍强。 您可以比较http://www.keylength.com/等网站上的关键优势。

如果您想要更快的加密,那么您可以使用Elliptic Curve加密。 另一种常见方法是建立对称会话密钥并将其用于加密(消息机密性)以及可能的消息认证和完整性。

执行邮件加密时要小心填充oracle攻击和中间人攻击! 让东西上班相对容易。 确保安全不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM