0
%%%CODE:

clc;

disp('Implementation of ELGAMAL Digital Signature');

clear all; 
close all;

%%Hardcoded values (vpi stands for VariablePrecisionIntegers, and are used to store large values)
g = vpi(5)  %alpha in example
k = vpi(9)  %Random number 1<k<p-1 and gcd(k, p − 1) = 1.
p = vpi(23) %Prime Number
x = vpi(3)  %Secret Key 1 < x < p − 1
m = vpi(7)  %Message

y = vpi(2)
r = vpi(2)
s = vpi(2)

%%Key Generation
y = powermod(g,x,p)     %y = g^x mod p  


%%Signature Generation
r = powermod(g,k,p)     %r = g^k mod p

multinver = mulinv(9,23)    %Generates multiplicative inverse k^-1 mod p

s = mod(((multinver)*(m-x*r)),p-1)      %s = (k^-1)*(m-x*r) mod p-1


%%Verification
zvg = vpi(2);
zvg = powermod (g,m,p)      %zvg = g^m mod p

zvyr = vpi(2);
zvyr = mod(((y^r)*(r^s)),p) %zvyr = y^r * r^s mod p

输出:

Implementation of ELGAMAL Digital Signature  
g = 5  
k = 9  
p = 23  
x = 3  
m = 7  
y = 2  
r = 2  
s = 2  
y = 10  
r = 11  
multinver =   18  
s = 16  
zvg = 17  
zvyr = 5  

zvg应该等于zvyr,但结果是错误的。

4

1 回答 1

0

您正在计算 multinver 错误

它应该是

multinver = mulinv(k,p-1)    %Generates multiplicative inverse k^-1 mod (p-1)

请注意,我们计算的是逆模 (p-1) 而不是模 (p)。

于 2015-03-02T13:11:11.427 回答