它是一个很好的私人数据传输和保护解决方案吗


Is it a good solution for private data transmission and protection?

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

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

我起草了一份清单如下:

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

  2. SHA256/SHA512/Teece MD5(在服务器站点上,使用随机Salt加密,该随机Salt与用户ID一起投标)使用PHP使用SHA256算法对普通密码进行重新加密,并使用用户id绑定salt。

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

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

  • 在服务器端,存储经过腌制和哈希处理的passowrds(关于如何正确处理,有成千上万的文章)
  • 当客户端上的用户登录时,他会输入用户名和密码
  • 使用用户名,从服务器请求salt(例如通过AJAX)。这不是安全问题,因为盐不是秘密。在同一回复中发送服务器时间戳
  • 在客户端创建盐水散列时,这会产生一个双方都知道的秘密,即使它从未越界。保留它
  • 使用服务器时间戳和客户端本地时间来计算时间偏移并保留它——您需要它来避免重播攻击
  • 你现在可以使用这个秘密(加盐的密码哈希)和时间戳来安全地传输你想要的任何东西:对于请求,用(偏移校正的)时间戳和一些熵加盐的passhash,再次哈希。将此作为密钥加密(脑海中浮现的是AES)到服务器的消息,同时发送时间戳和随机盐
  • 在服务器上拒绝超过几秒钟的时间戳以确保重播安全
  • 在服务器上,使用provide timestamp和salt重新创建此消息的密钥

Crypto-js有您需要的js部分

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

1024位RSA加密被小心饿死的CPU破解