Day24:安全性和演算法-迪菲-赫尔曼金钥交换(Diffie-Hellman Key Exchange)

前言

前一天提到的Hybrid Cryptosystem,其中使用到的「key」会进行封装,避免被有心人士撷取将加密後的讯息解密。其中用得到的方法就是今天会提到的迪菲-赫尔曼金钥交换(Diffie-Hellman Key Exchange)。


迪菲-赫尔曼金钥交换(Diffie-Hellman Key Exchange)

名称虽然为Key Exchange,但意思是产生金钥。

迪菲-赫尔曼金钥交换是在两方之间安全交换金钥的方法,「混合运算」双方共享的秘密数和公开数後,就能安全地交换双方的共同金钥。方法是用质数P、生成元G、和G的x次方mod P来求出X的问题,称为「离散对数问题」(discrete logarithm problem),目前尚未找到有效率的解法。

不过我们先来看看Diffie-Hellman的运算方式:

资料来源:Wiki


使用Python实现Diffie-Hellman Key Exchange

class DH_Endpoint(object):
    def __init__(self, public_key1, public_key2, private_key):
        self.public_key1 = public_key1
        self.public_key2 = public_key2
        self.private_key = private_key
        self.full_key = None
       
    def generate_partial_key(self):
        partial_key = self.public_key1**self.private_key
        partial_key = partial_key%self.public_key2
        return partial_key
    
    def generate_full_key(self, partial_key_r):
        full_key = partial_key_r**self.private_key
        full_key = full_key%self.public_key2
        self.full_key = full_key
        return full_key
    
    def encrypt_message(self, message):
        encrypted_message = ""
        key = self.full_key
        for c in message:
            encrypted_message += chr(ord(c)+key)
        return encrypted_message
    
    def decrypt_message(self, encrypted_message):
        decrypted_message = ""
        key = self.full_key
        for c in encrypted_message:
            decrypted_message += chr(ord(c)-key)
        return decrypted_message
        
        
        
message="This is a very secret message!!!"
s_public=197
s_private=199
m_public=151
m_private=157
Sadat = DH_Endpoint(s_public, m_public, s_private)
Michael = DH_Endpoint(s_public, m_public, m_private)

参考资料:Diffie-Hellman Key Exchange explained (Python)


<<:  列表与 Key ( Day 10 )

>>:  【Day 09】C 的关系运算子与逻辑运算子

第2章:实验操作的环境之虚拟机器介绍

前言 本章节,将会介绍本系列文章的实验操作环境以及一些设定与建置的步骤。 实验操作环境介绍 实验操作...

Azure AutoML02及结语

AutoML得到的结果,说明如下。见图<AZ-exp4MNIST.png> 当看到 [S...

Day 04 HTML<表单标签>

表单标签主要功用是用来收集使用者资料 常用情况 : 注册页面... 主要由 表单域、表单元素、提示文...

Python 演算法 Day 12 - Weak Learning

Chap.II Machine Learning 机器学习 https://yourfreetemp...

Day18 Combine 05 - Operators 类型介绍 : 转换操作符

转换操作符 map/mapError map操作符会执行给定的闭包,将上游发布的内容进行转换,然後再...