首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子组上的ElGamal加密

子组上的ElGamal加密
EN

Cryptography用户
提问于 2021-04-07 15:20:32
回答 1查看 216关注 0票数 1

例如,我们对(Z_{67}^*, \bmod 67)的一个子组进行加密。

为了执行El Gamal的加密方案,我们应该:

  1. 选择(Z_{67}^*, \bmod 67)的一个素数级子群。
  2. 选择ElGamal方案的参数(生成器、Bob秘密密钥等)。
  3. 选择三条随机消息,以及爱丽丝的参数,并描述爱丽丝在每一轮中向鲍勃发送的内容

我的问题不一定是如何加密,而是如何设置加密。

鉴于在El Gamal的设置中,传统上:

  • (p, \alpha, \beta)是鲍勃的公钥。
  • (a)是他的私钥

在这种情况下,p, \alpha, \beta会是什么?例如,是(1) = p的结果吗?(2) = \alpha的结果?

EN

回答 1

Cryptography用户

发布于 2021-04-07 19:29:29

乘法群\mathbb{Z_{67}}^*有66个元素。通过拉格朗日定理拉格朗日定理,我们可以说,任何子群G of \mathbb{Z_{67}}^*的顺序都必须除以该群的次序,66。定理的逆不需要保持,因此必须检查有2,3和11阶子群及其乘积。

使用下面的SageMath,您可以列出生成器及其顺序;

代码语言:javascript
运行
复制
def findOrder(a,G):
    temp = a
    for i in range (G.order()):
        if temp == G(1):
            return i+1
        temp = temp*a
        
R = Zmod(67)
grouplist = R.multiplicative_subgroups()
print(grouplist)
for x in grouplist:
    print(x, "order = ", findOrder(R(x[0]),R))

不要为大型组尝试这段代码!下面的代码输出空子集的错误!

代码语言:javascript
运行
复制
( 2,) order =  66
( 4,) order =  33
( 8,) order =  22
(64,) order =  11
(38,) order =  6
(37,) order =  3
(66,) order =  2

因此,我们有所有可能的子群,没有逆拉格朗日定理的反例。

唯一的质数顺序是2,3和11。为了简单的安全性,您需要选择11。实际上,素数是不必要的,因为ElGamal加密可以在任何循环组G上定义。另一方面,安全性依赖于离散对数问题,当群不处于素数阶时,Pohlig进入博弈,而我们并不比最大素数阶更安全。

好的,让我们继续使用p=11,它有一个生成器作为g=64

  • \alpha中选择一个随机整数\{1,\ldots, 10\}
  • 现在,计算\beta = g^{\alpha}
  • 公钥(G,q,g,\beta)和私钥是\alpha
票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/89243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档