安全登录:在PHP和JavaScript公钥加密(Secure login: public key

2019-07-21 03:53发布

我试图做一个“正常”的用户名/密码登录表单的安全,而不需要HTTPS。 我的想法是这样的:

  • 服务器生成某种不对称加密算法的密钥对。 它在各种各样的临时表(或者本地会话数据)存储这个密钥对。
  • 服务器的形式发送到客户端,包括公钥。
  • 用户填写表单。
  • 之前它发送到服务器,使用Javascript加密使用给定的公钥密码。
  • 形式发送。
  • 服务器解密它的密码的私钥(它从临时表中获取,使用公钥找到它)。

我需要知道的是这样的:

  • 哪种加密方法是最好用? RSA?
  • 我怎样才能解密PHP的密码?
  • 也可能是最困难的一年,我该怎么做的Javascript加密密码?

Answer 1:

提前:我为是负然而,遗憾;

实现您自己的安全协议是不是一个好主意,除非你是一个训练有素的安全专家,或者你其实并不真正关心的安全性,只需要创建安全性(市场营销)的印象,并停止脚本小子。

SSL是绝对不是一个指纹锁,如您的意见这么说,JCryption和你的建议是相等具备门,您可以输入一个两位数的代码,打开门,你有无限的重试。 这是很难打破的,如果你不是真的感兴趣,只是路过,但如果你想在那家拿(你可能做的,就没有必要别的安全性),你会进去。

另一点是,人们常常忘记提及他们想达到的目标。 安全有著名的三个组成部分叫做CIA,即保密性,完整性和可用性。 这对你来说重要的是,你的数据传输是保密的,或者是诚信很重要(即你确定发送的数据来自你所期望的一个,而不是中间人)?

为了使它在这种情况下,具体的,你在这里实现的唯一的事情就是被动攻击者无法看到最新上线经过。 只要你的攻击者得到活跃,并改变他们的路线上的消息,你的整个安全分崩离析。 所以我的建议是只与解决方案的专家们想出了贴(在这种情况下TLS,未采用SSL自认为是老版的话),只是确保你的服务器支持它。

编辑:

顺便说一句,SSL / TLS离不开证书工作。 在公共密钥加密整个的一点是,应该有至少某处一些可信方。

在另一方面,如果你不关心你的用户将得到一个“无效证书”的消息,你可以创建自己的证书是很容易的。 在这种情况下,您的证书不被浏览器信任,但是,可以肯定的是,至少你的通信是安全的(好吧,也有在这种情况下的例外,但仍...)

该证书应该是自由的说法是真的从一个层面上看。 我想谁声称它是假的人/白痴不知道如何才能成为一个权威机构认证。 这些公司投资数百万,以保持通信的安全,并确保他们做出好的钱卖证书的,但嘿它自己的工作,他们也应该赚钱,就像任何其他人。

EDIT2:后评论

我的确是说你有一个安全的通信。 然而,你错过了点,与自签名的证书,你不知道向谁讲安全。 想象一下,一个黑暗的房间是从窃听谈话完全隔离。 现在想象一下这样的房间之间的区别有和没有光。 如果房间里有灯光,你可以看到你在说谁安全,只能选择谈谈你喜欢信任的人。 现在想象一下,在一个完全黑暗的房间里做同样的。 你可以只希望你跟这个黑暗的房间内的人只是一个盟友,而不是你的对手。 然而,你可以不知道,只是希望它的确定。 虽然你的谈话本身是安全的,没有人能听的,你还是不要有“全”的安全性。

如果我是一个骗子,做一个中间人攻击,我可以创建无需用户注意到自签名证书。 因此,使用TLS的自签名证书的好处是,你至少有协议corrent的实现(甚至实现这个并不容易)。 此外,您可以通过建议用户一次以手动信任证书避免难看的警告。 但是,如果你有一个比较小群的回访者,对一个公共网站,这是不是一个真正的解决方案,这是唯一可能的。



Answer 2:

这似乎不是从客户的角度出发,安全。 两个(相关)的问题:

  1. 如何在客户端信任的服务器? 它如何可以验证密钥服务器的呈现是属于它的人吗?
  2. 这是可以做到的人在这方面的中间人攻击。 恶意的代理可以剥离出并存储公共密钥的客户看到它之前,代其自身,然后解密密码,当客户端进行身份验证,存储,和重新加密并发送,因此客户端不知道的东西这是响应起来。

有什么不对普通SSL? 必须有它的安全,否则厂商和组织将放弃对它的支持一夜之间达成了共识。 相比之下,大多数试图创造一个时髦的新的方式做保障“的廉价”常常错过一些基本的东西。



Answer 3:

它看起来像很多你想做的事是由jQuery插件提供什么JCryption 。 它甚至假设PHP作为后端,因此非常适合你。



Answer 4:

LiveJournal的做类似的东西给你想要的东西,其中:

  1. 服务器生成一个挑战字串,镶入的形式这一点。 [ 1 ]
  2. 客户端生成通过MD5哈希所述口令响应,然后MD5哈希先前散列与所述挑战前缀[ 2 ]。
  3. 服务器获取响应,检查挑战的有效性,然后做同步骤,比较结果的响应。


Answer 5:

这是一个很不错的主意,而且它已经完成。 见jCryption 。



Answer 6:

jCryption看起来很有趣,我还没有看到过。

但我要问什么是错的SSL?

加密代码是非常难以做到的权利,你可以打赌,在浏览器和HTTP服务器发现SSL实现是更严格的测试,比jCryption东西审查。

这就是说,jCryption看起来整洁,如果你绝对需要避免SSL和你不对付超级敏感信息。



Answer 7:

通过存储在服务器上以加密的方法密码服务器可以检索密码和验证由客户端发送的校验和。 发送会话密码,并要求客户进行会话密码的哈希和用户输入的密码,请在服务器上相同,比较两个哈希值。

这不会从MITM攻击保护用户 - 本地管理员,国家安全局,电信,路由器劫持,但会保留密码打开WLAN安全。



文章来源: Secure login: public key encryption in PHP and Javascript