php - 安全登录 : public key encryption in PHP and Javascript

标签 php javascript security encryption passwords

我正在尝试使“普通”用户名/密码登录表单安全,而不需要 HTTPS。我的想法是这样的:

  • 服务器为某种非对称加密算法生成 key 对。它将这个 key 对存储在一个临时表中(或者可能是本地 session 数据)。
  • 服务器将表单发送给客户端并包含公钥。
  • 用户填写表格。
  • 在将密码发送到服务器之前,Javascript 使用给定的公钥对密码进行加密。
  • 表格已发送。
  • 服务器使用它的私钥解密密码(它从临时表中获取,使用公钥找到它)。

为此我需要知道的是:

  • 哪种加密方法最好用?自适应搜索广告?
  • 如何在 PHP 中解密密码?
  • 可能是最困难的一个,我如何让 Javascript 加密密码?

最佳答案

提前:但是,我很抱歉我的否定;

实现自己的安全协议(protocol)绝不是个好主意,除非您是训练有素的安全专家,或者您实际上并不真正关心安全性,只想给人留下这样的印象安全(营销)并停止脚本小子。

SSL绝对不是指纹锁,正如您评论中所说,JCryption和您的提案等同于有一扇门,您可以在其中输入两位数的密码来打开门,并且可以无限次重试。如果您不是真的感兴趣并且只是路过,很难打破,但如果您想进入那所房子(您可能会这样做,否则不需要安全),您就会进入。

还有一点是,人们常常忘记提及他们想要实现的目标。安全性具有著名的 CIA 三个组成部分,即 secret 性、完整性和可用性。您传输的数据是 secret 的还是完整性重要(即您确定发送的数据来自您期望的数据而不是中间人)对您来说重要吗?

为了在这种情况下具体说明,您在这里实现的唯一目标是被动攻击者无法看到线路上经过的内容。一旦您的攻击者变得活跃并更改其路由上的消息,您的整个安全性就会崩溃。因此,我的建议是坚持使用专家提出的解决方案(在本例中为 TLS,而不是 ssl,因为那是它的旧版本)并确保您的服务器支持它。

编辑:

顺便说一句,如果没有证书,SSL/TLS 将无法工作。公钥加密的全部要点是至少应该在某个地方有一些可信方。

另一方面,如果您不关心您的用户会收到“无效证书”消息,您可以创建自己的证书,这非常简单。在那种情况下,您的证书不受浏览器信任,但是,您可以确定至少您的通信是安全的(好吧,在这种情况下有异常(exception),但仍然......)

关于证书应该免费的说法,确实是从一个 Angular 来看的。我认为声称它是伪造/愚蠢的人不知道成为认证机构需要什么。这些公司投资数百万以确保通信安全,并确保他们通过销售证书赚了很多钱,但这是他们的工作,他们也应该像其他人一样赚钱。

edit2:评论后

我确实说你有一个安全的通信。但是,您忽略了一点,即使用自签名证书您不知道与谁进行安全对话。想象一个黑暗的房间,完全隔绝窃听谈话。现在想象一下这样一个房间有光和没有光的区别。如果房间有灯,您实际上可以看到您正在安全地与谁交谈,并且只选择与您喜欢信任的人交谈。现在想象在一个完全黑暗的房间里做同样的事情。你只能希望在这个黑暗的房间里与你交谈的人只是一个盟友,而不是你的对手。但是,您无法知道,只是希望它没问题。尽管您的谈话本身是安全的,但没有人可以窃听,您仍然没有“完全”安全。

如果我作为骗子进行中间人攻击,我可以在用户不注意的情况下创建自签名证书。因此,将 TLS 与自签名证书一起使用的优势在于,您至少可以实现协议(protocol)的正确性(甚至实现它也绝非易事)。此外,您可以通过建议您的用户手动信任证书一次来避免丑陋的警告。然而,这只有在您的回访者群体相对较小的情况下才有可能,对于公共(public)网站而言,这并不是真正的解决方案。

关于php - 安全登录 : public key encryption in PHP and Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528012/

相关文章:

php - 无需查询即可使用 PHP 生成规范标签?

javascript - 我需要在 Zurb Foundation 中同时使用 Mixins 和 Javascript 吗?

java - 如何使用Java代码防止保存jar内的公钥

security - 小型网站 - openID 而不是 SSL?

php - Dreamweaver 扩展美化 PHP/JavaScript/jQuery 代码

php - 用于查找某个字母之前或之后的字母的正则表达式

php - curl: (26) 无法打开文件

javascript - 如何从 JavaScript 对象数组中删除特定元素?

javascript - 表格行数据没有扩展到足以在悬停时更改背景颜色

android - 使用应用程序签名作为 key ?