这是私人数据传输和保护的好方法吗?

时间:2012-03-02 12:45:09

标签: php javascript mysql

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

我对此方案的要求包括:安全数据传输(无SSL,TCL),高度安全的存储(一旦丢失密码,数据就变得无法恢复)

我已经起草了下面列出的一个:

  1. RSA(分别在客户端和服务器站点上加密和解密) 详细地说,我计划使用Javascript来加密客户端站点上的用户ID和密码,并使用PHP生成私有&公钥和解密服务器站点上收到的密文。

  2. SHA256 / SHA512 /两次MD5(在服务器站点上,使用随机Salt进行加密,使用用户ID进行出价) 使用PHP使用带有用户ID绑定盐的SHA256算法重新加密普通密码。

  3. 这是满足我要求的好方法吗?感谢

2 个答案:

答案 0 :(得分:1)

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

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

Crypto-js有你需要的JS部分

答案 1 :(得分:0)

对我们来说是一个坏消息:( RSA 1024位在100小时内被破解了!这是文章:

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