• HTTPS实现原理


    基本阶段

    对称加密

    算法f,加解密key k
    加密:f(k,data)=X
    解密:f(k,X)=data
    过程:

    1. C f(k,data)=X ==X>>S f(k,X)=data C通过k加密data得到X并传输给S,S通过k解密X得到data
    2. S f(k,data)=X ==X>>C f(k,X)=data S通过k加密data得到X并传输给C,C通过k解密X得到data

    只用对称加密,只用一个公有的key[如果每个C一个,对于S存储压力太大]:
    因为hacker也有这个k,所以hacker也能解密C与S之间的加密信息

    非对称加密

    算法f,加解密key 公钥pk 私钥sk,私钥sk只有S有
    加密:f(pk,data)=Y
    解密:f(sk,Y)=data
    加密:f(sk,data)=Y2
    解密:f(pk,Y2)=data
    过程:

    1. C==>>S S==pk>>C C向S索要公钥pk
    2. C f(pk,data)=Y ==Y>>S f(sk,Y)=data C通过pk加密data得到Y并传输给S,S通过sk解密Y得到data
    3. S f(sk,data)=Y2 ==Y2>>C f(pk,Y2)=data S通过sk加密data得到Y2并传输给C,C通过pk解密Y2得到data

    C to S时,C用pk加密的Y只有S能解密,因为只有S有sk
    但,S to C时,因为hacker也有pk,所以sk加密的Y2,C和hacker都能解密

    阶段总结

    • 对称加密的缺点:key只有一个,大家都知道,hacker也知道
    • 非对称加密的缺点:CtoS安全,但StoC因为hacker也有pk,所以不安全

    结合以上优缺点,似乎非对称+对称有戏

    非对称+对称

    过程:
    非对称加密通信确定临时key

    1. C==>>S S==pk>>C C向S索要公钥pk
    2. C f(pk,key)=Y ==Y>>S f(sk,Y)=key C通过pk加密key得到Y并传输给S,S通过sk解密Y得到key,这个key就是临时key,因为只有S有sk,所以此时,只有C和S知道这个key

    临时key作公钥进行对称加密通信

    1. C f(key,data)=X ==X>>S f(key,X)=data C通过key加密data得到X并传输给S,S通过key解密X得到data
    2. S f(key,data)=X ==X>>C f(key,X)=data S通过key加密data得到X并传输给C,C通过key解密X得到data

    先用非对称加密,在CtoS时,双方确定一个临时的key作为公钥进行后续的对称加密通信,每个C得出的key都是不同的
    对于hacker来说,因为没有非对称加密中的sk,他得不到这个临时的key,也就无法解密后续的对称加密通信

    中间人攻击

    非对称+对称看起来无懈可击,但当hacker直接在第一步CtoS时就介入,将自己伪装成S,他就能获取CtoS的通信,再将自己伪装成C与S沟通,就能获取StoC的通信
    过程:
    非对称加密通信确定临时key
    1.
    C==>>S(h) S(h)==pkh>>C C得到的是hacker的pkh
    C(h)==>>S S==pk>>C(h) hacker得到了S的pk
    2.
    C f(pkh,key)=Y ==Y>>S(h) f(skh,Y)=key hacker得到了C发的key
    C(h) f(pk,keyh)=Y ==Y>>S f(sk,Y)=keyh S得到了hacker发的keyh

    此时,hacker有C的临时key,S的临时keyh,hacker使用相应的临时key和临时keyh作公钥分别与C和S作对称加密通信,通信内容相同,左右手互换
    3.
    C f(key,data)=X ==X>>S(h) f(key,X)=data C通过key加密data得到X并传输给hacker,hacker通过key解密X得到data
    C(h) f(keyh,data)=X ==X>>S f(keyh,X)=data hacker通过keyh加密data得到X并传输给S,S通过keyh解密X得到data
    4.
    S(h) f(key,data)=X ==X>>C f(key,X)=data hacker通过key加密data得到X并传输给C,C通过key解密X得到data
    S f(keyh,data)=X ==X>>C(h) f(keyh,X)=data S通过keyh加密data得到X并传输给hacker,hacker通过keyh解密X得到data

    至此,hacker做到了同时欺骗C和S,hacker知道C和S之间的所有通信信息

    分析

    综合以上,非对称+对称的最大问题出在哪?

    hacker从第一步C请求公钥的时候就介入了,导致C一直以为和他通信的是S,其实是hacker,也就是说,C不知道拿到手的公钥pk是好是坏

    如何解决?

    引入CA(证书颁发机构),理解为一个权威可信的机构
    只有CA认证的公钥才是可信的公钥

    CA

    过程:

    1. CA把S的pk作为data,把自己的csk作为key,加密pk得到license ==>> c(csk,pk)=license
    2. CA将license卖给S【对,S要给钱的】,S将license发送给C,C的操作系统内置了大量的CA的cpk,C使用cpk对license进行解密就能拿到真正的pk ==>> c(cpk,license)=pk
    3. C保证了手上的pk是真实的,就能按部就班与S进行对称加密通信

    阶段总结

    csk只有CA有,cpk大家都有
    hacker要想让C认为手上的pkh是真的,必须c(cpk,licenseh)=pkh=>c(csk,pkh)=licenseh,也就是hacker必须有csk才能有对应的可被cpk解密的licenseh
    这也并非绝对安全,最直接的,万一hacker通过攻击CA拿到csk怎么办?

    HTTPS=非对称加密+对称加密+HASH+CA=http+ssl

    https连接过程

    burp抓https包过程

  • 相关阅读:
    Golang mysql数据库
    C++ list结构体变量排序
    VS2013 ERROR MSB8020
    error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation
    error C2664: “FILE *fopen(const char *,const char *)”: 无法将参数 1 从“LPCTSTR”转换为“const char *”
    error C4430: missing type specifier
    虚拟地址转物理地址
    vs2013 x64 编译汇编代码
    fs寄存器相关,PEB,TEB
    boost 1.57 vs2013 编译
  • 原文地址:https://www.cnblogs.com/Rain99-/p/12795166.html
Copyright © 2020-2023  润新知