有许多金融服务可以通过询问用户的用户名和密码并代表他们登录来验证用户的银行帐户。一些例子是Coinbase和TransferWise。
我已经想出了一种方法,让用户可以在不向第三方提供用户名和密码的情况下验证他们的银行账户细节。我想知道以下协议是否存在安全漏洞:
true,要么是false,第三方将无法发现有关加密会话的任何其他信息。或者,电路输出甚至可以是您的全名、电话号码和支票帐户余额的字符串。我将尝试使用利布斯纳克库来研究这种方法,因为这是一个非常吸引人的想法!实现此功能的一种方法可能是创建一个基于WebKit的浏览器应用程序,用户可以下载和安装该应用程序。该应用程序可以在浏览器中设置一个协议处理程序,以便当用户单击像<verification scheme>://domain/path这样的URL时,应用程序就会打开。该应用程序适用于任何网站,但它也可以为不同的银行使用预先配置的食谱。
这也可以直接在Firefox和Chrome中实现,但这不太可能。还有更好的方法来做这件事。一些现代银行可以提供具有有限只读权限的OAuth令牌。银行甚至可以使用公钥密码体制来使用他们的私钥(可能是他们当前SSL证书的私钥)对您的帐户详细信息进行签名。
我认为上面描述的技术可能是有用的,因为它可以适用于任何网站(不仅仅是银行业务)。但是如果你能在这里发现任何安全问题请告诉我。我肯定我误解了TLS的一些地方,或者也许有一个更简单的方法来做到这一点。
发布于 2017-12-08 20:12:05
我认为这一机制在理论上是可行的,前提是用户可以信任它的银行,即他们的站点是以某种方式设置的,这样就不会在“证明”会话中传输敏感信息。这至少意味着在验证会话中只包含与证明相关的信息,第三方不能使用HTTP会话id,并且没有进行TLS会话重用,即不使用相同的密钥来保护以前或之后的TLS会话。
这意味着,不仅用户需要特殊的软件来创建验证会话,而且银行也需要以一种安全的方式来支持这个证明。在我看来,这使得这个概念在实践中过于复杂和不可靠。
发布于 2017-12-09 08:43:51
我看到了一个潜在的漏洞,尽管我不确定它是否真的可以被执行。风险不是在客户端,而是在第三方。事实上,我首先添加了一条评论,后来我删除了,因为我意识到我错了,这让我想到了这个漏洞。我删除的评论是,您不需要第三方代理,而是您可以作为用户自己注册TCP流量,然后将TCP流量的记录作为压缩文件发送给第三方,并将其与密钥建立握手一起发送,作为“上一次会话的证明”。但后来我意识到这不是证据,因为会话的实际内容是用对称密钥在TLS中加密的,所以,作为用户,您也可以随意修改它,因为您也拥有对称密钥。您也可以使用该密钥计算各种MAC。如果您的银行向您表示,您在会话期间逾期已久,您可以将其修改为帐户显示,并在您的帐户上显示500万美元。证书来自银行,协商的对称密钥是真实的,但是内容不仅可以由银行决定,也可以由您来决定。所以我删除了我的错误建议。
然而,我认为一个人可以通过代理来做同样的事情。如果您作为用户,在您的机器上设置了一个假的web套接字,而不是通过第三方代理与银行联系,您可以联系您的机器,该机器充当第二个代理,并将与银行联系,您可以在您自己的TLS会话上与该代理进行MITM攻击,因为您知道对称密钥,并按照您的意愿修改内容,就像在我删除的评论中一样。如果银行告诉您您已经过期了,您可以在代理中动态修改它,并显示500万美元的帐户余额,这是第三方将解密的TCP流。
当然,如果第三方注意,它可以看到你去的IP地址,不对应于银行的IP地址。但是它会有正确的证书和正确的密钥协商。
https://security.stackexchange.com/questions/175143
复制相似问题