EIGamal数字签名的实现(c++)——大三密码学实验

2023-11-15

实验原理:

1.密钥产生:Alice要对一个消息签名。她选择一个大素数p和一个本原根g。选择一个秘密整数1\leq x\leq p-2,并且计算y=g^{x}(mod p),(p,g,y)公开。x秘密保存。【注:EIGamal签名方案的安全性在于x的保密性。由于离散对数学问题难解,很难由(p,g,y)确定x.】

2.数字签名:Alice签署消息m.

  1. 选择一个安全的随机数k,使得gcd(k,p-1)=1;
  2. 计算r\equiv g^{k}(mod p);
  3. 计算s\equiv k^{-1}(m-x*r)(mod p-1);
  4. Alice签署的消息是三元组(m,r,s);

3.验证:Bob确认签名

  1. 下载Alice的公钥(p,g,y);
  2. 计算v1\equiv y^{r}r^{s}(mod p)和v2\equiv g ^{m}(mod p);
  3. 当且仅当v1\equivv2(mod p)时,签名是有效的。

实验内容:

1.mod函数的构造

int mod(int a,int b){
	int ans;
	while(a<0){
		a=a+b; 
	}
	ans=a%b;
	return ans;
}

虽然%能表示取与,但是当a为负数时,%就不能再适用

为此我们需要构建一个既可以处理正数也可以处理负数的mod函数

对于负数,我们需要把它变成正数,需要加模数,即a+n*b,直到a为正数,这样它就可以使用%来求得余数

2.tongyu函数的构造

int tongyu(int a,int m,int n){//递归原理 
	long long int temp=a%n,ans;
	if(m==1){
		ans=temp;
	}
	else if(m>=2){
		ans=mod((temp*tongyu(a,m-1,n)),n);
	}
	return ans;
}

即求a^{m}mod n

原理是(a*b)mod c=((a mod c)*(b mod c))mod c

3.f_mod函数的构造

int f_mod(int k,int p){
	int ans;
	for(int i=1;;i++){
		ans=mod(i*k-1,p);
		if(ans==0){
			return i;
			break;
		}
	}
}

这个函数用来求分数,1/k这种形式的分数对p的余数

n\equiv \frac{1}{k} mod p转化为n*k\equiv 1mod p,然后通过for循环找到合适的n

4.gcd函数的构造

int gcd(int k,int p){
	int temp;
	if(k<p){
		temp=k;
		k=p;
		p=temp;
	}
	while(p!=0){
		temp=p;
		p=mod(k,p);
		k=temp;
	}
	return k;
}

gcd函数是用来计算k和p之间的最大公约数

利用辗转相除法,gcd(k,p)=gcd(p,k%p)。

5.suiji函数的构造

int suiji(int p){
	int k,k1,p1;
	k=2+rand()%(1000);
	k1=k;
	p1=p;
	if(gcd(k1,p1)==1){
		return k;
	}
	else{
		suiji(p);
	}
}

生成随机数k,如果与p的最大公约数为1,就返回,否则继续生成k,直到可以返回

6.主函数


int main(){
	int p,g,x,y,m,k,r,s,v1,v2,temp1,temp2,flag;
	cout<<"请输入大素数p:";
	cin>>p;
	cout<<"请输入本原根g:";
	cin>>g;
	cout<<"请输入秘密整数x(1——"<<p-2<<"):";
	cin>>x;
	cout<<"请输入消息m:";
	cin>>m;
	y=tongyu(g,x,p);
	k=suiji(p-1);
	r=tongyu(g,k,p);
	temp1=f_mod(k,p-1);
	s=mod((mod(m-x*r,p-1)*mod(temp1,p-1)),p-1);
	temp1=tongyu(y,r,p);
	temp2=tongyu(r,s,p);
	v1=mod((mod(temp1,p)*mod(temp2,p)),p);
	v2=tongyu(g,m,p); 
	flag=mod(v1-v2,p);
	if(flag==0){
		cout<<"签名有效";
	}
	else{
		cout<<"无效";
	}
}

flag是判断是否v1\equivv2(mod p)。

7.总代码

#include<iostream>
#include<math.h>
#include<time.h>
#include<stdlib.h>
using namespace std;
int mod(int a,int b){
	int ans;
	while(a<0){
		a=a+b; 
	}
	ans=a%b;
	return ans;
}
int tongyu(int a,int m,int n){//递归原理 
	long long int temp=a%n,ans;
	if(m==1){
		ans=temp;
	}
	else if(m>=2){
		ans=mod((temp*tongyu(a,m-1,n)),n);
	}
	return ans;
}
int f_mod(int k,int p){
	int ans;
	for(int i=1;;i++){
		ans=mod(i*k-1,p);
		if(ans==0){
			return i;
			break;
		}
	}
}

int gcd(int k,int p){
	int temp;
	if(k<p){
		temp=k;
		k=p;
		p=temp;
	}
	while(p!=0){
		temp=p;
		p=mod(k,p);
		k=temp;
	}
	return k;
}
int suiji(int p){
	int k,k1,p1;
	k=2+rand()%(1000);
	k=5;
	k1=k;
	p1=p;
	if(gcd(k1,p1)==1){
		return k;
	}
	else{
		suiji(p);
	}
}
int main(){
	int p,g,x,y,m,k,r,s,v1,v2,temp1,temp2,flag;
	cout<<"请输入大素数p:";
	cin>>p;
	cout<<"请输入本原根g:";
	cin>>g;
	cout<<"请输入秘密整数x(1——"<<p-2<<"):";
	cin>>x;
	cout<<"请输入消息m:";
	cin>>m;
	y=tongyu(g,x,p);
	k=suiji(p-1);
	r=tongyu(g,k,p);
	temp1=f_mod(k,p-1);
	s=mod((mod(m-x*r,p-1)*mod(temp1,p-1)),p-1);
	temp1=tongyu(y,r,p);
	temp2=tongyu(r,s,p);
	v1=mod((mod(temp1,p)*mod(temp2,p)),p);
	v2=tongyu(g,m,p); 
	flag=mod(v1-v2,p);
	if(flag==0){
		cout<<"签名有效";
	}
	else{
		cout<<"无效";
	}
}

 8.输出结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EIGamal数字签名的实现(c++)——大三密码学实验 的相关文章

  • 密码编码学与网络安全(2):对称密码之传统加密技术

    对称密码之传统加密技术 关于对称加密 对称密码模型 密码编码学 密码分析学与穷举攻击 古典加密算法 代替技术 置换技术 转轮机 隐写术 关于对称加密 对称加密 也称为传统加密或单密钥加密 是20世纪70年代公钥密码产生之前唯一的 加密类型
  • CTF加密解密—CRYPTO—密码学签到

    0x00 考察知识点 考虑字符串倒序的问题 0x01 题目 密文是 wohs ftc galf 0x02 Write Up 直接进行字符串倒序即可 签到题 简单点是肯定的啦
  • 格密码学习,抽代基础学习(二)

    今天找到了一个比较新手友好的slides 结合lec1和学姐的笔记一起看 full rank lattice 满格 R n mathbb R n Rn的概念 n维度实数集 每个元素是n维向量 向量中的每个分量是实数 Z
  • S-DES的简单理解和实例

    S DES是一个供教学而非安全使用的加密算法 与DES的特性和结构类似 但它参数小 明文分组为8位 主密钥分组为10位 采用两轮选代 例题 采用手工方式使用 S DES用密钥 01111 11101 解密比特串 1010 0010 写出每个
  • RSA加密算法Python实现

    RSA加密算法Python实现 1 RSA算法简介 2 RSA算法涉及的数学知识 2 1互素 2 2 欧拉定理 2 3求模逆元 2 4 取模运算 2 5 最大公因数 2 6 最小公倍数 2 7 欧几里得算法 2 8 扩展欧几里得算法 3 R
  • 【BingGPT对话记录】基于格的密码学简介

    格密码学是一种基于格 lattice 的数学结构的密码学分支 它具有抵抗量子计算攻击的特性 格是一个由线性无关向量生成的离散点集 可以用来描述许多复杂的几何和代数问题 格密码学的安全性通常建立在最坏情况下的难度假设上 即即使给定最优化算法
  • 信息安全密码学:DES算法的核心 E盒、S盒、P盒

    加密密钥等于脱密密钥 或者由一个可以轻易的计算出另一个的密码体制 称为单密钥密码体制 亦或称为对称密码体制或传统密码体制 其最具代表意义的当然属于DES密码体制了 1 DES的设计背景 1973年5月 NBS 美国国家标准局 发布通告 征集
  • 斯坦福密码学课程-笔记-02-Stream Ciphers流密码

    斯坦福密码学课程笔记 02 流密码 Stream Ciphers The One Time Pad Symmetric Ciphers definition The One Time Pad Vernam 1917 Information
  • 【区块链与密码学】第6-9讲:数字签名算法的可证明安全性

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 6 9数字签名算法的可证明安全性 可
  • 密码学——1.密码学概论

    1 基本术语 1 1 密码使用学 ceyptography vs 密码编码学 crypyology 密码使用学是一种为了达到隐藏消息含义而使用秘文写的一门科学 密码分析学是一门研究在不知道通常解密所需要的秘密信息的情况下对加密的信息进行解
  • 常见加密算法实现——DES、AES、RSA、MD5

    一 对称加密 1 介绍 对称加密 加密和解密使用同一个密钥 对称加密算法 DES 3DES AES等 DES 数据加密标准 是一种使用密钥加密的块算法 3DES DES向AES过渡的加密算法 AES 高级加密标准 替代DES 对称加密的特点
  • AES加密算法详解(图文解释)

    由于DES加密算法被破解了 3DES加密算法虽然没有被破解 但是3DES算法的加解密效率低 所有现在都使用AES算法 AES加密算法是密码学中的高级加密标准 AES为分组加密法 把明文分成一组一组的 每组长度相等 每次加密一组数据 直到加密
  • cryptographic primitives(密码学原语 )

    hash commitment Pedersen承诺
  • 6、RC4算法

    参考 https blog csdn net huangyimo article details 82970903 RC4算法 RC4算法变量 RC4算法流程 RC4算法相关 RC4算法 RC4加密算法是Ron Rivest在1987年设计
  • [Cryptography]1.对称密钥和非对称密钥 2.计算modulo inverse 3.计算possible key

    对称密钥和非对称密钥 对称密钥顾名思义就是两个end users使用同一个key Secret Key来进行加密解密 最大的问题就是如何安全的传输SK给另一方 非对称密钥就是说每个人都拥有一个public key和一个private key
  • Shamir门限方案的秘钥分享(包括逆元求解)

    Shamir门限方案的秘钥分享 不要求支持大数 题目描述 实验目的 通过基于Shamir门限方案的密钥分割及恢复的演示 理解密钥分割的重要性 理解密钥分割的基本原理和作用 掌握基于Shamir门限方案的密钥分割软件的使用 实验原理 秘密共享
  • 【密码学】古代、古典密码

    古代密码 数据的保密基于加密算法的保密 Scytale密码 使用一条纸袋作为载体 环绕在一根固定半径的圆柱上 加密 在绕好的纸带上写上明文 解开缠绕后 就是加密好的 无序的密文 圆柱的半径就是密钥 解密 找到相同大小的圆柱 将纸带缠绕在援助
  • CTF BugKu平台——Crypto篇刷题记录(后续更新)

    CTF BugKu平台 Crypto篇 前言 抄错的字符 聪明的小羊 ok lt gt 把猪困在猪圈里 你喜欢下棋吗 小山丘的秘密 EN 气泡 你以为是md5吗 Math English easy crypto 黄道十二官 一段新闻 7 1
  • CISSP一次通过指南(文末附福利)

    2017年12月19日 在上海黄浦区汉口路亚洲大厦17层通过了CISSP认证考试 拖拉了一年 终于成绩还算令人满意 为攒人品将自己一年多的复习心得和大家分享 希望能够帮到需要考证的朋友 本文作者 i春秋签约作家 tinyfisher 欢迎与
  • 密码学理论10:密钥管理和公钥革命

    加密密钥分发 对称密码 依赖于秘密密钥的安全分发 需要存储和管理大量密钥 在开放 公共系统中遇到严重问题 部分解决方案 密钥分发中心 KDC 某些服务器 密钥分发中心 KDC 将密钥 提供 给用户 它与每个用户共享一个秘密密钥 长期密钥 并

随机推荐

  • 在jupyter Notebook上绘制动态曲线

    在jupyter Notebook上绘制动态曲线 1 前言 2 实现原理 3 实现源码 1 前言 在上一篇文章中介绍了在如Pycharm VsCode IDEA等 非交互式编程软件中绘制动态曲线的实现原理 那么问题来了 在如jupyter
  • Empowering Language Models with Knowledge Graph Reasoning for Open-Domain Question Answering

    本文是LLM系列文章 针对 Empowering Language Models with Knowledge Graph Reasoning for Open Domain Question Answering 的翻译 用知识图谱推理增强
  • flask入门

    一 falsk简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架 其 WSGI 工具箱采用 Werkzeug 模板引擎则使用 Jinja2 Flask使用 BSD 授权 Flask是一个轻量级的可定制框架 使用Pyth
  • 树莓派4B-使用 RPI.GPIO 模块的脉宽调制(PWM)功能

    脉宽调制 PWM 是指用微处理器的数字输出来对模拟电路进行控制 是一种对模拟信号电平进行数字编码的方法 在树莓派上 可以通过对GPIO的编程来实现PWM 创建一个 PWM 实例 1 p GPIO PWM channel frequency
  • sonar 配置sonarqube分析unity中的C# 代码

    参考文档 使用SonarQube对Unity项目进行代码分析的问题记录 zerozabuu 博客园 一文搞定 SonarQube 接入 C NET 代码质量分析 狂师 博客园 需要分析的代码是unity下的C 代码 配置流程主要参考上面两个
  • React hook 判断语句内不能使用useEffect(乱序问题)

    const Parent gt const count setCount useState 0 如果这样写控制台会报错 原因继续往下看 if count gt 1 useEffect gt console log 大于1
  • win7可关闭服务

    Adaptive brightness 如果你没有使用触摸屏一类的智能调节屏幕亮度的设备 该功能就可以放心禁用 ApplicationLayer Gateway Service 为Internet连接共享提供第三方协议插件的支持 Appli
  • 数码管时钟显示按键控制 fpga实现

    目录 原理 实现 原理 数码管原理 并且该数码管是共阳极 所以段选低电平有效 片选低电平有效 段选共用8个引脚 实现 思路 分三个模块实现 1 按键消抖 按键消抖 2 计数器模块 产生需要的时钟信号数据 3 数码管驱动 将输入的数据转换为段
  • BIG Endian 和 Little Endian(small endian)模式的区别

    BIG Endian 和 Little Endian small endian 模式的区别 谈到字节序的问题 必然牵涉到两大CPU派系 那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU PowerPC系列采用b
  • QT 打开指定目录并选中指定文件

    目录 方法一 使用Qt自带的方法 方法二 使用windows自带工具 有时自动生成文件之后 点击某个按钮我们希望能够自动跳转到文件所在目录 打开之后不依附于运行程序 可能还需要选中该文件 环境 win10 Qt5 9 6 MinGW 方法一
  • 江苏大学计算机学院林琳,计算机学院教师岗副高及以下、其它专技中级及以下人员岗位聘用结果公示...

    副教授五级 6人 按姓名拼音排序 下同 毕建良 李峰 林庆 毛启容 王良民 朱利平 副教授六级 14人 陈伟鹤 韩飞 李莉 李星毅 潘雨青 钱少先 王洪金 熊书明 杨利霞 曾兰玲 赵念强 周从华 朱小龙 邹志文 副教授七级 13人 蔡涛 陈
  • Docker启动一个Centos镜像

    搜索可用的centos的docker镜像 docker search
  • 第三届国际金融科技论坛开幕,神州信息专家参与蓉城“论道”

    10月30日至31日 由西南财经大学 加州大学伯利克分校国际风险数据分析联盟 成都市地方金融监督管理局联合主办的 第三届国际金融科技论坛 SWUFE CDAR 2020 在成都举行 神州信息金融战略本部副总裁潘志江 神州信息金融科技首席风控
  • google 图片下载

    def xia url headers headers user agent Mozilla 5 0 Windows NT 10 0 WOW64 AppleWebKit 537 36 KHTML like Gecko Chrome 78 0
  • Cadence 17.4 使用TIPS: Orcad 输出PDF

    首先File gt Export gt PDF PDF Export 设置页面 其中有4个输出工具供选择 此处我选择第一个Acrobat Distiller 这个是电脑里安装了咱们常用的Adobe Acrobat DC 就会自带的程序 如果
  • 线性分组码最小汉明距离_信息与编码系列(六)线性码~线性代数

    目录 序 线性码的矩阵描述 线性码的等价性 线性码的最小距离 标准数组 Standard Array 校验子解码 Syndrome Decoding 序 这篇文章相当于做一篇 索引 将线性代数的东西和线性码对应起来 方便日后出现问题能够快速
  • jsp调用服务器上的其他程序(C程序)

    String area dz String req getParameter area String id dz String req getParameter id String ip 10 xxx x xx String encodeS
  • SAM-DETR学习笔记Accelerating DETR Convergence via Semantic-Aligned Matching

    Abstract 最近开发的DEtection TRansformer DETR 通过消除一系列手工制作的组件 建立了一个新的对象检测范式 然而 DETR的收敛速度非常慢 这大大增加了培训成本 我们观察到 慢收敛主要归因于在不同特征嵌入空间
  • dropout层

    深度神经网 DNN 中经常会存在一个常见的问题 模型只学会在训练集上分类 过拟合现象 dropout就是为了减少过拟合而研究出的一种方法 一 简介 当训练模型较大 而训练数据很少的话 很容易引起过拟合 一般情况我们会想到用正则化 或者减小网
  • EIGamal数字签名的实现(c++)——大三密码学实验

    实验原理 1 密钥产生 Alice要对一个消息签名 她选择一个大素数p和一个本原根g 选择一个秘密整数 并且计算 p g y 公开 x秘密保存 注 EIGamal签名方案的安全性在于x的保密性 由于离散对数学问题难解 很难由 p g y 确