美文网首页编程杂谈
迪菲-赫尔曼密钥交换 Python语言描述

迪菲-赫尔曼密钥交换 Python语言描述

作者: eye_water_ | 来源:发表于2018-11-29 16:53 被阅读143次

    假设现在A和B在一起交谈,现在C过来了,A和B要恶搞一下C

    如果A直接给B说:我想恶搞C,怎么样
    B给A说:可以
    那么C就在旁边听着呢!
    现在A和B换了一种策略

    A给B一个眼神(我想恶搞C),B给A一个眼神(可以)
    C站在旁边不明所以就上当了

    我们现在可以假设A和B两个人之间传输的是眼神,得到的结果却是一样的恶搞C

    这就是迪菲-赫尔曼密钥交换,看起来就像是你知道我知道,我知道你知道

    一张图来描述迪菲-赫尔曼密钥交换[1]

    图片引用自WIKI Diffie–Hellman key exchange

    1.Alice和Bob共同选择了黄色
    2.Alice选择了红色为自己的加密颜色,Bob选择了绿色为自己的加密颜色
    3.Alice将黄色与红色融合生成橙色传给Bob,Bob将黄色与绿色融合生成天蓝色传给Alice
    4.Alice将天蓝色与自己的加密颜色红色融合生成了褐色,Bob将橙色与自己的加密颜色绿色生成了褐色
    5.BOMB!得到了Alice与Bob的公共密钥[2]

    你看整个传输过程中我们并没有声明Alice和Bob的公共密钥是褐色,而是在传输过程中分别给Alice和Bob天蓝色橙色

    数学描述


    keypair.png

    现在可以假设Alice与Bob共同选择了两个数字p=23 g=5
    Alice选择了key=4作为自己的加密数字,将keyp q融合得到 mixa = 5^{4}mod23 = 4
    Bob选择了key=3作为自己的加密数字,将keyp q融合得到 mixb = 5^{3}mod23 = 10
    Alice将mixa传给Bob,Bob将mixa与自己的加密数字k=3融合得到result = \left( 5^{4}mod23\right) ^{3}mod23 = 18
    Bob将mixb传给Alice,Alice将mixb与自己的加密数字k=4融合得到result = \left( 5^{3}mod23\right) ^{4}mod23 = 18[2]

    这样就算出来公共密钥

    Python代码描述[3]

    sharedPrime = 23    # p
    sharedBase = 5      # g
     
    aliceSecret = 6     # a
    bobSecret = 15      # b
     
    # Begin
    print( "Publicly Shared Variables:")
    print( "    Publicly Shared Prime: " , sharedPrime )
    print( "    Publicly Shared Base:  " , sharedBase )
     
    # Alice Sends Bob A = g^a mod p
    A = (sharedBase**aliceSecret) % sharedPrime
    print( "\n  Alice Sends Over Public Chanel: " , A )
     
    # Bob Sends Alice B = g^b mod p
    B = (sharedBase ** bobSecret) % sharedPrime
    print("Bob Sends Over Public Chanel: ", B )
     
    print( "\n------------\n" )
    print( "Privately Calculated Shared Secret:" )
    # Alice Computes Shared Secret: s = B^a mod p
    aliceSharedSecret = (B ** aliceSecret) % sharedPrime
    print( "    Alice Shared Secret: ", aliceSharedSecret )
     
    # Bob Computes Shared Secret: s = A^b mod p
    bobSharedSecret = (A**bobSecret) % sharedPrime
    print( "    Bob Shared Secret: ", bobSharedSecret )
    

    运行结果

    Publicly Shared Variables:
        Publicly Shared Prime:  23
        Publicly Shared Base:   5
    
      Alice Sends Over Public Chanel:  8
    Bob Sends Over Public Chanel:  19
    
    ------------
    
    Privately Calculated Shared Secret:
        Alice Shared Secret:  2
        Bob Shared Secret:  2
    

    这样以后再进行传输时,Alice和Bob都知道公共密钥是2,但是并没有传输2,这不就是你知道我知道,我知道你知道吗?


    1. 图片引用自WIKI Diffie–Hellman key exchange

    2. 节选自WIKI Diffie–Hellman key exchange

    3. 代码选取自Simple Diffie–Hellman Key Exchange Example With Python

    相关文章

      网友评论

        本文标题:迪菲-赫尔曼密钥交换 Python语言描述

        本文链接:https://www.haomeiwen.com/subject/idsfcqtx.html