救赎№

文章 评论 浏览 32

救赎№ 2022-05-04 13:55:59
function add() {
  let args = [].slice.call(arguments);
  let fn = function(){
   let fn_args = [].slice.call(arguments)
   return add.apply(null,args.concat(fn_args))
 }
fn.toString = function(){
  return args.reduce((a,b)=>a+b)
}
return fn
}

这返回的是函数啊??

第 84 题:请实现一个 add 函数,满足以下功能

救赎№ 2022-05-04 13:55:42

https协议由 http + ssl 协议构成,具体的链接过程可参考SSL或TLS握手的概述
中间人攻击过程如下:

  1. 服务器向客户端发送公钥。
  2. 攻击者截获公钥,保留在自己手上。
  3. 然后攻击者自己生成一个【伪造的】公钥,发给客户端。
  4. 客户端收到伪造的公钥后,生成加密hash值发给服务器。
  5. 攻击者获得加密hash值,用自己的私钥解密获得真秘钥。
  6. 同时生成假的加密hash值,发给服务器。
  7. 服务器用私钥解密获得假秘钥。
  8. 服务器用加秘钥加密传输信息

防范方法:

  1. 服务端在发送浏览器的公钥中加入CA证书,浏览器可以验证CA证书的有效性

步骤6至8,攻击者已经将真秘钥保存下来了,所以完全可以把真秘钥发给服务端,没有必要再生成一个假密钥,后续客户端与服务端之间以共享密钥加密方式通信时,攻击者就可以用它保存的真秘钥解密了,不知道这样理解对不对

不对,因为服务端解密的东西必须是自己的公钥加密的文件,攻击者只能通过这个服务器的公钥重新生成密文才能被服务端正确解析。如果没有6-8步,那么服务端就无法进行解密。

其实我的问题是:在步骤6中,攻击者为什么要再造一个假的hash值给服务端,而不是那个从客户端得来的真hash值,毕竟无论是客户端还是服务端它们都不知道已经泄露了这个密钥,所以后续攻击者完全可以只用这个密钥就可以解密通信中的数据包了

如果将客户端的hash值直接返回给服务端,服务端不能解密。因为客户端是用假的公钥加密的,服务器不能用真的私钥解密。所以攻击者一定要用自己的假私钥将客户端的hash值解密得到真秘钥。但攻击者是再伪造一个假秘钥,还是直接用真秘钥,我个人觉得都可以。最后通过真公钥对这个真或者假的秘钥进行加密,发给服务端。这是我的个人理解,不知道对不对。

第 91 题:介绍下 HTTPS 中间人攻击

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文