首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这是一个很好的PHP加密策略吗?

这是一个很好的PHP加密策略吗?
EN

Cryptography用户
提问于 2018-09-10 16:39:41
回答 1查看 781关注 0票数 2

我正在编写一个多租户应用程序,它代表每个客户与几个不同的API交互。显然,我们需要在数据库中存储这些不同API的私钥,以便能够连接到它们。不用说,我需要加密这些。

我想对系统上的每个租户使用一个单独的加密密钥(我使用的是openssl_encrypt和AES-256-CBC)。为了实现这一点,我有一个单独的“密码”数据库。tenant_keys表包含以下列:

  • tenant_hash,它具有存储在租户设置表中的随机值,用于查找
  • 一个tenant_key,它是租户的唯一加密密钥。
  • 一个key_timestamp,我将来会用它定期更新租户

明显的缺点是,如果数据库被窃取,攻击者就会拥有所有的密钥。为了解决这个问题,我生成了一个“主密钥”,它作为文本文件存储在服务器上。然后使用这个主密钥加密所有不同的租户密钥。因此,当第一次启动会话并查找租户时,租户的密钥将被解密并存储在会话中。下面是我的问题:

  • 是否有更好的方法来保护每个租户密钥(也许是某种类型的密钥服务器,但是构建一个完整的CA层次结构,这样的方法似乎比使用良好的chmod设置来保护master_key文件要过分呢?)
  • 除了PHP会话之外,是否有一种安全的方法可以临时存储租户的密钥,而不需要在每次我们需要使用它时执行一轮解密(花费CPU时间)?PHP会话最终将存储在某种类型的共享存储中(可能是redis),因为环境将被集群化。
EN

回答 1

Cryptography用户

发布于 2018-09-13 05:50:23

对彩虹桌

的防护

首先,设计是一个登录系统,这样用户就不能设置错误的密码,并且可以对彩虹表进行保护。一个很好的解决方案是使用盐,就像在bcrypt中一样。

公钥

保护

为每个用户生成公共-私有对。然后,用密码加密用户的私钥,并选择密码密钥派生函数PKDF,这样就可以防止对用户密码的猜测和暴力攻击。您可以使用他们的密码加密和解密密钥-加密密钥。

会话密钥

当您希望向用户发送消息时,生成会话密钥并使用AES加密算法对消息进行加密,使用适当的方案CBC、CTR或GCM,并使用适当的填充方案将会话密钥由用户公钥保护。

稍后,当用户登录系统时,您可以使用他们的密码解密他们的私钥,并通过提取每条消息的会话密钥打开消息(如果有的话)。希望这一切都清楚。

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/62238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档