精华内容
下载资源
问答
  • ElGamal签名算法实现 学校的课程设计作业。 要用的话自取。 不得不说,学校的老师太没有B树了。 验收根本不看你的代码,说你的报告贴那么多代码干嘛,不写汉字领导检查怎么看的懂。 简直无语,呵呵哒。
  • Elgamal签名算法(初始化和签名) Elgamal签名算法(验证) Elgamal签名算法(正确性) Elgamal签名算法(举例) #include <stdlib.h> #include <stdio.h> #include <time.h> #include <math.h>...

    Elgamal签名算法(初始化和签名)

    在这里插入图片描述

    Elgamal签名算法(验证)

    在这里插入图片描述

    Elgamal签名算法(正确性)

    在这里插入图片描述

    Elgamal签名算法(举例)

    在这里插入图片描述

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <math.h>
    int xy[22];
    int myPow(int a, int b, int m) {
            int res = 1;
            a %= m;
            while (b != 0) {
                if ((b & 1) == 1)
                    res = (res * a) % m;
                a = (a * a) % m;
                b >>= 1;
            }
            return res;
        }
    // 判断两个数是否互质
    int isHuZhi(int a, int b) {
        return b == 0 ? a : isHuZhi(b, a % b);
    }
    
    
    int calculate3(int y,int k,int p){
    	printf("...%d %d %d\n",y,k,p);
    	int l=1;
    	for(int i = 0;i<k;i++){
    		l=l*y;
    		l=l%p;
    	}
    	printf("l=%d\n",l);
    	return l;
    }
    // 求 a mod b 的逆元
    void exGcd(int a, int b) {
        if (b == 0) {
            xy[0] = 1;
            xy[1] = 0;
        } else {
            exGcd(b, a % b);
            int x = xy[0];
            xy[0] = xy[1];
            xy[1] = x - (a / b) * xy[1];
        }
    }
    main()
    {
    	int p,q,x,y,k,k1,m,r,a;
    	int k2,ni;
    	int s;
    	printf("请输入大素数 p ");
    	scanf("%d",&p);
    	printf("请输入消息 m  ");
    	scanf("%d",&m);
    	printf("请输入本源元 q ");
    	scanf("%d",&q); 
    	
    	srand(time(NULL)); //随机数种子
    	x=15;//rand()%p-1+2 ;
    	printf("x=%d\n",x);
    	y = myPow(q, x, p); // y是公开密钥
    	printf("公开密钥y=%d\n",y);
    	
    	
    	k =11;//rand()%p-1+1 ;
    	while (isHuZhi(k, p-1) != 1) {
            k =rand()%p-1+1 ;
        }
        printf("k=%d",k);
         // r = g^k mod p
        r = myPow(q, k, p);
        printf("r=%d\n",r);
        printf("若是加密请输入1,签名输入2");
        scanf("%d",&a);
        switch(a){
        	case 1:
    				s=calculate3(y,k,p);
    				if(s < 0) s =(s+(p-1))%(p-1);
    				s=s*m%p;
    				printf("发送密文(%d,%d)\n",r,s);
    				//解密
    				 k2=myPow(r, x, p);
    				 printf("k2=%d\n",k2);
    				 exGcd(r,p);
    				 ni=xy[0];
    				 if(ni<0)ni=ni+p;
    				 printf("ni=%d",ni);
    				 m=myPow(ni,x,p)*s;
    				
    				 printf("m=%d",m%p); 
    				break;
        	case 2: // 计算k^-1 mod p-1
    			    exGcd(k, (p-1));
    				k1 = xy[0];
    			    if(k1 < 0) k1 += (p-1);
    			    printf("k1=%d\n",k1);
    			    // s = k^(-1)*(m-rx)(mod p-1)
    			    s = (k1*(m-r*x))%(p-1); // (m,r,s)为对消息m的数字签名
    			    printf("s=%d\n",s);
    			    // s可能为负值,所以要将其转化为正数,利用a%b=(a%b+b)%b
    			    if(s < 0) s =(s%(p-1)+(p-1))%(p-1);
    			   
    				printf("签名为(%d,%d)",r,s);
    				
    			    if ((myPow(y, r, p) * myPow(r, s, p))%p == myPow(q, m, p)) {
    			        printf("接受签名"); 
    			    } else {
    			        printf("拒绝签名"); 
    			    }
    				
    			
    			    // 计算k^-1 mod p-1
    			    exGcd(k, (p-1));
    				k1 = xy[0];
    			    if(k1 < 0) k1 += (p-1);
    			    printf("k1=%d\n",k1);
    			    // s = k^(-1)*(m-rx)(mod p-1)
    			    s = (k1*(m-r*x))%(p-1); // (m,r,s)为对消息m的数字签名
    			    printf("s=%d\n",s);
    			    // s可能为负值,所以要将其转化为正数,利用a%b=(a%b+b)%b
    			    if(s < 0) s =(s%(p-1)+(p-1))%(p-1);
    			   
    				printf("签名为(%d,%d,%d)",r,s,p);
    				
    			    if ((myPow(y, r, p) * myPow(r, s, p))%p == myPow(q, m, p)) {
    			        printf("接受签名"); 
    			    } else {
    			        printf("拒绝签名"); 
    			    }
    			    break;
    			}
    	
    }
    
    展开全文
  • 注意:只是我的理解,可能有不正确的地方算法ElGamal加密算法是一种非对称加密算法,基于Diffie-Hellman密钥交换算法,由Taher Elgamal在1985年提出。安全ElGamal加密算法能够应用在任意一个循环群(cyclic group)上...

    注意:只是我的理解,可能有不正确的地方算法

    ElGamal加密算法是一种非对称加密算法,基于Diffie-Hellman密钥交换算法,由Taher Elgamal在1985年提出。安全

    ElGamal加密算法能够应用在任意一个循环群(cyclic group)上。在群中有的运算求解很困难,这些运算一般与求解离散对数(Discrete logarithm)相关,求解的困难程度决定了算法的安全性。加密

    群(Group)的定义:spa

    群是数学中的概念。.net

    一些元素组成的集合,若是元素知足如下条件,则把这些元素组成的集合叫作群:blog

    在元素上能够定义一个2元运算,运算知足封闭性、结合律、单位元和逆元。ip

    群的例子:get

    全部整数构成一个群,若是定义的2元运算为整数加法的话。加法能够知足上述条件:数学

    封闭性:a+b以后仍然是整数it

    结合率:(a + b) + c = a +(b + c)

    单位元:0 + a = a + 0 = a,则整数0为加法的单位元

    逆元:a + b = b + a = 0,则整数b叫作整数a的逆元

    因此能够简单的将群理解为一些元素的集合加上一个选定的运算方式。

    循环群的定义:

    循环群中的全部其它元素都是由某个元素g运用不一样次数的选定运算方式计算出来的。

    公钥生成:

    一、选取一个循环群G,且循环群G的阶数为q

    二、选择一个随机数x,1

    三、计算h=g^x

    h和g,G,q就构成公钥

    x是保密的,x与h,g,G,q一块儿构成密钥

    公钥加密:

    一、选取一个随机数y,1

    二、计算c1=g^y

    三、计算s=h^y=(g^x)^y=g^(x*y)

    四、加密数m得c2=m*s

    c一、c2构成加密结果,交给私钥解密

    私钥解密:

    一、经过c1计算获得s=c1^x=(g^y)^x=g^(x*y)

    二、计算c2*(s^-1)=(m*s)*(s^-1),获得原来数m

    注意以上的运算再也不是普通的乘(*)和乘方(^)运算,并且有循环群G对应的运算衍生出来的运算。但这些运算的意义和规律仍是和普通数字运算的规律同样的,因此上面的等式仍然成立。

    由上面看出s的计算过程和Diffie-Hellman密钥交换算法相似。

    在应用中一般使用的循环群G为整数模n乘法群(Multiplicative group of integers modulo n)。

    同余:

    若是整数a、b的对于整数n的模相等即a%n=b%n,则称a和关于模n同余。能够记作:

    a≡b (mod n)

    互质(Coprime integers):

    若是整数a、b的最大公因数为1,则a、b互质。

    整数模n乘法群:由模n的互质同余类组成一个乘法群。

    签名和验证算法,基于整数模n乘法群:

    私钥,公钥生成:

    一、选取一个随机数k,1

    二、计算y=g^x%p

    (g, p, y)为公钥,x为私钥。

    用私钥签名:

    一、选取一个随机数k,1

    二、计算r,r知足:r≡g^k (mod p)

    三、计算s,s知足:s≡(H(m)-xr)*(k^(-1))  (mod p-1)

    m为待签名信息,H(m)为m的哈希(好比sha1)结果。

    (r,s)构成对m的签名

    用公钥验证签名:

    一、验证:0

    二、验证:g^(H(m))≡(y^r)*(r^s) (mod p)

    签名算法正确性证实:

    由签名过程得:H(m) ≡s*k+x*r (mod p-1)

    根据费马小定理:

    g^(H(m))≡g^(x*r)*g^(k*s) (mod p)≡((g^x)^r)*(g^k)^s (mod p) ≡ (y^r)*(r^s) (mod p)

    费马小定理:

    若是p为质数,则任意整数a:

    a^(p-1) ≡1  (mod p)

    即存在整数k使 a^(p-1) = k*p +1

    再广义化一些:

    若是p为质数,且整数m、n知足:m ≡n  (mod p-1),那么对任意整数a:

    a^m ≡ a^n  (mod p)

    若是m=p-1,n=0,那么上市转换为通常形式:a^(p-1)≡1  (mod p)

    参考:

    展开全文
  • 解密时计算 M = b / a^x ( mod p ) ElGamal签名的安全性依赖于乘法群(IFp)* 上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数。因子以抵抗Pohlig & Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA...

    【声明】

    一.本文实用于初学者,目的在于帮助大家熟悉一些系统底层的知识。

    二.本文只是为了让广大网友共同提高一些基础知识,本人决无卖弄之意,只供需要这方面知识的读者阅读,如果你是高手,或者不需要这方面知识,请跳过。

    三.本文是一篇翻译文章,如有雷同,敬请谅解。

    四.本文欢迎传抄转载,但是不要用于任何商业用途。请尊重作者劳动,也欢迎来信交流 fnlq@263.net

    ============================================================ ===========

    【正文】

    ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x < p, 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥是x。g和p可由一组用户共享。ElGamal用于数字签名。被签信息为M,首先选择一个随机数k, k与 p – 1互质,计算

    a = g^k ( mod p )

    再用扩展 Euclidean 算法对下面方程求解b:

    M = xa + kb ( mod p – 1 )

    签名就是( a, b )。随机数k须丢弃。验证时要验证下式:

    y^a * a^b ( mod p ) = g^M ( mod p )

    同时一定要检验是否满足1<= a < p。否则签名容易伪造。ElGamal用于加密。被加密信息为M,首先选择一个随机数k,k与 p – 1互质,计算

    a = g^k ( mod p ),b = y^k M ( mod p )

    ( a, b )为密文,是明文的两倍长。解密时计算

    M = b / a^x ( mod p )

    ElGamal签名的安全性依赖于乘法群(IFp)* 上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数。因子以抵抗Pohlig & Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。D.Bleichenbache“GeneratingElGamal Signatures Without Knowing the Secret Key”中提到了一些攻击方法和对策。ElGamal的一个不足之处是它的密文成倍扩张。

    美国的DSS(Digital Signature Standard)的DSA(Digital Signature Algorithm)算法是经ElGamal算法演变而来。

    展开全文
  • ECDSA在区块链中的应用 比特币交易流程 ELGamal签名算法

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

    在这里插入图片描述

    在这里插入图片描述

    ECDSA在区块链中的应用 比特币交易流程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ELGamal签名算法
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • * 是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。 21 * 简单的说,这是一种更高级的验证方式,用作数字签名。 22 * 不单单只有公钥、私钥,还有数字签名。...
  • 为此,在环签名理论、 Elgamal数字签名算法与PBFT算法的基础上,提出一种基于 Elgamal数字签名算法的环签名改进方案。对环签名算法进行正确性及匿名性分析,运用环签名方案改进PBFT算法的签名及验证过程,使用 ...
  • Elgamal 加密算法

    千次阅读 2020-03-17 23:36:02
    ElGamal算法是由Tather ElGamal在1985年提出的,它是一种基于离散对数难题的加密体系,与RAS算法一样,既能用于数据加密,也能用于数字签名ElGamal算法是基于因数分解,而ElGamal算法是基于离散对数问题。与RSA...
  • 比较典型的数字签名方案有:· RSA签名算法(R. L. Rivest, A.... Adleman, 1978)· ElGamal 签名算法(T. ElGamal, 1985)· Schnorr签名算法(C. P. Schnorr, 1989)· DSS签名算法(NIST, 1991)基于RSA...
  • ElGamal公钥密码算法ElGamal数字签名方案实现

    万次阅读 多人点赞 2018-03-30 15:41:58
    ElGamal公钥密码算法是在密码协议中有着重要应用的一类公钥密码算法,其安全性是基于有限域上离散对数学问题的难解性。它至今仍是一个安全性良好的公钥密码算法。它既可用于加密又可用于数字签名的公钥密码体制。 ...
  • ElGamal算法是由Tather ElGamal在1985年提出的,它是一种基于离散对数难题的加密体系,与RAS算法一样,既能用于数据加密,也能用于数字签名ElGamal算法是基于因数分解,而ElGamal算法是基于离散对数问题。与RSA...
  • 数字签名中的elgamal算法

    热门讨论 2011-05-09 18:28:55
    本压缩包中是用C编写的ELGAMAL加密算法
  • Java实现ElGamal算法签名

    千次阅读 2018-06-20 23:09:10
    Elgamal.java package elgamal; import java.math.BigInteger; import java.lang.Math; import java.util.Random; import java.io.*; public class ElGamal { private static final BigIn...
  • Python实现ElGamal加密算法

    千次阅读 2020-06-17 14:44:46
    使用Python实现ElGamal加密算法,完成加密解密过程,明文使用的是125位数字(1000比特)。 代码如下: import random from math import pow a = random.randint(2, 10) #产生小于p的随机常数a def gcd(a, b): if...
  • 数字签名的必要性 消息认证能够使通信双方对接收到的信息来源及完整性进行验证,防止第三方的攻击,然而却不能防止通信双方中的一方对另一方的欺诈。 这种欺诈有多种形式,例如通信双方(发送方A、接收方B)利用双方...
  • c语言代码,自己写不出这么长的代码,手里有资源的可以发给我一下吗
  • 【实验名称】数字签名ElGamal签名方案 【实验目的】 1、了解数字签名的过程,包括签名过程和认证过程; 2、掌握ElGamal签名方案。 【实验原理】 ElGamal公钥密码算法是在密码协议中有着重要应用的一类公钥...
  • ElGamal算法1. 算法概述模型分析 1. 算法概述 ElGamal算法和ECC算法基于离散对数问题建立...著名的美国数字签名标准(Digital Signature Standard, DSS)就是采用ElGamal签名方案的一种变形——DSA(Digital Signature
  • [签名算法]DSA 算法

    2020-07-05 16:37:44
    DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。 DSA是基于整数有限域离散对数难题的。 DSA是一种更高级的验证方式。一般用于数字签名和认证...
  • 签名算法正确性证明: 由签名过程得:H(m) ≡s*k+x*r (mod p-1) 根据费马小定理: g^(H(m))≡g^(x*r)*g^(k*s) (mod p)≡((g^x)^r)*(g^k)^s (mod p) ≡ (y^r)*(r^s) (mod p) 费马小定理: 如果p为质数...
  • 重点:ElGamal既能够加密,也能够用来签名。两者虽然过程很像,但并不是同一件事。例如: https://blog.csdn.net/boksic/article/details/7014386 这个展示了很多原理,也介绍了加密与解密过程的实现,算是比较...
  • ElGamal算法

    千次阅读 2014-10-29 17:16:17
    ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x , 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥...
  • Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。(文尾梳理了对不同消息M,重用k时候带来的威胁..)算法描述:参数: 全局公钥为 {p, q, g, y} :p ...
  • DSA签名算法简介

    千次阅读 2019-04-09 20:48:43
    DSA算法是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(Digital Signature Standard)。DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份,也可用于由第三方去确定签名和所签数据的真实性。 ...
  • 数字签名是公钥密码学发展过程中最重要的概念之一,产生和使用数字签名过程的一般模型如图所示 消息认证可以保护消息交换双方不受第三方的攻击,但是不能...必须能验证签名者、签名日期和时间 必须能认证被签的消息

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,621
精华内容 1,048
关键字:

elgamal签名算法