最近用到ECIES(集成加密方案,elliptic curve integrate encrypt scheme),就想从网上找找ECIES是什么,但找不少资料还是没弄明白。
后来看了几篇文献,基本上弄懂了,在这里分享下想法。
ECIES并不是一种具体的方案,其中的密钥导出机制,加密方法都可以根据自己的需要进行设计。ECIES也有几个标准:ANSI X9.63, IEEE 1363a 和 ISO/IEC 18033-2。

简单来说加密时为: 使用发送者的私钥和接受者的公钥生成加密密钥ek和MAC密钥mk,用ek对明文M加密得到密文c,使用mk生成密文c的标签。将发送者的公钥,密文c和标签一起发送给接受者。(也可在生成密钥和标签的步骤加入共享消息)
解密时:接受者收到发送者发送的公钥,密文c和标签,加入自己的私钥,即可生成加密密钥ek和MAC密钥mk,使用ek对密文c解密,得到消息M。

以下为详细流程。

一、加密

加密流程图

①选择一个在 1 和 n - 1 之间的临时随机整数k,计算 R = kG = ( Gx,Gy) 。
②将点 R 转换成八进制字符串 R’。
③由临时密钥 k 和公钥 Q 得到共享秘密域元素 z,( 例如 P = ( Gx,Gy) = kQ,令 z = xp) 。
④将 z 转换成八进制字符串 Z。
⑤根据配置文件用 KDF 函数从 Z 和[共享消息#1] 产生密钥数据 K。
⑥按照配置文件从 K 中提取加密密钥 EK 和MAC 密钥 MK。
⑦根据配置文件中的对称加密函数和 EK,加密消息 M 得到密文 EM。
⑧根据配置文件中的 MAC 函数和 MK,由 EM‖[共享消息#2] 得到 D。
⑨输出 C = R’‖EM‖D。

二、解密

根据密文 C = R’‖EM‖D, 以及私钥 d, 接受者解密 C 恢复明文 M 的流程如下:
①将八进制字符串 R’转换成椭圆曲线点 R =( xR,yR) 。
②得到共享秘密域元素 z,( 例如 dR = dkG =kQ = P = P = ( Gx,Gy) ,令 z = xp) 。
③将 z 转换成八进制字符串 Z。
④用 KDF 函数从 Z 和[共享消息#1] 产生密钥数据 K。
⑤从 K 中提取加密密钥 EK 和 MAC 密钥 MK。
⑥用 MK 计算 MAC,通过与 D 进行比较来确定发送者的身份。
⑦用 EK 解密 EM 得到明文 M。

如果仍是没有明白,建议直接看以下文献

参考文献:
[1]范云海.集成加密方案ECIES的设计与验证[J].信息技术,2012,36(01):115-117.
[2]Martínez, V.G., Álvarez, F.H., Encinas, L.H., Ávila, C.S… A comparison of the standardized versions of ECIES[P]. Information Assurance and Security (IAS), 2010 Sixth International Conference on,2010.

Logo

一站式虚拟内容创作平台,激发创意,赋能创作,进入R空间,遇见同道,让优质作品闪耀发光。​

更多推荐