ECIES详解

    xiaoxiao2022-06-25  323

    最近用到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.


    最新回复(0)