gpt4 book ai didi

php - 在移动服务器通信中使用密码作为加密 key 的一部分

转载 作者:行者123 更新时间:2023-11-29 10:40:09 24 4
gpt4 key购买 nike

我目前正在开发一款移动应用程序,该应用程序附带使用 PHP 开发的网络服务。我们要确保的一件事是用户数据在所有可能的方面都是安全的。

经过仔细评估,我们决定使用RNCryptor对于与加密相关的所有事情。这是对 HTTPS 连接的补充。当前流程如下(登录示例):

  1. RNCryptor iOS 上的库在将密码发送到服务器之前使用 key 对其进行加密。
  2. 然后服务器将这个加密的密码存储在数据库中。
  3. 重新验证时,应用程序发送密码(再次用静态 key 加密),服务器解密(意味着服务器也有加密 key ),验证登录并发送登录 key (用相同的加密)静态 key )返回给客户端。
  4. 每个后续请求都依赖于加密的登录 key 和用户名来验证用户和登录 session 的有效性。

我认为上述系统存在缺陷,因为静态加密 key 以及该 key 在服务器和客户端上均可用。

我们想要的是通过将原始密码与静态加密 key 合并来使加密 key 动态化。这将使每个用户的加密 key 都是唯一的,但这也意味着服务器将不知道该 key 。服务器必须知道 key ,因为其他用户数据也会根据此 key 进行加密和解密。

有人可以帮我解决这个问题吗?我需要采取哪些步骤来使系统更安全?任何特定于服务器-移动客户端的代码 fragment 或引用链接也可以。我知道那里有很多教程,但大多数教程都将客户端恢复到基于 Web 而不是移动设备。

PS:抱歉发了这么长的帖子。

最佳答案

我可能只使用 OATH2 token 进行身份验证,但如果您想按照自己的方式进行...

为了保护密码,使用了加盐哈希。作为使用 salt 散列密码的基本示例,请考虑以下内容,并记住它不是密码安全的。

shaResult = SHA1(16 Byte Random Salt | "p@ssword")

基础知识:服务器存储 shaResult。您的应用存储生成的盐值。当用户输入他们的密码时,您将其附加到存储的盐中,对其进行哈希处理,然后将其发送到服务器进行验证。现在真的不需要加密到服务器了。 HTTPS 连接应该处理这个问题。

良好的加密密码散列在 Salted Password Hashing - Doing it Right 中有详细描述。总而言之,他们建议使用以下内容:

  1. 应使用加密安全伪随机数生成器 (CSPRNG) 生成盐。多种编程/脚本语言的链接中提供了建议的 CSPRNG。
  2. 每个用户每个密码的盐必须是唯一的。每次用户创建帐户或更改密码时,都应使用新的随机盐对密码进行哈希处理。切勿重复使用盐。盐也需要很长,这样可能的盐就有很多。根据经验,使您的盐至少与散列函数的输出一样长。盐应与哈希一起存储在用户帐户表中。
  3. 使用经过充分测试的加密哈希算法,例如 SHA256、SHA512、RipeMD、WHIRLPOOL、SHA3 等。
  4. 使用执行多次迭代的慢散列函数。标准算法包括 PBKDF2bcrypt .
  5. 使用键控哈希算法,HMAC .

我会重申,安全连接仍然需要与上述结合使用。

关于php - 在移动服务器通信中使用密码作为加密 key 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24954073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com