X3DH密钥协商协议官方手册(中文版)
DH密钥交换和ECDH原理
DH密钥交换和ECDH原理主题安全技术下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理。
1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p,底数g。
2,Diffie-Hellman密钥交换是一个两部分的过程,Alice和Bob都需要一个私有的数字a,b。
下面是DH交换的过程图:本图片来自wiki下面我们进行一个实例1.爱丽丝与鲍伯协定使用p=23以及g=5.2.爱丽丝选择一个秘密整数a=6, 计算A = g^a mod p并发送给鲍伯。
A = 5^6 mod 23 = 8.3.鲍伯选择一个秘密整数b=15, 计算B = g^b mod p并发送给爱丽丝。
B = 5^15 mod 23 = 19.4.爱丽丝计算s = B a mod p19^6 mod 23 = 2.5.鲍伯计算s = A b mod p8^15 mod 23 = 2.ECDH密钥交换:ECDH:ECC算法和DH结合使用,用于密钥磋商,这个密钥交换算法称为ECDH。
交换双方可以在不共享任何秘密的情况下协商出一个密钥。
ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点P,一个整数k,求解Q=kP 很容易;给定一个点P、Q,知道Q=kP,求整数k确是一个难题。
ECDH即建立在此数学难题之上。
密钥磋商过程:假设密钥交换双方为Alice、Bob,其有共享曲线参数(椭圆曲线E、阶N、基点G)。
1) Alice生成随机整数a,计算A=a*G。
2) Bob生成随机整数b,计算B=b*G。
3) Alice将A传递给Bob。
A的传递可以公开,即攻击者可以获取A。
由于椭圆曲线的离散对数问题是难题,所以攻击者不可以通过A、G计算出a。
4) Bob将B传递给Alice。
同理,B的传递可以公开。
5) Bob收到Alice传递的A,计算Q =b*A6) Alice收到Bob传递的B,计算Q`=a*BAlice、Bob双方即得Q=b*A=b*(a*G)=(b*a)*G=(a*b)*G=a*(b*G)=a*B=Q' (交换律和结合律),即双方得到一致的密钥Q。
智多晶XSSL12-F256-V1用户手册说明书
西安智多晶微电子有限公司XI’AN Intelligence Silicon Tech Co.LtdXi’An Intelligent Silicon Technology Co.(XiST)XSSL12-F256-V1用户手册Version 1.0 2019西安智多晶微电子有限公司XIAN Intelligent Silicon Technology西安市高新区科技二路72 号,邮编710075西安软件园西岳阁102 室+86 029 88860-013网址:版权声明本手册版权归属西安智多晶微电子有限公司所有, 并保留一切权力。
非经本公司同意,任何单位及个人不得擅自摘录或修改本手册内容,违者我们将追究其法律责任。
在使用产品之前,请仔细地阅读该手册并且确保知道如何正确使用该产品,不合理的操作可能会损坏开发板,使用过程中随时参考该手册以确保正确使用。
Xian Intelligent Silicon Technology Co. 第2页版本信息版本号版权发布日期备注Version 1.0 西安智多晶微电子有限公司2019.3.18Xian Intelligent Silicon Technology Co. 第3页目录目录 (4)1. 关于本手册 (7)1.1适用范围 (7)1.2手册内容 (7)1.3相关文档 (7)2. 开发板简介 (8)2.1概述 (8)2.2开发板套件 (9)2.3硬件框图 (10)2.4功能及特点 (11)3. 开发板电路 (13)3.1FPGA (13)3.1.1 FPGA资源 (13)3.1.2 FPGA核心架构 (14)3.1.3 I/O特性 (14)3.1.4 时钟管理 (14)3.1.5 外部存储器接口 (15)3.2电源 (15)3.2.1 概述 (15)3.2.2 电源电路 (15)3.3时钟资源 (17)3.3.1 概述 (17)3.3.2 时钟电路 (17)3.3.3 引脚分配 (17)3.4按键 (17)3.4.1 概述 (17)3.4.2 按键电路 (17)3.4.3 引脚分配 (19)Xian Intelligent Silicon Technology Co. 第4页3.5LED (19)3.5.1 概述 (19)3.5.2 LED电路 (19)3.5.3 引脚分配 (20)3.6扩展口 (20)3.6.1 概述 (20)3.6.2 扩展口电路 (20)3.6.3 引脚分配 (21)3.7单片机 (26)3.7.1 概述 (26)3.7.2 单片机电路 (26)3.7.3 引脚分配 (27)3.8千兆以太网接口 (27)3.8.1 概述 (27)3.8.2 千兆以太网接口电路 (28)3.8.3 引脚分配 (29)3.9SDRAM (30)3.9.1 概述 (30)3.9.2 SDRAM电路 (30)3.9.3 引脚分配 (31)3.10USB-UART (33)3.10.1 概述 (33)3.10.2 USB-UART电路 (33)3.10.3 引脚分配 (35)3.11FLASH (35)3.11.1 概述 (35)3.11.2 FLASH电路 (35)3.11.3 引脚分配 (37)3.12EEPROM (37)3.12.1 概述 (37)3.12.2 EEPROM电路 (37)Xian Intelligent Silicon Technology Co. 第5页3.12.3 引脚分配 (38)3.13配置模式 (38)3.13.1 概述 (38)3.13.2 JTAG模式 (38)3.13.3 AS模式 (39)3.13.4 PS模式 ............................................................................ 错误!未定义书签。
Diffie-Hellman密钥协商算法
Diffie-Hellman密钥协商算法⼀、概述Diffie-Hellman密钥协商算法主要解决秘钥配送问题,本⾝并⾮⽤来加密⽤的;该算法其背后有对应数学理论做⽀撑,简单来讲就是构造⼀个复杂的计算难题,使得对该问题的求解在现实的时间内⽆法快速有效的求解(computationally infeasible )。
理解Diffie-Hellman密钥协商的原理并不困难,只需要⼀点数论⽅⾯的知识既可以理解,主要会⽤到简单的模算术运算、本原根、费马⼩定理、离散对数等基础数论的知识。
在中已经对这些知识做了必要的总结。
⼆、从何⽽来DH密钥协商算法在1976年在Whitfield Diffie和Martin Hellman两⼈合著的论⽂New Directions in Cryptography(Section Ⅲ PUBLIC KEY CRYPTOGRAPHY)中被作为⼀种公开秘钥分发系统(public key distribution system)被提出来。
原⽂的叙述过程⽐较简单,但基本阐述了算法的原理以及其可⾏性。
在该论⽂中实际上提出了⼀些在当时很有创新性的思想。
原论⽂重点讨论两个话题:(1)在公⽹通道上如何进⾏安全的秘钥分派。
(2)认证(可以细分为消息认证和⽤户认证)。
为了解决第⼀个问题,原⽂提出两种⽅法:公钥加密系统(public key cryptosystem)和秘钥分发系统(public key distribution system)。
对于公钥加密系统,原⽂只是勾画了⼀种⽐较抽象的公钥加密系统的概念模型,重点是加解密采⽤不同的秘钥,并总结了该系统应该满⾜的⼀些特性,相当于是⼀种思想实验,并没有给出具体的算法实现途径,但这在当时应该来说已经⾜够吸引⼈。
后来RSA三⼈组(Ron Rivest、Adi Shamir 和 Leonard Adleman)受此启发,经过许多轮失败的尝试后,于第⼆年在论⽂A Method for Obtaining Digital Signatures and Public-Key Cryptosystems中提出了切实可⾏且很具体的公钥加密算法--RSA公钥加密算法。
基于dh密钥协商的组密钥管理方案
基于dh密钥协商的组密钥管理方案下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!基于DH密钥协商的组密钥管理方案概述在现代网络通信中,确保数据安全性至关重要。
dh 密钥协商协议
dh 密钥协商协议DH(Diffie-Hellman)密钥协商协议是一种用于安全通信的协议,其目的是让通信双方在没有事先约定密钥的情况下协商一个共享的密钥。
DH协议的核心思想是利用离散对数的困难性质,从而实现安全的密钥交换。
DH协议的具体步骤如下:1. 首先,通信双方需要通过公开信道传输一些公共参数:a. 一个质数p,作为有限域的模数;b. 一个整数g,作为原根;2. Alice和Bob各自选择一个私密值,其中,Alice选择一个随机数a,Bob选择一个随机数b。
3. Alice和Bob利用公共参数计算出私密值的公开值:a. Alice计算A = g^a mod p;4. Alice和Bob之间通过公开信道交换各自的公开值A和B。
6. Bob同样计算共享密钥K' = A^b mod p。
7. 通过比较K和K’,确认两者是否相同。
如果相同,那么Alice和Bob就可以使用共享密钥进行加密通信。
DH协议的安全性基于离散对数问题的难度,即在有限域上寻找一个指数,使得给定的基数取这个指数的余数等于给定的数值。
这个问题目前是一个NP问题,并且很难找到可行的算法进行攻击。
虽然DH协议本身是安全的,但是由于存在中间人攻击可能,因此实际应用中常常会采用其他安全协议来保证通信的安全。
例如,在TLS协议中,可以使用DH协议来协商密钥,同时还通过数字证书来验证通信方的身份,以及使用对称加密算法来保证通信过程中的保密性和完整性。
总之,DH密钥协商协议是一种简单有效的密钥协商技术,它利用离散对数问题的难度保证了密钥交换过程的安全性。
然而在实际应用中需要注意中间人攻击等可能的安全威胁。
戴尔 Axim X3 使用手册说明书
• ActiveSync Help — Click Help→ Microsoft ActiveSync Help on your computer.
Printed in China Printed on recycled paper
• To adjust the brightness, press and hold the scroll dial and press the top or bottom of the navigator button.
• To dim the display, press and hold the power button. Repeat to light the display.
|
|
Use Microsoft ActiveSync to synchronize the data on your device with the data on your computer.
1. Insert the Dell Companion CD.
2. Click the yellow triangle and click Start Here.
Finding Information
• Dell User's Guide — Setting up and using your device.
• Microsoft Pocket PC Help — Tap Start→ Help.
DH密钥协商算法报告文档
DH密钥协商算法报告文档一、DH密钥协商算法的原理1.选择一个大质数p和一个原根g。
2. 甲方选择一个私密数a,并计算A = g^a mod p,将A发送给乙方。
3. 乙方选择一个私密数b,并计算B = g^b mod p,将B发送给甲方。
4. 甲方利用收到的B和自己的私密数a计算出密钥S = B^a mod p。
5. 乙方利用收到的A和自己的私密数b计算出密钥S = A^b mod p。
6.甲方和乙方生成的密钥S相同,可以用于后续的对称加密通信。
二、DH密钥协商算法的优点1.安全性高:DH密钥协商算法基于离散对数的计算困难性,即使在不安全的通信渠道上,也能确保双方只能生成相同的密钥,而无法通过截获和分析数据推算出密钥。
2.密钥长度可变:DH密钥协商算法可以选择不同的质数p和原根g,通过调整参数的大小,可以生成不同长度的密钥,以适应不同安全需求。
3.公开参数交换:DH密钥协商算法只需要交换公开参数A和B,而不需要交换私密数,减少了通信量和计算量。
三、DH密钥协商算法的应用场景1. VPN(Virtual Private Network):DH密钥协商算法可用于在远程访问VPN时,协商双方之间的对称加密密钥,保证通信的机密性。
2.SSL/TLS通信:DH密钥协商算法可用于HTTPS的握手过程,通过生成相同的密钥,实现客户端和服务器之间的通信机密性。
3.移动通信:DH密钥协商算法可用于移动通信网络中的鉴权和密钥协商过程,保护用户的隐私和通信数据的安全。
四、DH密钥协商算法的安全性分析DH密钥协商算法的安全性基于离散对数问题的困难性,即找到满足条件g^x ≡ y (mod p)的x的困难性。
该问题尚未被证实为NP难问题,但通过选择足够大的质数p和合适的原根g,可以使算法在实际应用中具有足够的安全性。
然而,DH密钥协商算法也存在一些安全性弱点,例如:1.中间人攻击:DH密钥协商算法并不能防止中间人攻击,即有可能在通信过程中插入伪造的公开参数,从而导致生成的密钥被中间人截获。
H3C S5100-SSH操作
1.1.3 4.
交互会话阶段
会话请求通过后,服务器端和客户端进行信息的交互 1.1.3 5.
1-2
H3C S5100-SI/EI 系列以太网交换机 操作手册 SSH
第 1 章 SSH 配置
i
H3C S5100-SI/EI 系列以太网交换机 操作手册 SSH
第 1 章 SSH 配置
第1章 SSH 配置
1.1 原理介绍
1.1.1 SSH 简介
SSH(Secure Shell,安全外壳)是一个用于在非安全网络中提供安全的远程登录 以及其他安全网络服务的协议,它能够使用户安全地登录到交换机,通过设备的命 令行接口进行配置和管理交换机。当用户通过非安全的网络环境远程登录到交换机 时,每次发送数据前,SSH 都会自动对数据进行加密,当数据到达目的地时,SSH 自动对加密数据进行解密,以此提供安全的信息保障。同时,SSH 提供强大的认证 功能,保护交换机不受诸如 DNS 和 IP 欺骗等攻击。此外,SSH 还支持其他功能, 比如可以对传输的数据进行压缩,从而加快传输的速度。又可以代替 Telnet,或为 FTP 提供安全的“通道”。 SSH 采用客户—服务器模式。支持 SSH 功能的交换机既可以作为 SSH 服务器又可 以作为 SSH 客户端,也可以同时充当服务器和客户端两种角色。作为 SSH 服务器 时,为远程登录用户提供安全的 SSH 连接,以便用户能够安全的访问 SSH 服务器。 作为 SSH 客户端时,允许与支持 SSH 服务器功能的设备建立 SSH 连接,从而实现 从本地设备通过 SSH 登录到远程设备上。
非对称密钥算法还可以用于签名,比如用户 1 使用自己的私钥对数据进行签名,然 后发给用户 2,用户 2 可以用用户 1 的公钥验证签名,如果签名是正确的,那么就 能够确认该数据来源于用户 1。
fiio X3电子版说明书
X3电子版说明书(FW1.0及其以后软件版本适用)前言:感谢您购买了FiiO公司推出的便携192 kHz/24 bit无损播放器X3。
为了让X3给您带来更好的赏音体验,这份电子说明书介绍了X3的功能和操作方法,并收集了官方论坛的一些常见问题和解答供您参考,希望能帮助您更加全面的认识和使用X3。
一、产品介绍二使用介绍三、固件升级四、菜单操作图解五、菜单操作(文字详解)六、使用技巧七、常见问题解答充电 传输歌曲 固件升级 储存 音乐播放 其他操作与其他音频设备连接、按键与接口3目录3-456-78-11111212-1313-141414-1515-1616-1717一、产品介绍:X3是一款高保真的数字音频播放器,能支持DSD 、WAV 、WMA 、APE 、FLAC 、 AAC ,ALAC 、OGG 、MP2、MP3等音乐格式,最高支持192 kHz/64 bit 采样率,同时支持CUE 索引播放、无缝播放、文件夹跳曲、深度待机等功能,是一款高性能的便携式播放器。
下面我们结合图示来介绍X3的使用方法。
二按键与接口使用方法:、Po 输出13Micro USB 接口1514LO /COAX输出指示灯6OK/8音量快减:长按音量微减:短按音量微加:短按1)26万色TFT显示屏(320×RGB×240):操作界面及其他信息显示,配合按键操作和设置产品。
2)快捷键:在当前界面短按,弹出/收起快捷菜单;在主界面短按,进入播放设置;3)返回键/主菜单:在主界面且正在播放音乐时短按,进入音乐播放界面;在其他界面短按,按照进入路径逐级返回;在任何界面长按,返回主菜单界面。
4)上一曲/上翻(切换键):播放界面下短按,播放上一首歌曲;播放界面下长按,快退当前歌曲;非播放界面下用于向上翻动选择菜单项。
5)下一曲/下翻(切换键):播放界面下短按,播放下一首歌曲;播放界面下长按,快进当前歌曲;非播放界面下用于向下翻动选择菜单项。
dh密钥协商算法
DH密钥协商算法1. 简介DH密钥协商算法(Diffie-Hellman Key Exchange Algorithm)是一种用于在公共网络上安全地协商共享密钥的密码学算法。
它在1976年由Whitfield Diffie和Martin Hellman提出,是公钥密码学的先驱之一。
DH密钥协商算法的设计目标是实现秘密通信,确保通信双方能够协商并共享一个只有他们两个人知道的密钥。
2. 原理DH密钥协商算法基于数论的一个基本问题,即“离散对数问题”。
该问题是指对于一个大素数p和一个整数a,已知a和p的幂(a^x mod p),求解x的值。
离散对数问题被认为是一个计算复杂度较高的问题,目前没有已知的快速算法可以有效地解决。
DH密钥协商算法的基本思想是,通信双方通过互相交换一些公开的信息来生成共享的密钥。
具体步骤如下:1.双方约定一个大素数p和一个生成元g,其中p是一个较大的随机素数,g是一个小于p的数。
2.双方各自选择一个私密的数,分别记为a和b。
3.通信双方分别计算公开值A和B,其中A = g^a mod p,B = g^b mod p。
4.双方交换公开值A和B。
5.通信双方分别计算共享密钥,A^b mod p 和 B^a mod p。
6.此时,双方得到的密钥是相同的,可以用于加密和解密通信内容。
3. 安全性DH密钥协商算法的安全性基于离散对数问题的困难性。
即使敌方知道了A、B和g 的值,也很难从中推导出双方的私密值a和b,进而猜测出共享密钥。
其安全性也取决于大素数p和生成元g的选择。
若p和g选取不当,可能会使算法易受到攻击。
因此,在实际应用中,需要选取足够大的素数p和合适的生成元g,以保证DH密钥协商算法的安全性。
另外,协商出的密钥并未被加密传输,为了保证通信的机密性,还需要使用对称密钥加密算法对通信内容进行加密。
4. 优势与应用DH密钥协商算法有以下优势和应用领域:•秘密性:通过DH密钥协商算法,通信双方可以在公共网络上协商出一个只有他们两个人知道的共享密钥,确保通信内容的机密性。
云终端X3用户手册
云终端X3————用户手册重要声明首先感谢您使用本公司的云终端设备。
为了让您能够轻松自由地使用本设备,在您开机使用之前,请仔细阅读我们随机提供的说明书,以便您能正确使用本机。
由于产品版本升级或其它原因,本文档内容会不定期进行更新。
除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
本说明书中的资讯资料如有变更,恕不另行通知,且不承担此手册产生的错误或者疏漏引起的任何责任。
注意事项●为保证使用安全,请用本产品专用电源适配器。
●在开机状态,切勿直接拔掉电源,避免突然断电损坏盒子。
●产品使用过程中请勿随意移动设备。
●请勿将产品放在高温、低温环境中,尽量保持工作环境的散热通风、防潮防水。
●请勿投掷、敲击或摇晃机盒,非专业人员的不得擅自拆卸机盒,不当操作可能会导致装置损毁。
●请勿使用刺激性的化学制品、清洁剂或腐蚀性的清洁剂来清洁机体。
关于云终端X3更多资讯欢迎访问华科官网/目录1 部件描述 ........................................................................... 错误!未定义书签。
2 连接 (5)2.1 连接显示器 (5)2.2 连接网线 (5)2.3 连接鼠标和键盘 (6)2.4 连接耳机和麦克风 (6)2.5 连接电源 (6)3 操作指南 (7)3.1 远程连接设置 ...................................................... 错误!未定义书签。
3.1.1 查找主机 (6)3.1.2 配置与快捷方式 (6)3.1.3关机与本机IP (7)3.2 控制面板 (7)3.2.1 网络 (7)3.2.2 显示与声音 (7)3.2.3 外设与启动................................................... 错误!未定义书签。
基于椭圆曲线密码体制的可认证的密钥协商设计与分析
基于椭圆曲线密码体制的可认证的密钥协商设计与分析谢绒娜;李凤华;欧海文;李晓东【摘要】椭圆曲线密码体制以其密钥短、安全强度高、速度快等优越性被广泛用于进行构建数字签名和用户身份认证方案.同样,它也可以用来构建密钥交换协议.Diffie-Hellman密钥协商协议对来自中间人的攻击是脆弱的.基于椭圆曲线离散对数难解性, 利用椭圆曲线密码体制的数字签名方案,提出了基于身份认证的密钥协商协议.该协议提供身份认证、密钥确认、完美前向安全性, 并能够防止中间人攻击.【期刊名称】《计算机应用与软件》【年(卷),期】2010(027)008【总页数】3页(P52-54)【关键词】椭圆曲线密码;椭圆曲线离散对数;Diffie-Hellman密钥协商;可认证的密钥协商【作者】谢绒娜;李凤华;欧海文;李晓东【作者单位】北京电子科技学院,北京,100070;北京电子科技学院,北京,100070;北京电子科技学院,北京,100070;北京电子科技学院,北京,100070【正文语种】中文0 引言在开放的网络环境中,用户之间如何进行安全的通信是一个非常重要的问题。
密钥协商协议扮演着重要角色。
密钥协商协议能使需要通信的双方协商一个秘密的会话密钥,利用该密钥和适当的密码算法,能实现信息传输的保密性、认证性和完整性,从而在不安全的网络上建立起一条安全的信息通道。
如何设计安全的密钥协商协议和分析密钥协商协议的安全性是信息安全领域的一项重要课题。
一个安全的密钥协商协议应具有认证性与保密性。
认证性是密钥协商协议所必需的一个重要安全因素[1]。
缺少认证性,一方面主体无法确认究竟在和谁进行密钥协商,此时即使会话密钥具有保密性,也没有意义;另一方面,敌手可能会利用中间人攻击获取主体的解密服务,从而得到未授权的秘密。
为了保证密钥协商的认证性和保密性,我们在设计安全的密钥协商协议时,需要注意以下两个方面: (1)消息中必需的元素;(2)采用何种密码体制保护这些元素。
DH密钥协商算法报告文档
X X X X教院之阳早格格创做课程安排报告DH稀钥商谈算法课程称呼:暗号算法步调安排教死姓名:教死教号:博业班级:任课西席:2014年12 月 1日目录1. 选题背景稀钥商谈本量上是一个协议,它通过二个大概多个成员正在一个公启的疑道上通疑共同天修坐一个秘稀稀钥,普遍情况下,一个稀钥商谈规划的稀钥是某个函数的值,其输进量由通疑单圆提供,商谈历程是由一系列的程序步调完毕的.会话稀钥由每个协议介进者分别爆收的参数通过一定的估计得出.罕睹的稀钥商谈协议,如IKE.稀钥商谈协议的死成办法则可分为证书籍型战无证书籍型.证书籍型是指正在会话稀钥的爆收历程中,由一个可疑的证书籍核心(CA)给介进稀钥商谈的各圆各集收一个证书籍,此证书籍中含有此圆的,ID及其余疑息.证书籍型稀钥商谈协议的便宜是提招供证,姑且PKI(公钥暗号机造)广大安置,比较老练,应用里广,且由PKG管造公公钥对付有好处统一管造,缺面是估计代价大,需要一个可疑的CA,共时证书籍还需要维护.无证书籍型是指各圆正在举止会话稀钥的商谈历程中不需要证书籍的介进,那是姑且稀钥商谈协议的合流种类,便宜是不需要CA的介进,缩小了估计量,越收是正在矮耗环境下应用的更多,共时仄安性也不比证书籍型强.险些不明隐的缺面,不过安排一个仄安的越收矮耗的无证书籍稀钥商谈规划不是很简单.现有的流通的稀钥商谈协议,皆使用了Diffie-Hellman,它们基础上不妨瞅成是Diffie-Hellman的扩展.也便是道,群组稀钥商谈协议不妨明白成怎么样使用Diffie-Hellman去真止群的稀钥接换.2. DH稀钥商谈算法2.1 算法的爆收Diffie-Hellman稀钥接换协议是第一个被提出的稀钥商谈规划,是好国斯坦祸大教的W.Diffie战M.E.Hellman于1976年提出的,它是第一个刊登的公钥暗号机造,Diffie-Hellman算法的唯一手段便是使二个用户能仄安的接换稀钥,进而得到一个共享的会话稀钥(秘稀稀钥).需要注意的是,该算法自己不克不迭用于加稀解稀,只可用于稀钥的接换,单圆决定要用的稀钥后,要使用其余对付称稀钥支配加稀算法本量加稀妥协稀消息.2.2 算法的形貌1. 失集对付数的观念:1)本根:如果a是素数p的一个本根,那么数值:a mod p,a^2 mod p,…,a^(p-1) mod p是各不相共的整数,且以某种排列办法组成了从1 到p-1 的所有整数.2)失集对付数:如果对付于一个整数b战素数p的一个本根a,不妨找到一个唯一的指数i,使得b =(a^i)modp,其中0≦i≦p-1,那么指数i称为b的以a为基数的模p的失集对付数.2. 算法灵验性Diffie-Hellman 算法的灵验性依好于估计失集对付数的易度,其含意是:当已知大素数p战它的一个本根a后,对付给定的b,要估计i ,被认为是很艰易的,而给定i 估计b 却相对付简单.3. Diffie-Hellman算法:假若用户A战用户B期视接换一个稀钥.与素数p战整数a,a是p的一个本根,公启a战p.1)A采用大的随机数RA(0<=RA<=p-2),并估计SA=(a^RA) mod p,而且把SA收收给用户B.2)B采用随机数RB(0<=RB<=p-2),并估计SB=(a^RB) mod p,而且把SB收收给用户A.3)A估计稀钥的办法是:K=(SB) ^RA mod p,B估计稀钥的办法是:K=(SA) ^RB mod p,道明:(SB)^ RA mod p = (a^RB mod p)^ RA mod p= (a^RB)^ RA mod p= (a^RA) ^RBmod p(-- 稀钥即为 a^(RA*RB) mod p)=(a^RA mod p)^ RB mod p= (SA) ^RB mod p由于RA战RB是窃稀的,而第三圆惟有p、a、SB、SA不妨利用,惟有通过与失集对付数去决定稀钥,然而对付于大的素数p,估计失集对付数是格外艰易的.4. 例子:假若用户Alice战用户Bob期视接换一个稀钥,与一个素数p =97战97的一个本根a =5,Alice战Bob分别采用秘稀稀钥RA=36战RB=58 ,并估计各自的公启稀钥:SA=a^RA mod p =5^36 mod 97=50SB=a^RB mod p =5^58 mod 97=44Alice战Bob接换了公启稀钥之后,估计共享稀钥如下:Alice:K=(SB) ^RA mod p=44^36 mod 97=75Bob:K=(SA) ^RB mod p=50^58 mod 97=75Diffie-Hellman稀钥接换协议的基础模式如图2-1所示:3. DH稀钥商谈算法的真止3.1 安排央供功能央供(1)爆收一个偶数p ,推断是可是素数.素数央供介于2^14-2^15.先用小于20的素数去试除,再使用Miller-Rabin概率检测算法举止检测;(2)供得模p 的一个本根,央供本根的值介于32-1024之间;(3)输出单圆采用的随机数,随机数介于2^5-2^7,使用模沉复仄要领举止估计,输出单圆的估计截止;(4)搜集传输圆里,不妨是C/S模式,也不妨是B/S模式;(5)输出末尾商谈的稀钥;3.1.2 输出央供(1)输出偶数的爆收历程,用函数真止爆收谦脚央供的偶数;(2)输出用小素数试除的推断历程,并输出屡屡试除之后的余数,用函数真止一次试除并返回试除之后的余数;(3)Miller-Rabin概率检测算法运止5次,输出检测历程及截止.用函数真止一次Miller-Rabin概率检测算法并返回检测截止;(4)如果不是偶素数,输出下一个偶数爆收的准则;(5)输出爆收模的一个本根的历程;(6)输出使用模沉复仄要领举止估计的历程战截止.3.2 模块区分及真止3.2.1 小素数试除算法形貌:小素数试除主假若用随机爆收的数去试除小于20的素数,以此简朴判决该随机数是可是素数.真止办法:以本次步调编写为例,与小素数数组S_PrimeTable[7] = { 3, 5, 7, 11, 13, 17, 19 },用爆收的大随机数去除以数组中的元素,若所得余数不为0,则能姑且推断该随机数为素数.简曲真止代码如下:int SPrime(int odd){int i, remainder, k = 0;for (i = 0; i<7; i++){remainder = odd % S_PrimeTable[i];printf("第%d次小素数%d试除的余数为%d.\n", i + 1, S_PrimeTable[i], remainder);if (remainder == 0)k++;}if(!k){printf("小素数试除推断%d是素数.\n\n",odd);}else{printf("小素数试除推断%d不是素数.\n\n",odd);}return !k;}3.2.2 模沉复仄要领算法形貌:模沉复仄要领是对付大整数模m战大整数e估计b^e(mod m).正在本次安排中,模沉复仄要领主要使用正在米勒检测算余值部分、供本根部分、SA战SB的估计以及末尾稀钥的估计历程中,其中,SA战SB的估计以及末尾稀钥的估计央供输出估计历程.(为了界里隐现好瞅,正在此写了二个模沉复仄圆算法的代码,思路相共,不过正在其中一个函数中写了输出估计历程,该函数用去估计SA战SB以及末尾的稀钥.)真止办法:令a=1,并将十进造数e写成二进造,若二进造数值为1,则估计a≡(a*b)mod n,b≡(b*b)mod n;若二进造数值为0,则估计a≡a mod n,b ≡(b*b)mod n.末尾a即为最后估计截止.简曲真止代码如下:int MoChongFu(int m, int e,int n){int binary[22];int count=0,i;int a=1,b;b=m;do{binary[count]=e%2;e=e/2;count++;}while(e!=0);for(i=0;i<count;i++){if(binary[i]==1){a=(a*b)%n;b=(b*b)%n;//printf("a=%d, b=%d\n",a,b);}if(binary[i]==0){a=a;b=(b*b)%n;//printf("a=%d, b=%d\n",a,b);}}return a;}Miller-Rabin检测算法算法形貌:米勒检测正在本次安排中主要用去检测正在小素数判决了之后的随机数是可是素数.真止办法:将待检测的数n写成n-1=2s*t,采用随机数a,估计b≡atmod n.若b mod n≡1,则n是素数.可则,干如下循环,循环次数为1—s:如果bmod n≡-1,则b是素数,可则,b≡b*b mod n.简曲真止代码如下:int milejiance(int odd){int s=0,i,count=0;int a,b,t,num;num=odd-1;while(1){if(num%2==0){s++;num=num/2;}else{t=num;break;}}printf("将%d写成%d-1=2^%d*%d\t\t\n",odd,odd,s,t);a=rand()%(odd-3)+2;printf("爆收的随机数a是:%d\n",a);b=MoChongFu(a,t,odd);printf("第1次算出的余值是:%d\n",b);if(b%odd==1||b==(odd-1))return 1;for(i=0;i<s;i++){b=(b*b)%odd;printf("第%d次算出的余值为%d \n",i+2,b);if(b==(odd-1)){return 1;}}return 0;}本根的爆收算法形貌:央供一个素数一定范畴内的本根,该当先供该素数的最小本根.根据定理:设m>1,m的欧推函数a所有分歧素果数是q1,q2,…,qk,则g是模m的一个本根的充要条件是 g^(a/qi)!=1(mod m),i=1,2,…k 真止办法:先供大素数的欧推函数的素果数a[n],并通过素果数供得g 的指数c[n],接着考证g^c[n] 是可共余于1,对付g=2,3…,逐个验算,曲到算出最小的g值谦脚g^c[n]均分歧余于1,那么g即是大素数m的最小本根,果为当c[n]遍历欧推函数a的简化结余系时,g^c[n]遍历模m的所有本根,所以不妨通过欧推函数的简化结余系供得谦脚央供的本根.简曲真止代码如下:int yuangen(int yy){int n=2,g=0,q,k,j=0,a[10];int i=0,l=0;int gg;int c[10];int count=0,flag=0;q=yy-1;while(1){if (q%n==0){a[j]=n;j++;q=q/n;}n++;if(q<n)break;}printf("模%d的欧推函数领会量果数为:\n",yy);for(n=0;n<j;++n)printf("%d ",a[n]);printf("\n\n");printf("所以指数为:");for(n=0;n<j;++n){c[n]=(yy-1)/a[n];printf("%d ",c[n]);}printf("\n\n");for(g=2;;g++){for(n=0;n<j;++n){if(MoChongFu(g,c[n],yy)==1){printf("%d^%d=%d mod %d\n",g,c[n],MoChongFu(g,c[n],yy),yy);goto cd;}else{printf("%d^%d=%d mod %d\n",g,c[n],MoChongFu(g,c[n],yy),yy);}}gg=g;printf("所以%d是最小本根.\n",gg);goto ab;cd: ;}ab:for(g=3;;g++){if((yy-1)%g!=0){k=MoChongFu(gg,g,yy);if(k>32&&k<1024){printf("与介于2^5到2^10之间的一个本根值为:");printf("%d\n\n",k);return k;}}}return 0;}3.2.5 爆收随机素数算法形貌:使用srand()战rand()函数爆收随机数n,而后通过推断n%2是可为0去推断爆收的是可是偶数.简曲真止代码如下:int S_PrimeTable[7] = { 3, 5, 7, 11, 13, 17, 19 };//爆收一个随机数int Random_Odd(){int odd = 0;while (1){srand(time(NULL));odd = rand() % (16385) + 16384;if (odd % 2 != 0)break;}//printf("%d\n", odd);return odd;}4. 尝试报告⑴爆收偶素数,用小素数试除而且输出试除的余数,再举止Miller-Rabin 检测,若Miller-Rabin检测不通过,则输出爆收下一个随机数的准则并继承爆收下一个随机数,曲至爆收谦脚条件的偶素数,如图4-1、4-2所示:图 4-1 爆收随机数并用小素数试除图 4-2 米勒检测历程⑵代码调试的最后截止如图4-3、图4-4、图4-5、图4-6、图4-7、图4-8所示:图4-3 爆收随机数并用小素数试除图4-4 米勒检测历程图4-5 大素数的欧推函数领会量果数图4-6 供本根并估计各自的稀钥图4-7 模沉复仄要领估计历程图4-8 估计共共稀钥论断本文是正在教习了相闭C谈话知识、暗号教及相闭疑息仄安数教知识之上举止的安排,本安排采与C谈话真止,真止了DH稀钥商谈算法,用户A战用户B通过自己采用的随机数战公启的大素数通过失集对付数的某些算法供得稀钥,并相互接换稀钥,通过接换得去的稀钥爆收共共的稀钥.由于教死火仄有限,正在步调可读性战典型性上有着一定的短缺,略隐缺累,而正在真止功能上也隐得不是很完备,需要正在进一步的教习中得到提下.正在编写步调的历程中逢到了一些不可预防的过失战问题,然而是皆通过书籍本以及共教的助闲得以即时将那些问题办理,此次安排对付我的逻辑性明白战编程本领皆有一定的普及.参照文件[1] 谭浩强. C步调安排[M].北京:浑华大教出版,1999.12附源代码#include<stdio.h>#include<time.h>#include<math.h>#include<stdlib.h>int Random_Odd();int SPrime(int odd);int MoChongFu(int m, int e,int n);int MoChongFua(int m, int e,int n);int milejiance(int odd);int yuangen(int yy);int S_PrimeTable[7] = { 3, 5, 7, 11, 13, 17, 19 };int main(void){int yy=0;int gg;int A,B,Key,Key1,Key2;int SA,SB;int i,flag1,flag2;do{q:printf("**********************\n\n\n");while(yy == Random_Odd());yy = Random_Odd();printf("爆收的随机数是:%d\n\n",yy);flag1=!SPrime(yy);for(i=0;i<5;i++){flag2=!milejiance(yy);if(flag2){printf("第%d次米勒检测已通过.\n\n",i+1);printf("果为第%d次米勒检测不通过,所以随机数%d不是素数,\n爆收下一个随机数,先用小素数试除,再举止5次米勒检测,如果小素数试除通过而且5次皆通过,则道明该随机数是大素数.",i+1,yy);printf("\n");goto q;elseprintf("第%d次米勒检测通过.\n\n",i+1);}}while(flag1||flag2);gg=yuangen(yy);srand(time(NULL));A = rand()%(96)+32;B = rand()%(96)+32;printf("Alice采用的随机数A是:%d\n",A);printf("Bob采用的随机数B是:%d\n\n",B);printf("估计SA=(gg^A) mod yy:\n");SA=MoChongFua(gg,A,yy);printf("\n");printf("估计SB=(gg^B) mod yy:\n");SB=MoChongFua(gg,B,yy);printf("所以SA战SB分别是:%d,%d\n\n",SA,SB); printf("估计Key1=(SB^A) mod yy:\n");Key1=MoChongFua(SB,A,yy);printf("\n");printf("估计Key2=(SA^B) mod yy:\n");Key2=MoChongFua(SA,B,yy);printf("所以:Key1=%d,Key2=%d\n\n",Key1,Key2); if(Key1==Key2)Key=Key1;printf("所以共共稀钥Key是:%d\n\n",Key); return 0;}//爆收一个随机数int Random_Odd(){int odd = 0;while (1)srand(time(NULL));odd = rand() % (16384) + 16384;if (odd % 2 != 0)break;}//printf("%d\n", odd);return odd;}//如果是素数的话返回1int SPrime(int odd){int i, r, k = 0;for (i = 0; i<7; i++){r = odd % S_PrimeTable[i];printf("第%d次小素数%d试除的余数为%d.\n", i + 1, S_PrimeTable[i], r); if (r == 0)k++;}if(!k){printf("小素数试除推断%d是素数.\n\n",odd);}else{printf("小素数试除推断%d不是素数.\n\n",odd);}return !k;}int MoChongFu(int m, int e,int n){int binary[22];int count=0,i;int a=1,b;b=m;do{binary[count]=e%2;e=e/2;count++;}while(e!=0);for(i=0;i<count;i++){if(binary[i]==1){a=(a*b)%n;b=(b*b)%n;}if(binary[i]==0){a=a;b=(b*b)%n;}}return a;}int MoChongFua(int m, int e,int n) {int binary[22];int count=0,i;int a=1,b;b=m;do{binary[count]=e%2;e=e/2;count++;}while(e!=0);for(i=0;i<count;i++)if(binary[i]==1){a=(a*b)%n;b=(b*b)%n;printf("a=%d, b=%d\n",a,b); }if(binary[i]==0){a=a;b=(b*b)%n;printf("a=%d, b=%d\n",a,b); }}return a;}//米勒检测int milejiance(int odd){int s=0,i,count=0;int a,b,t,num;num=odd-1;while(1){if(num%2==0){s++;num=num/2;}else{t=num;break;}printf("将%d写成%d-1=2^%d*%d\t\t\n",odd,odd,s,t); a=rand()%(odd-3)+2;printf("爆收的随机数a是:%d\n",a);b=MoChongFu(a,t,odd);printf("第1次算出的余值是:%d\n",b);if(b%odd==1||b==(odd-1)){return 1;}for(i=0;i<s-1;i++){b=(b*b)%odd;printf("第%d次算出的余值为%d \n",i+2,b);if(b==(odd-1)){return 1;}}return 0;}//欧推函数的素果数战二者的商int yuangen(int yy){int n=2,g=0,q,k,j=0,a[10];int gg;int c[10];q=yy-1;while(1){if (q%n==0){a[j]=n;j++;while()q=q/n;}while(!(q%n)){q=q/n;}if(q<n)break;}printf("模%d的欧推函数领会量果数为:\n",yy); for(n=0;n<j;++n)printf("%d ",a[n]);printf("\n\n");printf("所以指数为:");for(n=0;n<j;++n){c[n]=(yy-1)/a[n];printf("%d ",c[n]);}printf("\n\n");for(g=2;;g++){for(n=0;n<j;++n)。
dh算法例子的验算过程
dh算法例子的验算过程Diffie-Hellman(DH)算法是一种基于求解离散对数问题的非对称加密算法。
在DH算法中,两个通信方在公开不保密的信道上交换信息,通过计算共享密钥,实现安全的通信。
算法步骤如下:1. 选取质数p和原根gDH算法的安全性取决于选取的质数p和原根g。
发送方和接收方需要事先协商并选择相同的质数p和原根g。
2. 发送方生成私钥并计算公钥发送方随机选择一个私钥a,并计算公钥A = g^a mod p,其中^表示乘方运算,mod表示取模运算。
3. 接收方生成私钥并计算公钥接收方随机选择一个私钥b,并计算公钥B = g^b mod p。
4. 发送方计算共享密钥发送方收到接收方发送的公钥B后,通过计算共享密钥K = B^a mod p来得到共享密钥。
5. 接收方计算共享密钥接收方收到发送方发送的公钥A后,通过计算共享密钥K = A^b mod p来得到共享密钥。
6. 双方得到相同的共享密钥发送方和接收方通过步骤4和步骤5计算得到的共享密钥K相同,即可用于后续的对称加密通信。
让我们通过一个具体的例子来看一下DH算法的验算过程。
假设选取的质数p为23,原根g为5。
发送方选择私钥a为6,接收方选择私钥b为15。
发送方计算公钥:A = g^a mod p = 5^6 mod 23 = 8接收方计算公钥:B = g^b mod p = 5^15 mod 23 = 19发送方收到接收方的公钥B为19,计算共享密钥:K = B^a mod p = 19^6 mod 23 = 2接收方收到发送方的公钥A为8,计算共享密钥:K = A^b mod p = 8^15 mod 23 = 2可以看到,发送方和接收方通过计算得到的共享密钥K相同,这样就实现了安全的通信。
即使在公开的信道上,第三方窃听者无法从公开的信息中推导出共享密钥。
DH算法的安全性在于求解离散对数问题的困难性,即给定g^a mod p,无法有效地计算出a的值。
DH密钥协商算法报告文档
DH密钥协商算法报告文档1.算法原理:DH密钥协商算法基于数论中的离散对数问题。
假设Alice和Bob想要协商一个对称加密密钥,他们可以选择一对大素数p和g作为公开参数。
Alice选择一个私密数a,并计算A=(g^a) mod p,并将A发送给Bob;Bob也选择一个私密数b,并计算B=(g^b) mod p,并将B发送给Alice。
然后Alice计算B^a mod p得到相同的密钥,Bob也计算A^b mod p得到相同的密钥。
这样,Alice和Bob就通过公共网络协商出了一个相同的密钥,用于后续的对称加密通信。
2.算法流程:(1)选择一个大素数p和一个原根g作为公开参数;(2)Alice选择一个私密数a,并计算A=(g^a) mod p,并将A发送给Bob;(3)Bob选择一个私密数b,并计算B=(g^b) mod p,并将B发送给Alice;(4)Alice计算B^a mod p得到相同的密钥;(5)Bob计算A^b mod p得到相同的密钥。
3.算法安全性:DH密钥协商算法的安全性基于数论中的离散对数问题,即找到一个整数x使得(g^x) mod p = A。
由于这个问题在计算上非常困难,所以攻击者很难通过已知的参数p、g和A推导出私密数a。
因此,DH密钥协商算法在理论上是安全的。
4.优势和限制:(1)算法强度高:DH密钥协商算法基于数论问题,攻击者很难通过已知的公开参数推导出私密数,保证了密钥的安全性。
(2)协商过程不需要传输密钥:DH密钥协商算法不需要将密钥通过网络传输,只需传输公开参数和计算结果,降低了泄露密钥的风险。
(3)算法可靠性有限:DH密钥协商算法依赖于公开参数的选择,在实际应用中需要确保公开参数的质量和安全性。
如果公开参数被攻击者篡改,可能导致密钥泄露或者协商出错误的密钥。
(4)中间人攻击风险:DH密钥协商算法本身没有提供身份验证和消息完整性保护机制,攻击者可能通过中间人攻击篡改或注入消息。
5-3密钥交换协议(1)-DH协议
什么是DH 密钥交换协议?•Diffie-Hellman 算法是用于密钥交换的最早最安全的算法之一。
•DH 算法的基本工作原理是:通信双方公开或半公开交换一些准备用来生成密钥的"材料"DH 密钥交换协议的执行过程:g n 大素数:是模n 的本原元Diffie -Hellman 密钥协商协议 协议目的:Alice 和Bob 利用公钥体制建立一个新的共享密钥K ab协议组成:2条消息组成1:mod n 2:modn x y messag A B g messag B A g →→()()A :计算K ab =g xy B :计算K ab =g xyDiffie-Hellman 密钥协商协议的理论依据的离散对数困难性问题。
DH 密钥交换协议的算法描述 ●两个通信主体Alice & Bob ,希望在公开信道上建立密钥 ●初始化:选择一个大素数p (~200 digits)一个生成元●Alice 选择一个秘密钥( secret key (number) x A < p ) ●Bob 选择一个秘密钥( secret key (number) x B < p ●Alice and Bob 计算他们的公开密钥: y A = a x A mod p y B = a x B mod p●Alice , Bob 分别公开 y A , y BDH 密钥交换协议的密钥计算 ●计算共享密钥:●K AB = a x A .x B mod p= y A x B mod p= y B x A mod pK AB 可以用于对称加密密钥DH 密钥交换协议举例 1.选取素数 p=97 ,及本根 a=52.Alice 选取秘密 x A =36 & 计算公钥 y A =536=50 mod 973.Bob 选取秘密 x B =58 &计算公钥 y B =558=44 mod 974.Alice and Bob 交换公钥 (50 & 44 respectively)5.Alice 计算公享秘密 K=4436=75 mod 976.Bob 计算公享秘密 K=5058=75 mod 97DH 密钥交换协议的特点 ●两个主体每次可以选择新的秘密密钥(私钥),并计算及交换新的公钥●可以抵抗被动攻击,但不能抵抗主动攻击 ●每次可以给出新的密钥●为抵抗主动攻击,需要其它新的协议●也可以建立长期公钥安全协议技术。
DH密钥协商算法报告文档
X X X X学院课程设计报告DH密钥协商算法课程名称:密码算法程序设计学生姓名:学生学号:专业班级:任课教师:2014年12 月1日目录1. 选题背景 (1)2. DH密钥协商算法 (1)2.1 算法的产生 (1)2.2 算法的描述 (2)2.3 算法的安全性 (3)3.DH密钥协商算法的实现 (4)3.1 设计要求 (4)3.1.1 功能要求 (4)3.2 模块划分及实现 (5)3.2.1 小素数试除 (5)3.2.2 模重复平方法 (5)3.2.3 Miller-Rabin检测算法 (6)3.2.4 原根的产生 (8)3.2.5 产生随机素数 (10)4.测试报告 (11)结论 (16)参考文献 (16)附源代码 (17)1. 选题背景密钥协商实际上是一个协议,它通过两个或多个成员在一个公开的信道上通信联合地建立一个秘密密钥,一般情况下,一个密钥协商方案的密钥是某个函数的值,其输入量由通信双方提供,协商过程是由一系列的顺序步骤完成的。
会话密钥由每个协议参与者分别产生的参数通过一定的计算得出。
常见的密钥协商协议,如IKE。
密钥协商协议的生成方式则可分为证书型和无证书型。
证书型是指在会话密钥的产生过程中,由一个可信的证书中心(CA)给参与密钥协商的各方各分发一个证书,此证书中含有此方的公钥,ID及其他信息。
证书型密钥协商协议的优点是提供认证,目前PKI(公钥密码体制)广泛部署,比较成熟,应用面广,且由PKG管理公私钥对有利于统一管理,缺点是计算代价大,需要一个可信的CA,同时证书还需要维护。
无证书型是指各方在进行会话密钥的协商过程中不需要证书的参与,这是目前密钥协商协议的主流种类,优点是不需要CA的参与,减少了计算量,尤其是在低耗环境下应用的更多,同时安全性也不比证书型弱。
几乎没有明显的缺点,只是设计一个安全的更加低耗的无证书密钥协商方案不是很容易。
现有的流行的密钥协商协议,都使用了Diffie-Hellman,它们基本上可以看成是Diffie-Hellman的扩展。
https握手与密钥协商过程
https握手与密钥协商过程基于 RSA 握手和密钥交换的客户端验证服务器为示例详解握手过程。
1.client_hello客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数,扩展字段等信息,相关信息如下:支持的最高TSL协议版本version,从低到高依次 SSLv2 SSLv3 TLSv1 TLSv1.1TLSv1.2,当前基本不再使用低于 TLSv1 的版本;客户端支持的加密套件 cipher suites 列表,每个加密套件对应前面 TLS 原理中的四个功能的组合:认证算法 Au (身份验证)、密钥交换算法 KeyExchange(密钥协商)、对称加密算法 Enc (信息加密)和信息摘要 Mac(完整性校验);支持的压缩算法 compression methods 列表,用于后续的信息压缩传输; 随机数random_C,用于后续的密钥的生成;扩展字段 extensions,支持协议与算法的相关参数以及其它辅助信息等,常见的SNI 就属于扩展字段,后续单独讨论该字段作用。
2.server_hello+server_certificate+sever_hello_done(a) server_hello, 服务端返回协商的信息结果,包括选择使用的协议版本 version,选择的加密套件 cipher suite,选择的压缩算法 compression method、随机数random_S等,其中随机数用于后续的密钥协商;(b)server_certificates, 服务器端配置对应的证书链,用于身份验证与密钥交换;(c) server_hello_done,通知客户端 server_hello 信息发送结束; 3.证书校验客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作,合法性验证包括如下:证书链的可信性 trusted certificate path,方法如前文所述;证书是否吊销 revocation,有两类方式离线 CRL 与在线 OCSP,不同的客户端行为会不同;有效期 expiry date,证书是否在有效时间范围;域名 domain,核查证书域名是否与当前的访问域名匹配,匹配规则后续分析;4.client_key_exchange+change_cipher_spec+encrypted_handshake_message (a)client_key_exchange,合法性验证通过之后,客户端计算产生随机数字 Pre-master,并用证书公钥加密,发送给服务器;(b) 此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数random_C 和 random_S 与自己计算产生的 Pre-master,计算得到协商密钥;enc_key=Fuc(random_C, random_S, Pre-Master)(c) change_cipher_spec(交换_密码_模式),客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信;(d) encrypted_handshake_message(加密握手消息),结合之前所有通信参数的hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证;5.change_cipher_spec+encrypted_handshake_message(a) 服务器用私钥解密加密的 Pre-master 数据,基于之前交换的两个明文随机数random_C 和 random_S,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master);(b) 计算之前所有接收信息的 hash 值,然后解密客户端发送的encrypted_handshake_message,验证数据和密钥正确性;(c) change_cipher_spec, 验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信(d) encrypted_handshake_message, 服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 session secret 与算法加密并发送到客户端;6.握手结束客户端计算所有接收信息的 hash 值,并采用协商密钥解密encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成;7.加密通信开始使用协商密钥与算法进行加密通信。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
The X3DH Key Agreement Protocol X3DH密钥协商协议原作者:Moxie Marlinspike原编辑:Trevor Perrin中文版翻译:pior原文版本:Revision 1, 2016-11-04中文译本:V0.1, 2020-04-27目录1 简介 (3)2 预备知识 (3)2.1 X3DH参数 (3)2.2 密码符号 (3)2.3 角色 (4)2.4 密钥 (4)3 X3DH协议 (5)3.1 概述 (5)3.2 发布密钥 (5)3.3 发送初始消息 (6)3.4 接收初始消息 (8)4 安全要素 (8)4.1 身份认证 (8)4.2 协议重放 (9)4.3 重放与密钥重用 (9)4.4 可否认性 (9)4.5 签名 (10)4.6 密钥泄露 (10)4.7 服务器信任 (11)4.8 身份绑定 (11)5 知识产权 (11)6 致谢 (11)7 参考 (12)1简介本文描述了“X3DH”(也称为“扩展的三重Diffie-Hellman”)密钥协商协议。
X3DH协议基于公私钥认证,在通信两方之间建立共享密钥。
X3DH协议提供了转发保密性和加密可否认性。
X3DH协议是为异步通信而设计的,若“Bob”离线,用户“Alice”也可使用“Bob”已向服务器发布的一些信息向其发送加密数据,并为将来的通信建立共享密钥。
2预备知识2.1X3DH参数使用X3DH协议的应用程序必须确定几个参数,见表1:表 1 X3DH参数表名称定义椭圆曲线类型 25519 or X448散列函数 一个256位或512位的散列函数(例如:SHA-256、SHA-512)信息 标识应用程序的ASCII字符串例如,应用程序可以选择椭圆曲线X25519、散列函数SHA-512和信息“MyProtocol”,应用程序还必须定义一个编码函数encode(PK),以便将X25519或X448的公钥PK编码为字符串。
建议的编码函数由一些表示椭圆曲线类型的单字节常量组成,然后是u坐标的小尾数编码[1]。
2.2密码符号本文在描述X3DH协议时,将使用以下符号:●X||Y,表示字符串X和Y的连接。
●DH(PK1,PK2),表示由椭圆曲线Diffie-Hellman函数输出的密钥,参数PK1和PK2表示两个不同密钥对的公钥。
椭圆曲线Diffie-Hellman函数可选X25519或X448函数,具体取决于椭圆曲线参数。
●Sig(PK,M),表示用公钥PK对应的私钥对消息M进行签名,如XEdDSA数字签名机制,可用公钥PK进行签名验证。
XEdDSA的签名和验证功能参见[2]。
●KDF(KM),表示由HKDF算法生成的32字节输出,HKDF算法要求的输入有:-HKDF 输入密钥材料 = F||KM,其中:KM:是包含密钥材料的输入字符串如果椭圆曲线参数是X25519,F是包含32个0xFF字节的字符串;如果椭圆曲线参数是X448,F是包含57个0xFF字节的字符串。
F用于使用XEdDSA进行加密域分离[2]。
-HKDF salt=长度等于散列函数输出长度的零填充字符串。
-HKDF info=来自X3DH参数中的信息。
2.3角色X3DH协议涉及三方:Alice、Bob和Server。
●Alice(发送方):希望加密的向Bob(接收方)发送一些初始数据,并建立可用于双向通信的共享密钥。
●Bob(接收方):希望允许像Alice这样的各个发送方与他建立共享密钥并发送加密数据。
然而,当Alice试图这样做时,Bob可能会离线。
为了实现这一点,可能过某个服务器建立联系。
●Server(服务器):可以存储从Alice到Bob的消息,Bob稍后可以检索这些消息。
服务器还允许Bob发布一些数据,服务器将向Alice这样的各个发送方提供这些数据。
第4.7节讨论了服务器的信任问题。
在某些系统中,服务器角色可能被划分为多个实体,但为了简单起见,我们假设一个服务器为Alice和Bob提供上述功能。
2.4密钥X3DH协议需要使用以下的密钥:表 2 密钥表名称定义IK-A Alice的身份认证密钥(identity key)EK-A Alice的临时密钥(ephemeral key)IK-B Bob的身份认证密钥(identity key)SPK-B Bob的已签名预共享密钥(signed prekey)OPK-B Bob的一次性预共享密钥(one-time prekey)所有公钥都有相应的私钥,但为了简化描述,我们将重点关注公钥。
X3DH协议中使用的公钥必须全部采用同样的格式,根据曲线参数[1]指定。
每一方都有一个长期身份认证公钥(Alice为IK-A,Bob为IK-B)。
Bob有一个已签名预共享密钥SPK-B,Bob将定期更新它。
Bob还有一组(多个)一次性预共享密钥OPK-B,每个都在一个X3DH协议中使用。
译注:预共享密钥,是指它们本质上是Bob与Alice开始协议运行之前发布到服务器的公钥。
在每次协议交互,Alice都会生成一个新的临时密钥对,公钥为EK-A。
完成的协议交互后,Alice和Bob将共享一个32字节的密钥SK。
这个密钥可以在后面的进行业务通信的X3DH后协议中使用,但要遵循第4章中的安全考虑。
3X3DH协议3.1概述X3DH协议过程主要有三个阶段组成:1.Bob将他的预共享密钥发布到服务器。
2.Alice从服务器获取Bob对应的“预共享密钥包”,并使用它向Bob发送一条初始消息。
3.Bob接收并处理Alice的初始消息。
以下各节将解释这些阶段。
3.2发布密钥Bob向服务器发布一组椭圆曲线公钥,其中包含:●Bob的身份认证公钥IK-B●Bob的已签名预共享密钥SPK-B●Bob的预共享密钥签名Sig(IK-B,Encode(SPK-B))●一组Bob的一次性预共享密钥(OPK-B1、OPK-B2、OPK-B3,…)Bob只需要将他的身份认证公钥上载到服务器一次。
但是,Bob可以在其他时间上载新的一次性预共享密钥(例如,当服务器通知Bob服务器的一次性预密钥存储越来越少时)。
Bob还将每隔一段时间(例如,一周一次或一个月一次)上载一个新的已签名预共享密钥SPK和预共享密钥签名。
新的已签名预共享密钥SPK和预共享密钥签名将替换以前的值。
上传一个新的已签名预共享密钥后,Bob可能会将与前一个已签名预共享密钥相对应的私钥保留一段时间,以便使用它处理在传输过程中延迟的消息。
最后,Bob应该删除这个私钥来进行前向保密(当Bob使用这些密钥接收消息时,一次性预共享密钥私钥将被删除;请参阅第3.4节)。
3.3发送初始消息为了与Bob进行X3DH协议,Alice联系服务器并获取包含以下信息的“预共享密钥包”:●Bob的身份认证公钥IK-B●Bob的已签名预共享密钥SPK-B●Bob的预共享密钥签名Sig(IK-B,Encode(SPK-B))●(可选)Bob的一次性预共享密钥(OPK-B)服务器应该提供Bob的一个一次性预密钥(如果存在),然后将其删除。
如果服务器上Bob的所有一次性预共享密钥都已删除,则该“预共享密钥包”将不包含一次性预共享密钥。
Alice对“预共享密钥包”验证预共享密钥签名,如果验证失败,则中止协议。
Alice生成一个临时密钥对,公钥为EK-A。
如果“预共享密钥包”不包含一次性预共享密钥,Alice进行以下计算: DH1 = DH(IK-A,SPK-B)DH2 = DH(EK-A,IK-B)DH3 = DH(EK-A,SPK-B)SK = KDF(DH1 || DH2 || DH3)如果“预共享密钥包”包含一次性预共享密钥,计算过程添加以下DH算法,并修改SK的计算:DH4 = DH(EK-A,OPK-B)SK = KDF(DH1 || DH2 || DH3 || DH4)下图显示了密钥之间的DH计算。
注意:DH1和DH2提供相互认证,而DH3和DH4提供前向保密。
图 1 DH1…DH4在计算SK之后,Alice删除临时密钥对的私钥和DH计算的中间输出值。
然后,Alice计算包含双方身份信息的“关联数据”对应的AD字符串:AD = Encode(IK-A) || Encode(IK-B)译注:Encode为章节2.1中所说明的参数。
计算AD时,Alice可以选择性地添加其他附加信息,例如Alice和Bob的用户名、证书或其他标识信息。
然后,Alice向Bob发送一条初始消息,其中包含:●Alice的身份认证公钥IK-A●Alice的临时密钥EK-A●说明使用哪个OPK-B的标识符●初始密文,用AEAD加密方案[4]进行加密,使用“关联数据”AD作为相关数据,并使用一个加密密钥,该密钥可以是SK,也可以是由SK加密的PRF的输出初始密文通常是X3DH协商后的X3DH后协议中的第一条消息。
换句话说,这个密文通常有两个角色,在一些X3DH后协议中作为第一个消息服务,并且作为Alice的X3DH初始消息的一部分。
在发送之后,Alice主可以继续在X3DH后协议中使用SK或从SK派生的密钥来与Bob通信,但要符合第4节中的安全考虑。
3.4接收初始消息Bob在收到Alice的初始消息后,从消息中检索Alice的身份认证公钥IK-A和临时密钥EK-A。
并加载他自己的身份认证公钥IK-B对应私钥,以及Alice 所用的SPK-B和OPK-B(如果有的话)相对应的私钥。
使用这些键,Bob重复上一节中的DH和KDF计算以派生SK,然后删除DH 计算的值。
用前一节所述的方法,Bob使用IK-A和IK-B构造AD字符串。
最后,Bob 尝试使用SK和AD解密初始密文。
如果初始密文未能解密,则Bob中止协议并删除SK。
如果初始密文解密成功,则Bob的协议已完成。
Bob将删除用于前向保密的一次性预共享密钥OPK-B的私钥。
然后,Bob可以继续使用SK或派生自SK 的密钥来与Alice进行X3DH后协议,但需遵循第4节中的安全考虑。
4安全要素4.1身份认证在X3DH密钥协议之前或之后,双方可以通过某种经过身份验证的通道验证其身份认证公钥IK-A和IK-B。
例如,他们可以手动或通过面对面扫描二维码来验证公钥。
具体方法不在本文档的范围内。
如果不执行公钥的身份验证,则双方通信将无法得到安全保证。
译注:通过第三方可信CA的数字证书,也可以实现身份验证。
4.2协议重放如果Alice的“初始消息”没有使用一次性预共享密钥OPK,那么它可能会被人截获并重放到Bob,并且Bob会接受它。
这可能会使Bob认为Alice反复给他发了同样的信息。
为了减轻这种情况,X3DH后协议可以据Bob新生成的随机输入与Alice快速协商新的加密密钥。