【问题标题】:Is it a good solution for private data transmission and protection?是不是很好的解决隐私数据传输和保护的问题?
【发布时间】:2012-03-02 12:45:09
【问题描述】:

我希望在我的网站上为用户登录功能建立一个私密的数据传输和保护方案。我希望保护的私人数据是用户 ID 和密码。

我对这个方案的要求包括:安全的数据传输(无需 SSL,TCL),高度安全的存储(一旦丢失密码,数据变得有点不可恢复)

我已经起草了一份如下:

  1. RSA(分别在客户端和服务器站点上进行加密和解密) 具体来说,我打算在客户端使用Javascript加密用户名和密码,使用PHP生成私钥和公钥,并在服务器端解密接收到的密文。

  2. SHA256/SHA512/Twice MD5(在服务器站点上,使用随机 Salt 加密,以用户 ID 出价) 使用 PHP 使用 SHA256 算法和用户 id 绑定盐重新加密纯密码。

这是满足我要求的好解决方案吗?谢谢

【问题讨论】:

  • 无需 SSL / TLS 的安全数据传输 - 如何?通过 JS 加密?那怎么安全?丢失密码,丢失所有数据?什么?为什么会有人使用这样的服务?
  • 你也可以试试security.stackexchange.com
  • “没有 SSL,TCL”对于想要通过 HTTP 安全传输数据的系统来说从来都不是一个理智的要求。

标签: php javascript mysql


【解决方案1】:

确保您的密码不被截获的最佳方法是不传输它:这比人们想象的要容易得多:

  • 在服务器端,存储加密和散列的密码(关于如何正确执行此操作的文章有数千篇)
  • 客户端用户登录时,输入用户名和密码
  • 使用用户名,从服务器请求盐(例如通过 AJAX)。这不是安全问题,因为盐不是秘密。在同一回复中发送服务器时间戳。
  • 在客户端上创建加盐哈希,这会产生一个双方都知道的秘密,即使它从未越界。保留它。
  • 使用服务器时间戳和客户端本地时间计算时间偏移并保留它 - 您将需要它来避免重放攻击。
  • 您现在可以使用此密钥(加盐密码哈希)和时间戳来安全地传输您想要的任何内容:对于请求,使用(偏移校正)时间戳和一些熵对密码进行加盐,再次进行哈希。使用它作为密钥来加密(想到 AES)你的消息到服务器,同时发送时间戳和随机盐
  • 在服务器上拒绝超过几秒的时间戳以保证重播安全
  • 在服务器上使用提供的时间戳和盐来重新创建此消息的密钥

Crypto-js 有你需要的 JS 部分

【讨论】:

  • 谢谢,但有两个问题我们不应该忽视。 1)为什么传输盐不会导致安全问题。我的意思是一旦有人获得了我们用于加盐密码的盐,盐似乎是透明的,可以用蛮力恢复密码。在我的解决方案中使用 RSA 的原因是公钥的泄漏不是安全问题。
  • 2) AES 使用相同的密钥进行加密和解密,不是吗。如果是这样,将用作密钥的时间戳和盐的传输是否会引起安全问题?假设黑客可以访问源代码进行加解密。
  • 1) 阅读加盐:加盐不是秘密,它是对预计算攻击的防御(例如彩虹表)。 2.) 双方使用相同的密钥,但从不传输,这使得拦截它有点困难。如果浏览器被泄露,您无需考虑加密:在这种情况下,明文密码也被泄露。
  • >Salt 不是秘密,它是对预计算攻击的防御,是的,但是一旦你得到了 salt 和 salted 密码,你不认为 salt 可以用来解密吗?
  • 请阅读:拥有一个随机盐,即使它是完全公开的,也意味着必须在没有预先计算表的帮助的情况下反转散列。这意味着,没有一个预计算工作可用于所有密码。单独的盐不能用于解密。
【解决方案2】:

还有一个坏消息:( RSA 1024 位在 100 小时内被破解!这是文章:

1024-bit RSA encryption cracked by carefully starving CPU of electricity

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多