我的一般问题是:如何在不安全的通道上传输敏感数据?
这是我当前的解决方案,我想知道其中是否存在漏洞:
- 在服务器上生成一个随机密钥(我正在使用 PHP)。
- 将该密钥保存在会话中,并在一个 JavaScript 变量中输出该密钥。
- 在表单提交时,使用Javascript 中的 Triple DES与密钥加密密码。
- 在服务器上使用来自会话的密钥解密密码,然后销毁会话。
- 在服务器上生成一个随机密钥(我使用php语言)。
- 将密钥存储在会话中,并在javascript变量中输出密钥。
- 在表单提交时,使用javascript的Triple DES算法和密钥来加密密码。
这样做可以避免在网络传输中明文传输密码,但需要在网络传输中明文传输密钥,这会使窃听者有可能破译密码。
就像之前提到的一样,不要试图自己设计加密协议!已经有为此类问题创建、经过专业人士评审、被反复测试、被黑客尝试入侵并受到安全社区认可的成熟协议,请使用它们! 没有一个人能够比整个加密与安全社区共同合作得到更好的方案。
您的方法存在缺陷——如果有人拦截了密钥传输以及用户的加密回复,他们就可以解密回复并获取用户的用户名/密码。
然而,有一种安全地在不安全的媒介上发送信息的方法,只要这些信息在传输过程中无法被修改,这就是所谓的迪菲-赫尔曼算法。基本上,两个参与者根据他们的对话计算共享密钥用于加密数据——但是观察者没有足够的信息推断出密钥。
然而,设置客户端和服务器之间的会话可能会比简单地将SSL应用到您的站点要棘手得多,并且需要更多的时间。您甚至不必为此支付费用——您可以生成自签名证书来提供必要的加密。这不会防止中间人攻击,但迪菲-赫尔曼算法也无法防止。
即使是STS在某些情况下也是不安全的,其中攻击者能够将自己的身份(签名密钥)插入到发送方或接收方的位置。
身份和认证
这正是SSL旨在解决的问题,通过建立一系列“受信任”的签名机构的层次结构,这些机构已经理论上验证了谁拥有一个域名等信息,连接到网站的人可以验证他们确实正在与该域名的服务器通信,而不是与中间人进行通信。我实现了一种不同的方法
这适用于密码传输。对于数据的使用意味着使用最终的哈希作为明文的加密密钥,并生成随机初始化向量以与密文一起传输到服务器。
有关此事的任何评论吗?
我有一个类似的问题(想要在表单中加密数据而不需要支付SSL证书费用),所以我进行了一些搜索,找到了这个项目:http://www.jcryption.org/
我还没有使用过它,但它看起来很容易实现,所以我想在这里分享一下,以防其他人也在寻找类似的东西,并像我一样发现了这个页面。
致 OLI
在你的方法中,例如我和我的同事在同一子网中,使用相同的路由器,因此我得到与我的同事相同的IP地址。我在浏览器中打开相同的URL,因此服务器使用相同的IP生成时间戳,然后我使用TCP/IP转储从我的同事连接中嗅探散列或非散列密码。我可以嗅探他发送的所有内容。因此,我还有他表单中的所有哈希值,你也有时间戳(我的)和相同的IP。因此,我使用POST工具发送所有内容,嘿,我已经登录了。