我的问题是:有人知道如何在PHP中实现SRP / Diffie-Hellman身份验证(或者是否已经这样做了)?
(一些细节)
本项目的要求之一是使用基于挑战的身份验证,我读过很多关于它的文章,似乎使SRP / Diffie-Hellman与TankAuth (以及SSL一起)一起工作是一种安全的身份验证解决方案(只要正确完成!)
唯一真正的问题是:我只是无法将SRP规范转换成PHP/mysql (我以为自己擅长数学,但显然不是!)
如果它是简单的php并不重要,我可以修改代码使其与CodeIgniter/TankAuth一起工作。
我搜索了很多,我能找到的最接近的是这,但是实现感觉不太好。
我还了解到,我最终将不得不调整这一点,使两个步骤的身份验证过程看起来像一个普通的一步标准登录表单(使用ajax),但这是以后的事,现在我仍然停留在逻辑上。
发布于 2012-10-01 10:17:55
我在一段时间前看过SRP规范,它们很好地描述了如何使用一些众所周知的密码构建块,并将它们塑造成一个零知识协议。然而,加密构建块本身并没有得到解释(它们被认为是密码专家的共同知识)。
如果我正确理解,SRP使用的数学方案可以被证明可以归结为Diffie-Hellman问题(我的术语可能是不正确的,我的意思是SRP问题至少可以证明与Diffie-Hellman问题一样计算昂贵),但它并不等于Diffie-Hellman问题。
请记住,零知识密码方案被认为是最难正确实现的事情之一。我不久前写了对SRP的回答。正如您所看到的,它比您所链接的文章中的“密码咸化和修改的挑战-响应系统”的实现要复杂得多。(你不相信它是对的,我想我能发现其中的弱点,我只是一个安全爱好者,不是密码专家或安全专家)。
此外,据我所知,SRP是一个受版权保护的计划。
因此,我的建议是:坚持当前在服务器端使用强散列算法(BCrypt)的最佳实践,使用TLS (SSL)保护您的通信通道,而不是实现一个非常复杂的方案,比如SRP。
发布于 2014-06-05 13:36:43
该算法被移植到客户端(浏览器)的JavaScript和服务器的PHP :参见Ruslan Zavacky的spr-6a-演示 on GitHub。
https://security.stackexchange.com/questions/20915
复制相似问题