我需要选择一个加密系统,所以我试图理解现有选项之间的区别。我经常发现,人们将椭圆曲线集成加密方案( ECIES )与RSA或ElGamal进行比较。显然,基于椭圆曲线的加密方案比RSA和ElGamal有更强的鲁棒性.所以,我决定使用基于电子商务的解决方案。
现在的问题是,有不同的基于EC的加密--ECIES,ECDHE (椭圆曲线Diffie-Hellman加密),EC-ElGamal--但我无法清楚地解释它们的共同特征和差异。
有人能为我提供这些基于电子商务的加密解决方案的参考/研究/比较吗?或者有人能给我解释一下他们的基本区别?特别是在资源消耗方面,哪一个是最好的?
发布于 2019-05-19 03:22:33
修正一组G
of order q
,其中离散日志是硬的,并固定一个标准的基点g \in G
。修正位串的认证密码E_k
。
h \in G
。m
,发送方:y \in \mathbb Z/q\mathbb Z
,t = g^y
,s = h^y
,并且t
与c = E_k(m)
一起发送,其中k = H(s)
是共享秘密的散列。注:总计算费用为两个幂;总密文开销为一个组元素。实际上,我们正在生成一个短暂的Diffie-Hellman密钥对(y, t)
,并与其执行Diffie-Hellman密钥协议。
- 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.
h \in G
。m
,发送方:y \in \mathbb Z/q\mathbb Z
,t = g^y
,s = h^y
,G
** 的某些子集中随机选择 uniformly uniformlyz = k \cdot s
** 、**和t
、和 z
** 、**与c = E_k(m)
一起发送。注意:总成本是两个指数和 one乘法;总的密文开销是两个组元素。
- 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,。
https://crypto.stackexchange.com/questions/70640
复制相似问题