当前位置: 首页 > 知识库问答 >
问题:

模算法与半elgamal加密

宰父君昊
2023-03-14

我正在实现一个已经在PVSS中使用的半ELGamal密码系统(来自一篇研究论文)函数。不幸的是,我无法解密,正如算法中所描述的那样。

以下是初始化阶段:

选择一个安全素数p使得p1=2q,其中q也是素数,然后做一个循环群G,设G是这个群的随机生成元。在组中选择一个随机的x(私钥),并设y=G^x(公钥)。我简单地初始化算法如下:

p = 233;
g = 131;
x = 139;
y = g ^ x mod 233; //y = 182

现在设s(秘密)为23,我们计算我们的es(加密秘密):

s = 23
es = y ^ s mod 233// es = 231

为了解密es,我将es升为x(私钥)的逆,我应该返回g^s,假设ds是解密的值:

ds = es ^ 1/x mod 233 // 1/x = 57, ds = 116

这里有个问题,ds不等于g^s,但理论上应该是,因为:

回想一下,我们将%s加密为:

es = y ^ s mod 233

我们知道

y = g ^ x mod 233

所以,

es = g ^ x ^ s mod 233

有鉴于此,

ds = es ^ 1/x mod 233
// which means:
ds = g ^ x ^ s ^ 1/x mod 233

因此,我期望得到与G^S(131^23 mod 233)相同的结果,它必须是182,而我得到的ds结果是116。

我做的事情有什么不对吗?

共有1个答案

文凯康
2023-03-14

当您有:

x * invX = 1 mod p 

下列等式一般不成立:

(g ^ x) ^ invX = g mod p

上面的表达式是将g*g*...*g乘以一定的次数,x*invx,根据第一模关系,也就是k*p+1

假设生成器的大小为n<=P-1:

g ^ n = 1 mod p

这意味着x*invx必须是n的倍数...

在序言中,您断言q=(p-1)/2是素数,但在这里,情况并非如此,q=116...

在您的示例中,g=131生成长度为58=(p-1)/4的序列。
那么,只有那些x具有属性g^x^(1/x)=1 mod p:

58 116 132 154 174 203 229 231 232

注意,对于另一个生成器g=5,序列的最大长度为p-1,则满足(g^x)^invX=1 mod p的唯一x为x=p-1

由于y^(p-1)=1 mod p对于任意y不是p的倍数,x=p-1总是按照您的预期工作...

 类似资料:
  • 本文向大家介绍java实现折半排序算法,包括了java实现折半排序算法的使用技巧和注意事项,需要的朋友参考一下 折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。 折半排序算法示意图: 以

  • MD5 加密算法 类型:MD5 可配置属性:无 AES 加密算法 类型:AES 可配置属性: 名称 数据类型 说明 aes-key-value String AES 使用的 KEY RC4 加密算法 类型:RC4 可配置属性: 名称 数据类型 说明 rc4-key-value String RC4 使用的 KEY

  • 主要内容:折半查找算法,折半查找的性能分析,总结折半查找,也称 二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。 但是该算法的使用的前提是静态查找表中的数据必须是有序的。 例如,在 这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序: 。 在折半查找之前对查找表按照所查的关键字进行排序的意思是:若查找表中存储的数据元素含有多个关键字时,使用哪种关键字做折半查找,就需要提前以该关键字对所有数据

  • 给定 n,求 m 使得 m 是大于 n 的最小半素数。 下一个素数相当简单,而半素数则不那么简单。需要明确的是,只需要半素数,尽管同时获得因子会很方便。 我想到了一些方法,但我相信有更好的方法。 假设算术运算为O(1)。我使用了埃拉托斯特尼筛,它是O(n log log n),我知道阿特金筛,但我喜欢我的半优化埃拉托斯特尼。 从n开始计数,当你找到一个半素数时停止。 这看起来很愚蠢,但如果有一个O

  • (此纯属学术目的) 但是我不知道算法的引用,例如“AES”,“RSA”来发出初始化调用 或者在使用ECC时是否需要更改其他内容?我认为ECC中的消息大小限制是基于曲线大小的?上面的例子是192位。

  • 本文向大家介绍JavaScript折半查找(二分查找)算法原理与实现方法示例,包括了JavaScript折半查找(二分查找)算法原理与实现方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript折半查找(二分查找)算法原理与实现方法。分享给大家供大家参考,具体如下: 一、问题描述: 在一个升序数组中,使用折半查找得到要查询的值的索引位置。如: 注:折半查找必须在有序数组