零知识证明-公钥分发方案DH((六)

news2024/9/22 7:23:50

前言
椭圆曲线配对,是各种加密构造方法(包括 确定性阀值签名、zk-SNARKs以及相似的零知识证明)的关键元素之一。椭圆曲线配对(也叫“双线性映射”)有了30年的应用历史,然而最近这些年才把它应用在密码学领域。配对带来了一种“加密乘法”的形式,这很大的拓展了椭圆曲线协议的应用范围。本文的目的是详细介绍椭圆曲线配对,并大致解释它的内部原理
先了解DH 协议
Diffie-Hellman协议
简称DH,是一种公钥分发方案,该协议允许双方通过交换窃听者可见的信息来建立共享秘密。

1:DH
Diffie-Hellman 算法是第一个公开密钥算法,早在 1976 年就发明了。其安全性源于在有限域上计算离散对数比计算指数更为困难。Diffie-Hellman 算法能够用于密钥分配 (A 和 B 能用它产生秘密密钥),但是它不能用于加密或解密消息。

数学原理很简单。首先,A 和 B 协商一个大的素数n 和g , g是模 n 的本原元。这两个整数不必是秘密的,故 A 和 B 可以通过即使是不安全的途径协商它们。它们可在一组用户中公用。

原根(也是循环群的生成元)(primitive root)的概念和性质
如果 a与 m互质,那么我们把满足 ak ≡ 1 mod m 的最小正整数 k 称为 a的模 m 的阶
由欧拉定理 aΦ(m) ≡ 1 mod m, a的模 m的阶一定是Φ(m)的因数
阶刚好等于Φ(m)的余数(同余类) 称为 模m的原根(注意1只是模2的原根,其他不是)

给定一个正整数n,如果存在一个正整数k,使得k的某个幂对n取模的结果依次不为0,并且最终结果循环出现所有取值为1,2,…,n-1,则称k为模n的原根。

n=3 简化剩余系(1,2)Φ(n) =2 阶为2 ,2 是模3的原根 k=2
20 %3 =1 21 %3 =2 22 %3 =1 23 %3 =2 24 %3 =1 25 %3 =2
n=5 简化剩余系{1,2,3,4} Φ(n) =2 阶为4
20 %5= 1 -> 简写 (0,1) (1,2) (2,4) (3,3) (4,1) (5,2) (6,4)(7,3) 重复 1,2,4,3 这样重复
30%5=1 -> 简写 (0,1) (1,3) (2,4) (3,2) (4,1) (5,3) (6,4)(7,2) 重复 1,3,4,2 这样重复

欧拉函数 对于任何一个正整数 n,定义 Φ(n) 为不超过 n 的与 n互质的正整数个数
模m原根存在的条件是 m=1,2,4,pa,2pa,其中 p为奇素数, a >=1
S是模 n的简化剩余系,是指 S是由 φ(n)个数组成的集合,其中集合中的数都与 n互质且两两模 n不同余(就是余数不重复)
eg: m=2 简化剩余系(1) Φ(n) =1 阶为1 ,1 是模2的原根
m=3 简化剩余系(1,2)Φ(n) =2 阶为2 ,2 是模3的原根 22 %3 =1
m=4 简化剩余系(1,3)Φ(n) =2 阶为2,3 是模4的原根 32 %4 =1
m=6 简化剩余系(1,5)Φ(n) =2 阶为2,5 是模6的原根 52 %6 =1
m=5 简化剩余系{1,2,3,4} Φ(n) =2 阶为4, 24 % 5 = 1 34 %5 =1 42%5=1
阶为4 ,所以 4不是原根,2 ,3 都是原根
总结 可逆元Φ(n) mod m == 1 , 可逆元 是 模 m 的原根(注意1只是模2的原根,其他不是)
协议如下:
g n 是公开的 n 为大素数 g是n的原根
A 选取一个大的随机整数ra ,并发送给 B ; X=gra mod n
B 选取一个大的随机整数rb,并发送给 A Y=grb mod n
A 计算 S=Yra mod n
B计算 S=Xrb mod n
S 应该等于 gra*rb mod n
S 作为计算出的共享密钥,可用于对称加密
即使线路上的窃听者也不可能计算出这个值,他们只知道 n,g,X,Y 除非他们计算离散对数,恢复 ra,rb,否则无济于事。因此 S 是 A 和 B 独立计算的秘密密钥。

g和n 的选取对系统的安全性有很大的影响。(n-1)/2 也应该是一个素数。最重要的是 n应该很大:因为系统的安全性取决于与 n同样长度的数的因子分解的难度。可以选择任何满足模n 的原根g ,没有理由不选择所能选择的最小g —— 通常只是个 1 位数 (实际上 g不必是素数,但它必须能产生一个大的模n 的乘法组子群)
eg: g=6 n=11 (g是n的原根) 11的原根有(2,6,7,8) 这里选择6
A 私钥ra =7 公开密钥 X= gra mod n = 67 = 279936 %11= 8
B 私钥rrb = 12 公开密钥 Y = grb mod n = 612 = 2176782336 %11 = 3

A 计算 共享密钥 S = Yra mod n = 37 % 11 = 2187 %11 = 9
B 计算 共享密钥 S= Xrb mod n = 812%11 = 68719476736%11 = 9

gra*rb mod n = 6 7*12 = 684 %11 = 9 == S
在这里插入图片描述

package main

import (
	"fmt"
	"github.com/ethereum/go-ethereum/common/math"
	"math/big"
)

func main()  {
	valuea ,power,mod := 0,0,0
	//89 ^2011 %3127
	for ;; {

		fmt.Printf("please input value1, power and mod:")
		if _,err := fmt.Scan(&valuea,&power,&mod);err !=nil{
			fmt.Printf("input error")
			break

		}
		a := int64(valuea)
		b := int64(power)
		big1 := math.BigPow(a,b)
		m := big.NewInt(int64(mod))
	//	z := big.NewInt(0)
		big2 := m.Mod(big1,m)

		fmt.Printf("(%v ^ %v)mod %v = %v (%v)\n",valuea,power,mod,big2,big1)
	}

	fmt.Printf("ready exit \n")
}

2:三方或多方 Diffie-Hellman
以三方为例
g n 公开
1> A 私钥 选择大随机数 ra 把 X = gra mod n 发送给 B
2> B 私钥 选择大随机数 rb 把 Y = grb mod n 发送给 C
3> C 私钥 选择大随机数 rc 把 Z = grc mod n 发送给 A
4> A 把 Z1 = Zra mod n 发送给 B ,( Z 为 C 发送给A的)
5> B 把 X1 = Xrb mod n 发送给 C (X 为 A 发送给B的)
6> C 把 Y1 = Yrc mod n 发送给 A (Y 为 B发送给C的)
7> A 计算共享密钥 S = (Y1)ra mod n
8> B 计算共享密钥 S = (Z1)rb mod n
9>C 计算共享密钥 S = (x1)rc mod n

S == gra*rb*rc mod n
eg: g=8 n=11 (g是n的原根) 11的原根有(2,6,7,8) 这里选择6
1> A 私钥 ra = 13 X= gra mod n = 813 mod 11 = 549755813888 %11 = 6
2>B 私钥 rb = 16 Y= grb mod n = 816 mod 11 = 281474976710656 %11 = 3
3>C 私钥 rc = 27 Z= grc mod n = 827 mod 11 = 2417851639229258349412352%11 = 2
4>A Z1 = Zra mod n = 213 %11 = 8192%11 =8
5>B X1 = Xrb mod n = 616 %11 = 2821109907456%11 = 5
6>C Y1 = Yrc mod n = 327 %11 = 7625597484987%11 = 9

7> A S= Y1ra mod n = 913 % 11 = 2541865828329 %11 = 3 //跟B 给C的Y 相等, 因为n太小,碰撞到一起了
8> B S= Z1rb mod n = 816 % 11 = 281474976710656%11 = 3
8> C S= X1rc mod n = 527 % 11 = 7450580596923828125%11 = 3

gra*rb*rc mod n = 813*16*27 % 11 = 85616 % 11 = 3
85616= 用上面的程序计算 =
(56671792158458189462788480435325250053000506492933346240406207383911706480845603129490692058630716611中间省略69124622157307694933662452678656)

DH 需要防止中间人攻击

如果觉得有用,麻烦点个赞,加个收藏

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VLAN原理和配置

VLAN技术可以将一个物理局域网在逻辑上划分成多个广播域,也就是多个VLAN。VLAN技术部署在数据链路层,用于隔离二层流量。同一个VLAN内的主机共享同一个广播域,它们之间可以直接进行二层通信。 VLAN标签长4个字节,直接添加在以太网…

轻松享受远程办公:可道云teamOS,让自由与效率同行

职场生活中,我们常常会因为工作需要而面临出差的情况。在这种情况下,如何能与不在身边的公司同事组员,保持高效协作,就显得尤为重要了。 移动办公新体验 记得有一次,我正在外地参加一个重要的商务会议,突…

佰朔资本:8.87亿人次!全国铁路 暑运发送旅客创历史同期新高

记者1日从我国国家铁路集团有限公司得悉,8月31日,为期62天的铁路暑运圆满结束。7月1日至8月31日,全国铁路累计发送旅客8.87亿人次,同比增长6.7%,日均发送旅客1431.2万人次,创暑运旅客发送量前史新高&#x…

如何恢复图库里的照片?照片恢复有道,最后一招更有效!

在今天,手机里的照片不仅是记忆的载体,更是我们情感的寄托。然而,当我们在查看照片时不小心删除或丢失重要照片的情况时有发生,这可能会让我们感到后悔和焦虑。我们也会想:如何恢复图库里的照片呢?失去的照…

Upscayl 采用开源人工智能技术,可以增强低分辨率图像的效果。

Upscayl 是一款免费开源的基于 AI 神经网络与深度学习的「图片画质提升 / 超分辨率软件」,可以做到“无损放大图片”,让你轻松将任意分辨率的图片、照片、壁纸放大到高清、超清甚至 4K 水平,大幅提升图片细节表现与清晰度!效果比起…

谷粒商城实战笔记-问题记录-Feign异步调用丢失请求头问题

文章目录 单线程下生效的原理多线程下Interceptor不生效的原因解决方案1,不优雅的方法2,优雅的方法 在请求多个信息时,我们使用了多线程,这就带来了一个问题,前面我们解决Feign丢失请求头的方案在多线程下,…

笔记本连wifi蓝屏问题修复

最近笔记win11专业版本连wifi时总是蓝屏重启,各种杀毒软件升级补丁都无效,最后升级了网卡驱动,就正常了 下载链接: 23.40.0.4无线网卡驱动 下载后直接运行,运行后网卡驱动版本变成 23.40.0.4 就好了!&am…

Spring理论知识(Ⅲ)——Spring面向切面编程

Spring的组成 Spring由20个核心依赖组成,这20个核心依赖可以分为6个核心模块 本文主要讲解spring的AOP模块,其中包括spring-aop,spring-aspects Spring AOP模块概述 AOP思想 Spring AOP全面详解(超级详细) AOP 是一种编程思想&…

华为云低代码AstroZero技巧教学3:智能计算商品费用,轻松实现高效数据处理

公司经营过程中,多个场景会涉及到计算商品花费。以企业内部行政采购为例,在统计相关采购清单中,会涉及到诸多数据统计及计算。如采购商品种类、数量、单价以及其他附加成本(运输费用,装卸费用,包装费用&…

网络安全ctf比赛/学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐收藏!

前言 对于想学习或者参加CTF比赛的朋友来说,CTF工具、练习靶场必不可少,今天给大家分享自己收藏的CTF资源,希望能对各位有所帮助。 CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站,内容齐全,收藏备用。…

第11章 第9节 基于软件质量特性的测试(软件评测师)

1.以下关于软件质量特性测试的叙述,正确的是() 1.成熟性测试是检验软件系统故障,或违反指定接口的情况下维持规定的性能水平有关的测试工作 (,成熟性测试是检验软件产品是否具备为避免由软件中错误而导致…

平价蓝牙耳机哪个音质好性价比高?四大超值平价机型推荐

在当今市场上,蓝牙耳机的选择众多,从高端品牌到平价型号,消费者面对的选择可谓是五花八门,并非每个人都愿意或能够负担得起昂贵的价格以获取顶级音质,所以平价蓝牙耳机哪个音质好性价比高?对于那些寻求性价…

springboot党员之家服务系统小程序论文源码调试讲解

第二章技术介绍 2.1B/S结构 随着软件系统的不断改进和升级,B/S结构产品更为方便的特征体现地十分明显。对于一个中等偏大的公司来说,如果系统管理员每天要在很多台电脑之间来回查看,不断奔走,那么效率和工作量就会变得很低&#…

服务器数据恢复—如何应对双循环RAID5阵列的数据丢失问题?

服务器存储数据恢复环境: 一台存储中有一组由7块硬盘组建的RAID5阵列,存储中还有另外3块盘是raid中掉线的硬盘(硬盘掉线了,管理员只是添加一块的新的硬盘做rebuild,并没有将掉线的硬盘拔掉)。整个RAID5阵列…

大模型全攻略:数据准备、模型微调到部署,一文全解析!

0. 引言 距离ChatGPT已经发布1年半了,距离我们训练出自己的大模型也已经1周年了。目前仍然有很多同学在咨询如何训练自己的大模型。这个东西和男/女朋友一样。当你不认识TA,距离TA很远,不敢接触TA的时候,TA就是很神秘&#xff0c…

基础闯关4

环境配置 我们来配置LlamaIndex实验环境,首先创建Python环境并安装必要的库: conda create -n llamaindex python3.10 conda activate llamaindex conda install pytorch2.0.1 torchvision0.15.2 torchaudio2.0.2 pytorch-cuda11.7 -c pytorch -c nvid…

通配符SSL证书自动续签自动部署方案

支持一对一答疑的购买网址 最开始接触 https 的时候一直是使用的 阿里云和腾讯云的免费 SSL证书,免费的SSL证书用了几年后,慢慢的部署https证书的项目越来越多,时间久了发现每个网站都需要一个 SSL证书,每个SSL证书都需要单独申请…

Unity 性能优化工具收集

本文地址:https://blog.csdn.net/t163361/article/details/141809415 Unity原始工具 UPR 官方 UPR UPR桌面端解决方案,减轻测试设备性能压力,使测试过程更加顺畅。提供CLI用于自动化测试系统对接。 PerformanceBenchmarkReporter Unity 性…

电动汽车行业智能充电桩语音提示IC方案

随着电动车市场的日益壮大,共享汽车也纷纷采用电动车这类新能源,预示着充电桩市场将迎来巨大的发展潜力。智能充电桩,其功能与加油站的加油机颇为相似,可灵活安装于公共建筑如商场、停车场以及居民小区内,为用户提供便…

IP SSL证书——为IP升级加密

在数字化浪潮中,每一份数据传输都承载着重要信息与价值。当您的业务跨越国界,触及全球用户时,确保通信安全、提升品牌信任度,成为了不可或缺的一环。IP SSL证书,作为网络安全的守护者,正以其独特的优势&…