大数据安全 | 【实验】Diffie-Hellman密钥交换算法

文章目录

  • 📚关于DH密钥交换算法
  • 📚实验目的
  • 📚流程梳理
    • 🐇Step1:实现快速幂取模运算
    • 🐇Step2:根据算法原理分别定义公钥和共享密钥的计算
    • 🐇Step3:求解问题一
    • 🐇Step4:求解问题二
  • 📚实验结果

📚关于DH密钥交换算法

在这里插入图片描述
在这里插入图片描述

  • DH密钥交换算法的核心思想是通过一种数学算法,让两个通信方在不用将密钥直接传输的情况下,协商出一个相同的密钥,用于之后的加密通信。
  • 原理:通信双方先协商好两个公共数值,p和g,选取最大素数p,再选取Z/(p)的一个本原根g,并将pg公开,全网可用,即所有用户均可获取,并为所有用户共有。
    • 首先用户A随机生成一个大数a,
    • 用户A计算K1=g^a(mod p ),并将此结果传送给用户B
    • 用户B随机生成一个大数b
    • 用户B计算K2=g^b(mod p),并将结果传送给用户A
    • 用户A计算K=(K2)^a(mod p)
    • 用户B计算K = (k1) ^b(mod p)
    • 最终得到双方的会话密钥K
      在这里插入图片描述
  • 优点
    • 任何两个人都可以协商出会话密钥,不需要事先拥有对方的公开或者秘密的信息。
    • 每次密钥交换后不必要再保留秘密信息,减少了保密的负担。
  • 缺点:容易收到中间人攻击。

📚实验目的

编程实现Diffie-Hellman密钥交换算法,设有用户A和B交换密钥。

(1)设公用素数q=71,本原根α= 7。

  1. 若用户A的私钥XA=5,则A的公钥YA为多少?
  2. 若用户B的私钥XB=12,则B的公钥YB为多少?
  3. 共享的密钥为多少?

(2)设公用素数q=11,本原根α=2。

  1. 若用户A的公钥YA=9,则A的私钥XA为多少?
  2. 若用户B的公钥YB=3,则共享的密钥K为多少?

📚流程梳理

🐇Step1:实现快速幂取模运算

  • 实现快速幂取模运算,返回 (base^exp) % mod。
    def mod_exp(base, exp, mod):
    result = 1
    # 将底数取模,防止中间结果过大
    base = base % mod
    while exp > 0:  # 当指数大于0时循环
        if exp % 2 == 1:  # 若指数的当前位为1
            result = (result * base) % mod  # 将当前的底数乘到结果中,并对模取余
        exp = exp // 2  # 将指数右移一位,相当于除以2
        base = (base * base) % mod  # 底数取平方并对模取余
    return result
    

🐇Step2:根据算法原理分别定义公钥和共享密钥的计算

在这里插入图片描述

# 计算公钥
def calculate_public_key(alpha, private_key, q):
    return mod_exp(alpha, private_key, q)

# 计算共享的密钥
def calculate_shared_key(public_key, private_key, q):
    return mod_exp(public_key, private_key, q)

🐇Step3:求解问题一

print("问题一结果:")
# 设公用素数q=71,本原根α= 7。
q1 = 71
alpha1 = 7
# 用户A的私钥XA=5
XA1 = 5
# 求解公钥YA
YA1 = calculate_public_key(alpha1, XA1, q1)
print("用户 A 的公钥 YA1:", YA1)
# 用户B的私钥XB=12
XB1 = 12
# 求解公钥YB
YB1 = calculate_public_key(alpha1, XB1, q1)
print("用户 B 的公钥 YB1:", YB1)
# 共享的密钥
shared_key1 = calculate_shared_key(YB1, XA1, q1)
print("共享的密钥:", shared_key1)

🐇Step4:求解问题二

print("问题二结果:")
# 设公用素数q=11,本原根α=2。
q2 = 11
alpha2 = 2
# 用户A的公钥YA=9,求解A的私钥
YA2 = 9
XA2 = 0
while calculate_public_key(alpha2, XA2, q2) != YA2:
    XA2 += 1
print("用户 A 的私钥 XA2:", XA2)
# 用户B的公钥YB=3,求解共享的密钥K
YB2 = 3
shared_key2 = calculate_shared_key(YB2, XA2, q2)
print("共享的密钥:", shared_key2)

📚实验结果

在这里插入图片描述


参考博客:网络安全期末复习3】Diffie-Hellman密钥交换算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245238.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python (八)网络编程

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

Peter算法小课堂—简单建模(2)

太戈编程736题 题目描述: 你是一只汪星人,地球毁灭后你回到了汪星,这里每天有n个小时,你需要为自己选择正好连续的m小时作为每天睡眠的时间。从凌晨开始,第i小时内的睡眠质量为xi,请问经过选择后&#xf…

边缘检测@获取labelme标注的json黑白图掩码mask

import cv2 as cv import numpy as np import json import os from PIL import Imagedef convertPolygonToMask(jsonfilePath):

Meta 开启 Ray-Ban人工智能眼镜多模态 AI 功能测试,可识别物体、翻译语言

Meta 公司宣布他们将向部分用户推送其 Meta Ray-Ban 智能眼镜的多模态 AI 功能。这项功能允许 AI 助手通过眼镜的摄像头和麦克风了解佩戴者所看到和听到的事物,并提供相关信息和帮助。 Meta CEO 马克・扎克伯格在 Instagram 上展示了这项功能,他让眼镜推…

Power BI - 5分钟学习增加条件列

每天5分钟,今天介绍Power BI增加条件列。 什么是增加条件列? 简单理解,可以根据表中某列设置一个或者多个条件,判定的结果会生成一个新列。 举例: 首先,导入一张【Sales】样例表(Excel数据源导入请参考每…

如何在Ubuntu的Linux系统上搭建nacos集群

官方给出的集群部署架构图 集群部署说明 (nacos.io)3个或3个以上nacos节点才能构成集群当前示例中包含3个nacos节点,同时一个负载均衡器代理3个nacos,本示例中负载均衡器可使用的是nginx 准备并安装好正常运行的nginx,本示例略准备并安装好正…

USB2.0 Spec 中文篇

体系简介 线缆 USB 是一种支持热拔插的高速串行传输总线,使用一对(两根)差分信号来传输数据,半双工。要求使用屏蔽双绞线。 供电 USB 支持 “总线供电” 和 “自供电” 两种供电模式。在总线供电方式下,设备最多可…

等保二级测评国家收费标准是多少?

随着信息化的快速发展,网络安全问题日益突出,等保测评作为网络安全领域的重要环节,越来越受到企业和政府的重视。然而,很多人在进行等保测评时,对于等保二级测评的费用标准并不清楚。本文将详细介绍等保二级测评的国家…

自动化测试基础篇:Selenium 框架设计(POM)

【导语】Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。本文介绍selenium的框架设计。 自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议&#…

一、win10+yolov8+anaconda环境部署

1、安装anaconda (1)打开aonconda下载地址:https://www.anaconda.com/download,点击download下载。 2、下载完成后,双击打开,点击Next,I Agree,选择just me; 3、勾选…

计算机组成原理-ATT格式vsIntel格式

文章目录 AT&T格式 vs lntel格式 x86汇编语言是lntel格式,还有一种汇编语言格式是AT&T AT&T格式 vs lntel格式 lntel格式中取主存地址内容未指明长度默认为32位,对应下图中第四行右边的指令 百分号 美元符号 小括号 可用于计算机结构体数组…

lwIP 细节之六:connected、sent、poll 回调函数是何时调用的

使用 lwIP 协议栈进行 TCP 裸机编程,其本质就是编写协议栈指定的各种回调函数。将你的应用逻辑封装成函数,注册到协议栈,在适当的时候,由协议栈自动调用,所以称为回调。 注:除非特别说明,以下内…

MATLAB 最小二乘空间直线拟合 (37)

MATLAB 最小二乘空间直线拟合 (37) 一、算法介绍二、算法实现1.代码一、算法介绍 对于空间中的这样一组点:大致呈直线分布,散乱分布在直线左右, 我们可采用最小二乘方法拟合直线,使用下面的代码可以得到图中的结果。(其中图片中的点解释和具体的实现代码如下所示) C++…

档案馆数字化建设实施方案

档案馆数字化建设实施方案主要包括以下几个方面的内容: 1. 目标与规划:明确数字化建设的目标和规划,确定数字化建设的优先领域和重点工作,制定长期和短期的发展规划。 2. 技术设施建设:建设专久智能数字化档案管理系统…

LSTM和GRU的介绍以及Pytorch源码解析

介绍一下LSTM模型的结构以及源码,用作自己复习的材料。 LSTM模型所对应的源码在:\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。 上次上一篇文章介绍了RNN序列模型,但是RNN模型存在比较严重的梯度爆炸和梯度消失问题。 本文…

【TwinCAT学习笔记 1】TwinCAT开发环境搭建

写在前面 作为技术开发人员,开启任何一项开发工作之前,首先都要搭建好开发环境,所谓磨刀不误砍材工,一定要有耐心,一次不行卸载再装。我曾遇到过一个学生,仅搭建环境就用了两周,这个过程也是一…

数据寻址-偏移寻址(硬核)

目录 一. 基址寻址二. 变址寻址三. 相对寻址四. 硬件如何实现数的"比较" \quad \quad \quad \quad \quad \quad \quad 一. 基址寻址 \quad A就是偏移量 有的用通用寄存器来代替BR专用寄存器的功能 其中 R 0 R_0 R0​的位数是由通用寄存器的总数来判断的, 比如通用寄存…

社交网络分析1:起源发展、不同领域的应用、核心概念

社交网络分析1:社交网络相关定义和概念 写在最前面关于课程 社交网络、社交网络分析社交网络发展阶段(自己感兴趣)1. 社交网络的起源2. 社交网络的演变3. 社交网络的成熟4. 发展阶段补充和展望 2023社交大变革(自己感兴趣的点&…

安装spaCy及语言包下载安装

文章目录 1. spaCy的安装1.1 安装spaCy包方式1 : 通过pip / conda命令安装方式2 : 通过离线导入 1.2 安装语言模型方式1 : 通过pip / conda命令安装方式2 : 通过离线导入 2. 常见问题a. 版本问题 3. 参考文档 关注公众号:『AI学习星球』 回复:遥感图像语…

【Spring】04 国际化

文章目录 1. 定义2. Spring 的支持1) MessageSource接口2) ResourceBundleMessageSource 3. 配置国际化1)配置MessageSource Bean2)创建资源文件3)在Bean中使用国际化消息 4. 使用占位符和参数结语 Spring 为我们提供了…