aSSL (javascript) 的安全性如何?它是否有效地模仿 SSL?

信息安全 加密 tls php javascript
2021-08-20 04:10:56

你们中的一些人可能熟悉 aSSL 项目,它使用 AJAX/PHP 来模仿 SSL 协议。它使用 RSA 512 或 1024 作为密钥,使用 AES 作为实际数据。它在概念上让我印象深刻,但我很想知道你们是否看到任何明显的拦截可能/将揭示正在传递的密钥。众所周知,JS 到 PHP 的加密技术通常是无用的,因为密钥是公开传递给客户端的。这似乎是一种更高级的方法。

步骤如下: 1. 浏览器调用服务器启动进程。

  1. 服务器返回其 RSA 模数和公共指数。

  2. 浏览器生成一个随机交换 128 位密钥,使用服务器公钥对其进行加密,并将加密的交换密钥传递给服务器。

  3. 服务器接收到这个加密的 128 位交换密钥,用它的私钥对其进行解密,如果结果正常,则返回会话持续时间。

  4. 浏览器接收会话持续时间并设置超时以保持连接处于活动状态。

该项目的 URL 在这里: http ://assl.sullof.com/assl/

如果这有任何潜力,我对如何进一步改进握手并进一步保护客户端有一些想法。

3个回答

它如何防止中间人攻击?从我收集的信息来看,它根本没有(想不出它实际上可以的方式)。这使得它完全没用

SSL/TLS 有点工作,因为您信任告诉您连接是安全的软件(通常是您的浏览器)。当你下载的代码告诉你连接可以被攻击者信任时,所有的赌注显然都失败了。

我可能错了,因为文档很薄,但看起来一点也不好看(礼貌)。

我知道,我知道,我知道——我第二次提到 javascript 到 php,你们翻了个白眼,但说真的,先看看——这有点不同。

不,不幸的是,这并没有什么不同。Javascript Cryptography Considered Harmful应该给你一个关于一般问题的很好的总结。

有些问题与实施不充分有关(例如 PRNG)。这不是 JavaScript 本身的缺陷(也许某些 Node.js 实现可能会做得更好),而是在浏览器实现中(你不能真正依赖它)。

其他问题对于 JavaScript 的使用方式更为基础。任何旨在在浏览器中模拟 SSL/TLS 的 JavaScript 库的问题在于,它总是依赖 JavaScript 代码与它旨在保护的内容一起交付或作为同一系统的一部分。从那时起,与 MITM 的战斗就失败了(也请参阅它自己的常见问题解答)。

此外,SSL/TLS 的一个基本点是对远程方身份的验证。这依赖于 (a) 已经存在一组信任锚(CA 证书)和 (b) 具有显示信任评估方式的一致方式(浏览器中的 GUI 集成,显示锁定符号或类似内容)。这些元素根本不能属于网页(否则任何人都可以在页面上提供锁定图标)。

首先想到的是 JS 中的弱 PRNG 熵。而且它可能很慢......为什么不直接使用 SSL ?