密钥交换(IKE,Internet Key Exchange )的实现方式主要包括两种,一种是公钥加密,一种是利用DH算法加密来进行密钥交换。

  1. 公钥加密

1.1 对称加密

    假设现在有两个人Alice和Bob,Alice作为发送方要将数据传输给接收方Bob,两人直接商量好一个秘钥对数据进行进行加密,Bob在收到后使用商量好的秘钥是可以直接打开原始数据的(如下图)

描述密钥交换的过程_数据

    当然这是最理想的状态,如果有其他人也拿到了秘钥,并截获了数据,同样可以查看数据,而公钥交换可以在此基础上加以改善。

1.2 非对称加密

    公钥交换利用非对称加密的方式来实现,发送者和接收者都有自己的公钥和私钥,且配对使用。我们还是以Alice向Bob传输数据为例,Bob的公钥和私钥分别为P和S,Alice在发送数据前,利用Bob的公钥P来对数据进行加密,而要想解密,只有Bob的私钥S才能打开,其他人即使截获了数据,也无法查看(如下图)

描述密钥交换的过程_公钥加密_02

1.3 非对称加密实现数字签名

    由于公钥是公开的,Alice可以给Bob传输数据,其他人也可以,为了确保接收方收到的数据是由约定好的发送方传输过来的,可以在非对称加密的基础上采用数字签名的形式。

    由于秘钥是配对使用,公钥公开,而秘钥是保密的,Alice可以用自己的私钥来对数据进行加密,其他人截获了也不知道是谁发送的,而Bob知道Alice有一份加密的数据传输过来,用Alice的公钥来进行解密即可查看数据(如下图)

描述密钥交换的过程_非对称加密_03

    鉴于互联网上的传输环境复杂性,公钥加密时还会采用RSA算法、DSA算法、哈希算法和算法结合等,以确保数据加密传输的可靠性。


  1. DH算法加密

    除了公钥加密的形式来实现密钥交换,还可以采用DH算法来实现加密。

2.1 DH算法加密介绍

    ①DH秘钥交换由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表。

    ②它是一种安全协议,让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥,这个密钥一般作为“对称加密”的密钥而被双方在后续数据传输中使用。

    ③DH数学原理是base离散对数问题,做类似事情的还有非对称加密类算法,如:RSA。

    ④其应用非常广泛,在SSH、VPN、Https...都有应用,勘称现代mi码基石。

2.2 DH实现过程

    以Alice和Bob为例:

    第一步:Alice和Bob协商生成公开的整数g和大素数p;

    第二步:隐私数据交换

    ①Alice生成隐私数据a(a<p),计算得出g^a%p,发送给Bob

    ②Bob生成隐私数据b(b<p),计算得出g^b%p,发送给Alice

    第三步:实现秘钥交换

    ①Alice计算得出 [(g^b%p)^a]%p = g^ab%p,生成为密钥

    ②Bob计算得出 [(g^a%p)^b]%p = g^ab%p,生成为密钥

    到了第三步的时候,我们可以看见,Alice和Bob所拿到的秘钥是相同的,都是g^ab%p,从而实现了秘钥的交换。实现过程如下图:

描述密钥交换的过程_公钥加密_04

2.3 DH算法加密范例

    假设Alice和Bob要对传输的数据进行加密,双方约定好的整数g为23,大素数p为17,Alice和Bob各自生成的隐私数据分别为6和11,即g=23,p=17,a=6,b=11。

    ①隐私数据交换环节

    Alice发送给Bob的为g^a%p=23^6%17=8(如下图)

描述密钥交换的过程_非对称加密_05

    Bob发送给Alice的为g^b%p=23^11%17=5(如下图)

描述密钥交换的过程_数据_06

    ②实现秘钥交换环节

    Alice计算[(g^b%p)^a]%p =5^6%17=2,g^ab%p=23^66%17=2,这两个结果是相同的,如果Bob所计算出的结果也为2,则说明实现了秘钥交换(如下图)

描述密钥交换的过程_公钥加密_07

    Bob计算[(g^a%p)^b]%p = 8^11%17=2=g^ab%p=23^66%17=2(如下图)

描述密钥交换的过程_公钥加密_08

    到此,Alice和Bob就形成了共同的秘钥2,也就是实现了秘钥的交换。

    当然,DH算法加密也有其自身的lou洞,比如双方私密数据a和b后将被丢弃,过长时间的存在会导致泄露风险。同时,由于DH在传输p、g时并无身份验证,所以有机会被实施中间人gong击,替换双方传输时的数据。采用一些CA证书和安全协议,可以有效加强通讯或者传输时的安全可靠性,不过在此篇就不多加描述了。