首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ECIES/ ECDHE/ EC-ElGamal加密比较

ECIES/ ECDHE/ EC-ElGamal加密比较
EN

Cryptography用户
提问于 2019-05-18 14:07:57
回答 1查看 1.3K关注 0票数 7

我需要选择一个加密系统,所以我试图理解现有选项之间的区别。我经常发现,人们将椭圆曲线集成加密方案( ECIES )与RSA或ElGamal进行比较。显然,基于椭圆曲线的加密方案比RSA和ElGamal有更强的鲁棒性.所以,我决定使用基于电子商务的解决方案。

现在的问题是,有不同的基于EC的加密--ECIES,ECDHE (椭圆曲线Diffie-Hellman加密),EC-ElGamal--但我无法清楚地解释它们的共同特征和差异。

有人能为我提供这些基于电子商务的加密解决方案的参考/研究/比较吗?或者有人能给我解释一下他们的基本区别?特别是在资源消耗方面,哪一个是最好的?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2019-05-19 03:22:33

修正一组G of order q,其中离散日志是硬的,并固定一个标准的基点g \in G。修正位串的认证密码E_k

  • (EC)IES中,粗略地说:公钥是点h \in G
    • 要加密消息m,发送方:
      1. 随机一致地选取指数y \in \mathbb Z/q\mathbb Z
      2. 计算短暂的公钥t = g^y
      3. 计算一个短暂的共享秘密s = h^y,并且
      4. tc = E_k(m)一起发送,其中k = H(s)是共享秘密的散列。

注:总计算费用为两个幂;总密文开销为一个组元素。实际上,我们正在生成一个短暂的Diffie-Hellman密钥对(y, t),并与其执行Diffie-Hellman密钥协议。

代码语言:javascript
运行
复制
- The receiver, who knows the secret exponent `x \in \mathbb Z/q\mathbb Z#qcStackCode#` such that `h = g^x#qcStackCode#`, computes `k = H(t^x)#qcStackCode#` and decrypts `c#qcStackCode#` with `k#qcStackCode#`.  Note: The total computational cost is one exponentiation.
  • (EC-)Elgamal中:公钥是点h \in G
    • 要加密消息m,发送方:
      1. 随机一致地选取指数y \in \mathbb Z/q\mathbb Z
      2. 计算短暂的公钥t = g^y
      3. 计算一个短暂的共享秘密s = h^y
      4. G ** 的某些子集中随机选择 uniformly uniformly
      5. <#>computes产品 z = k \cdot s ** 、**和
      6. t z ** 、**与c = E_k(m)一起发送。

注意:总成本是两个指数 one乘法;总的密文开销是两个组元素。

代码语言:javascript
运行
复制
- The receiver, who knows the secret exponent `x \in \mathbb Z/q\mathbb Z#qcStackCode#` such that `h = g^x#qcStackCode#`, computes `k = z\cdot t^{-x}#qcStackCode#` and decrypts `c#qcStackCode#` with `k#qcStackCode#`.  Note: The total cost is one exponentiation _**and**_ **one multiplication**.

正如你所读到的,你可能会在这里看到相似之处!Elgamal基本上做了IES所做的所有事情,加上一些没有增加安全性的额外工作,这是我用粗体写的。

在椭圆曲线的情况下,Elgamal甚至更复杂。为什么?

  • 在有限域情况下,整数调制素数G = \mathbb Z/p\mathbb Z (或G = \operatorname{GF}(2^n)),k可以是(比方说)一个256位字符串,它具有双重用途,用作AES键,在小endian中解释为整数,作为G的一个元素。
  • 在椭圆曲线的情况下,位字符串和G元素之间没有自然映射,因此需要在G的随机元素和(比方说) AES键之间选择一些对应关系,比如哈希函数H(k)。但是,如果您要将G的一个元素散列到一个键中,那么您最好还是使用ECIES!

更糟糕的是,Elgamal需要在G中计算乘法,而不仅仅是指数G,这意味着您不能利用像X25519这样的DH函数,它只支持指数化的等效(使用快速常数时间蒙哥马利阶梯的x-restricted标量乘法),而不是乘法(‘Curve25519上的点加法’)。

使用Elgamal的唯一原因是需要专家指导的奇特应用程序,如投票系统,它直接隐藏消息m,而不是用于身份验证密码的某些密钥k;只有当您利用Elgamal的同态属性时才会发生这种情况,并且不处理任意位字符串消息,而是要求您对消息是什么以及它们是如何选择的非常明智。

If您想要公开密钥匿名加密,您应该使用<#>If crypto_box_seal,,这在概念上与ECIES是相同的(我的所有细节都是不同的)。当然,请注意,公开密钥匿名加密是一种奇怪的做法,大多数应用程序,外部记者接受泄密,都不需要。More很可能需要公钥 通过身份验证的 encryption,如果您对知道对方公钥并希望交换令人难忘的秘密消息的发送方和接收方有明确的概念,则应该使用NaCl/ likely crypto_box_curve25519xsalsa20poly1305,

票数 10
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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