cybernagle / cs-videos

topics need to learn and to do. track by issues.
https://space.bilibili.com/250682464
1 stars 0 forks source link

HTTPS explain the intuitive way #1

Open cybernagle opened 1 year ago

cybernagle commented 1 year ago

https://tls13.xargs.org/

cybernagle commented 1 year ago

解决你和对象的私密沟通问题

举例说明. 场景如下:
你和对象在两个教室内, 需要传纸条进行相互沟通. 在传纸条的过程当中, 需要满足以下几个条件:

  1. 纸条在中间可以被任何拿到并传阅. 但是不能让其他人看懂.
  2. 确保消息到达了你这里.
cybernagle commented 1 year ago

HTTPS 的逻辑

https 下的使用的 tls 1.2 协议,是如何确保上面的目标的?

1. 对象给你发纸条

  1. 你首先给我发送一张纸条, 上面说, 你好. 然后, 你会在纸张外面写上几个信息:
    1. 我们的纸条上应该以什么格式书写(这个和写邮件的格式类似, 第一行以你好开头,最后一行以此致敬礼结束)
    2. 一个随机数
    3. 我们聊天的序号(session id)
    4. 你想用什么方式加密.(加密算法)

2. 你给对象纸条

  1. 你给对象回一封信.
    1. 告诉对象, 我选择开头以及结尾的格式, 也就是 protocol.
    2. 聊天序号(session id)
    3. 选定加密的算法
  2. 同时, 第二张纸条,包含以下信息
    1. 你的位置信息(host)
    2. 再给对象一个你的证书.
    3. 这个公有的证书以及地址会被一个你相信的第三方证明(老师?), 这个位置(你)是拥有这个共有密码的私有密码的. 这也就可以证明, 对象没给错人.
  3. 这个时候, 你会再生成一个共有密码以及私有密码的第三张纸条.
  4. 最后把公有密码也写在纸上, 并且, 将你生成的随机数, 以及生成的随机数,加密成一段密文,
  5. 在结尾写上此致敬礼(done), 然后同上面的几封信一同给到对象.

3. 对象再给你纸条

  1. 对象和你一样, 也生成一对密码. 分为公有的和私有的密码.
  2. 开始写纸条, 公有密码写在纸上.
  3. 你对象收集足够多的信息了, 接下来, 就使用现有的信息对你们两个的聊天进行加密. ta 会执行以下运算:
    1. 使用自己的私有的密码加上你的公有密码, 形成一个新的密码.
    2. 使用这个密码,把你们两个人的随机数进行加密操作, 形成了 6 个新的密码 分别为: client write key, server write key, client write mac key, server write mac key.
    3. 你对象又检查了一遍所有的要发给你的文字, 确保其都通过 client write key 加密.
  4. 字条发给你.

4. 你接受你对象的纸条

  1. 和你对象一样, 你也通过你自己的私有的密码加上对象的公有密码,形成一个主密码.
  2. 通过主密码, 你对两个人生成的随机数进行了加密操作, 形成了 6 个新的密码: client MAC key , server MAC key, client write key, server write key, client write IV, server write IV.
  3. 你也检查了一遍, 并将数据进行了加密写在了纸条上.
  4. 你发送给你的对象.

5. 你对象 pin 你

你对象发送了一个加密了的 ping 的消息. 做最终确认.

6. 你 pin 你对象

你给你返回了一个加密了的 pong 的消息. 最终确认.

你们开始通过密钥来加密彼此的字条并交换.

cybernagle commented 1 year ago

问: 在上面的过程中, 如何保证你的字条抵达来你对象?

在第二步, 你把纸条给到你对象的时候, 会发送一个 certificate 以及位置信息. 这个 certificate 是怎么来的呢? 这个需要第三方,比如说你给老师看你的位置, 然后老师给你颁发了一个证书, 说, 第三行第四列证书.这个证书里面, 也有一个密码. 你会用这个密码来对你的在第二步当中生成的公有密码进行加密.

被加密的内容被你对象拿到以后, 你对象呢, 从老师那里拿到了一个证书, 用这个证书对你的发过来的内容进行解密. 解密成功, 就证明你拥有第三行第四列证书. 解密失败, 就表明第三行第四列证书不属于你, 你是一个假的对象.

cybernagle commented 1 year ago

问: 在上面的过程中, 如何保证你们的字条不能被中间的传阅者所理解?

在第三步当中, 你们根据两个随机数加上彼此的公有密码以及私有密码形成了新的密码. (client write key & server write key. ) 你可以通过这个密码对你的所有需要给对象的字条进行加密, 你的对象可以通过生成的新的密码对你所发送的内容进行解密.

这样, 你们在交换过程当中, 所有的内容都是根据几个变量, 随机数, public key(经过了传阅) , private key(没有经过传阅) 生成的密码进行了加密操作. 因为 private 没有被传阅过(没有在网络上流通) , 所以能保证数据不能被任何人进行解密.

cybernagle commented 1 year ago

问: 为什么我通过私有的密码进行加密的内容, 经过网络发送后, 可以在对方那里被解密呢?

其数学原理基于大数分解问题:对于一个大的合数 N,如果能够将其因数分解成两个质数 p 和 q,则可以利用这两个质数来计算出 N 的欧拉函数 φ(N)。在计算出 φ(N) 后,我们就可以根据公式选择一个加密指数 e(一般为较小的质数),并计算出相应的解密指数 d。

RSA 的加密过程是:用接收者公钥中的加密指数 e 和模数 N,将要发送的明文数据进行加密得到密文数据。而解密过程则是:用接收者私钥中的解密指数 d 和模数 N,将收到的密文数据进行解密得到明文数据。

RSA 如何运用欧拉定理呢?根据欧拉定理,对于任意正整数 a 和 N,满足:a^φ(N) ≡ 1 (mod N),其中 φ(N) 为 N 的欧拉函数。这个定理意味着,如果我们知道了 N 的欧拉函数 φ(N),就可以根据欧拉定理得到一个满足条件的加密指数 e,进而求出相应的解密指数 d。同时,欧拉定理保证了 RSA 的加密和解密过程的正确性。