1. 引言
在密码学中密钥(key)本质是一串数字序列,是加解密运算参数,是管理秘密信息的钥匙,在明文转化为密文或是密文转化为明文时需要输入对应的密钥才能完成运算。密钥在密码学领域中占着很重要的地位,密钥在密码系统中需要严格的保管,一旦密钥泄露可能会造成严重的数据泄露事件。1883年Kerckhoffs提出了柯克霍夫原则(Kerckhoffs’ Principle) [1] ,是当今密码学领域中基本原则之一,意思是各种密码算法应该是允许向外公开的,不能影响数据安全性,只要是用其加密的密钥没有发生泄露,密文信息不应该被破解。
在数据传输过程中双方需要保证加密密钥一致,才能计算出正确的加解密结果,因此需要进行密钥协商,密钥协商指的是需要通信的双方在公开的网络信道中通过数据交换得到相同加密密钥的过程。在密钥协商中支持完美前向保密(Perfect Forward Secrecy, PFS) [2] 特性,对密钥的安全性保护具有重要的意义,这意味着当前密钥如果发生泄露并不会影响之前的密钥安全性,保证了之前数据的安全。PFS概念在IEEE 1363-2000标准里加入到多种密钥共享协议中。在2014年谷歌安全部门和其它安全公司发现了openssl标准库中存在安全漏洞,命名为“心血漏洞”,不支持前向保密的网络站点存在严重的数据泄露风险,此漏洞的提出影响了中国几万台服务器,PFS受到了越来越多人的重视,多家公司对PFS提供了支持,Google在Gmail、Google Docs和加密搜索服务中提供了PFS,Twitter也为用户支持了PFS,当前在所有使用HTTPS的站点中,80%以上都一定程度上支持了PFS,可见对PFS的支持有着重要的意义。
针对传统基于公钥体系设施(Public Key Infrastructure, PKI)密钥协商方案在支持PFS时的性能较低,不适用于资源受限的嵌入式设备的问题,对传统PKI密钥协商方案进行了优化,密钥信息不需要频繁通过网络交换,而是同时在本地动态生成密钥,避免使用了耗时的非对称算法,保证了每次加密密钥不同,支持了PFS特性,最后通过实验测试,表明本方案相比于传统PKI密钥协商方案显著提升。
2. 相关工作
2.1. 密钥协商技术研究现状
Li等人 [3] 提出了第一个称为iTLS的轻量级安全传输协议,支持完美前向保密特性,并提供无证书的隐式相互认证,iTLS在收到服务器响应之前动态生成基于身份的早期密钥,允许客户端发送加密数据而无需额外的往返行程。杨鹏飞等人 [4] 结合了ECC椭圆曲线(Ellipse Curve Cryptography, ECC)、三因子认证和中国剩余定理提出了在工业互联网的场景下一对多的密钥协商方案,安全性和性能均一定程度上的提升。龚成等人 [5] 提出了一种面向车载自组网的基于密钥协商的隐私保护认证方案,此方案利用树的数据结构实现了密钥协商中的密钥生成与更新。夏涛等人 [6] 设计了一种基于SM2的应用于军用无人机的轻量级密钥协商机制,能够有效地应对军用无人机网络所面临的威胁,并且在计算开销方面取得了优势。黄晓晖等人 [7] 提出了一种基于群签名密钥协商的多方完整性验证方案,此方案应用了区块链技术,将需要保证完整性的数据上传到链上,并且不断将更新的数据上链。王华华等人 [8] 提出了一种将奇偶校验码与ECC椭圆曲线算法相结合的密钥协商方案,解决无线网络中物理层密钥技术生成的密钥不一致的问题,采用了ECC加密算法传递简短密钥块进行密钥协商。张萌楠 [9] 对现有基于无证书的密钥协商协议进行了分析,存在安全缺陷,针对安全缺陷提出了轻量的无证书密钥协商方案,该方案更具有安全性,更高效,适用于物联网的场景。李等人 [10] 提出了一种新的密钥协商和身份认证方案IoT-AKA,是一种基于椭圆曲线的轻量认证机制和方案,该方案基于eCK的安全模型,将安全性依赖于椭圆曲线离散对数难题假设和CDH困难假设上。
2.2. 完美前向保密技术研究现状
Yang Zheng等人 [11] 为IIoT系统提出了一种支持PFS的高效AKA协议,该协议是基于新的动态身份验证凭证(DAC)框架开发的,不使用任何公钥加密原语,性能比当前支持PFS的最先进的基于DAC的AKA协议更快。Syed等人 [12] 提出了具有随机初始化向量和较强特性的密钥交换协议,该算法的安全性与OTP (One Time Pad)算法相同,具备支持PFS的能力,提供了一种并行实现算法,可以用更少的时钟周期实现高通量,算法将初始化向量随机化,避免了误用攻击、中间人攻击、重放攻击等。Avoine等人 [13] 在对称密钥设置中提出了一种经过身份验证的密钥交换协议,可确保完美的前向保密性,证明该协议是可靠的,并提供其安全性的正式证明。Saman等人 [14] 提出了一个密钥管理SIKM框架,SIKM框架包含了密钥协商方案,在每个区域中使用服务器下发解释器,各个客户端在互相进行通信时,通过解释器生成密钥,密钥一段时间更新一次,这种密钥协商方案在性能上与PKI密钥协商相比有了明显的优化,但是安全上存在缺陷,源文件并没有得到有效的保护,并且没有完全支持前向保密性。Qing [15] 等人认为Avine等人密钥保密性设计具有缺陷,并针对物联网环境,提出了SAKE*协议,其中包含两种类型的密钥主密钥和演化密钥保证了PFS,SAKE*协议中仅使用了伪随机函数和消息认证码操作来实现身份认证、密钥交换和消息的完整性,提高了密钥协商算法效率,增强了安全性,但是每次协商过程中需要向权威结构去授权,这部分存在通信开销,因此在实际情况下不一定保证性能可以得到优化。
3. 基于PKI密钥协商
3.1. 基于PKI密钥协商流程
基于PKI体系数据加解密与身份认证流程如图1所示,用户A向B安全的发送数据信息。
Figure 1. Process diagram of PKI key negotiation
图1. PKI密钥协商过程
用户A在发送数据时过程如下:
1) 明文通过Hash函数计算得到对应的hash值;
2) 使用A的私钥对明文hash值进行签名运算生成A的数字签名;
3) 将明文、数字签名和用户A的证书打包;
4) 用户A随机生成对称密钥作为本次会话密钥,使用会话密钥将3)中数据包进行对称加密,生成数据密文;
5) 使用用户B的公钥将本次会话密钥进行非对称加密得到会话密钥密文;
6) 用户A将数据密文和会话密钥密文通过网络发送给用户B。
用户B在接收用户A数据时过程如下:
1) 用户B使用私钥对会话密钥密文进行解密,得到会话密钥明文;
2) 使用会话密钥明文对数据包密文进行对称解密,得到数据包明文,用户B在此步骤可得到用户A发送的明文数据;
3) 用户B拿到用户A的证书,使用用户A证书中的公钥字段对A的数字签名进行验证,用于鉴别发送者A的身份,同时解出用户A在步骤1)中生成的明文Hash值;
4) 用户B对步骤2)算得的明文进行Hash运算;
5) 对比步骤3)中验签生成hash值和步骤4)中通过明文Hash运算生成的hash值,用于鉴别数据的完整性。
使用这种方式发送数据能够有效地对用户进行身份认证,有效地保护数据的完整性,能够有效地防止恶意用户对身份的伪造,极大地保护了网络数据安全。
3.2. PKI密钥协商存在的问题
在双方设备进行加密通信时,通常使用基于PKI的非对称加解密算法进行密钥协商,首先认证对方发送的证书,判断其是否在可信任中心注册过,若没有注册过则认为发送方身份不可信,存在危险隐患。证书认证成功后,使用对方公钥进行验签操作,使用私钥对密钥密文解密得到会话密钥,此过程需要很大的空间开销和计算开销。首先在密钥协商的过程中,携带的会话密钥密文通常仅为16 B,但是为了身份认证,发送方需要额外发送自己的数字证书,这些数字证书大小相比于会话密钥信息多出128倍,平均2 K大小,接收方收到证书信息后需要存储到内存上,并提取其中的公钥数据,因此该密钥协商算法需要很大的空间开销。其次,此过程占用了很大的计算开销,接收方收到发送方数据包时需要验证发送方的数字证书,验证过程需要向认证中心请求服务,存在网络通信开销,认证完成后,还需要多次的非对称密码运算,由于非对称算法计算性能普遍相对较低,基于ECC椭圆曲线非对称算法存在较为耗时点乘运算,SM9存在双线性对运算,比点乘运算更为耗时,所以又存在了较高的时间开销。基于PKI的密钥协商算法时间和空间开销相对较高。如果该密钥协商算法支持PFS特性,具体流程如图2所示,A向B发送数据时每一次都需要身份认证、密钥协商,这部分性能开销较大,随后再加密数据和发送密文,这种性能开销对于资源有限的嵌入式设备来说影响较为明显。
Figure 2. Process diagram of data transmission from A to B in PKI key negotiation scheme
图2. PKI密钥协商方案时A向B传输数据过程
4. 基于PKI的密钥协商优化设计
4.1. 优化后密钥协商流程
优化后密钥协商流程总共分为两个阶段,第一阶段是建立连接阶段,用于同步密钥参数,第二阶段是密钥生成阶段,第二阶段随着双方的每一次通信而进行,双方动态的生成相同的临时会话密钥,并使用此密钥对通信数据进行加解密。下面是对密钥协商的两个阶段具体的介绍。
4.1.1. 建立连接阶段
建立会话连接是双方能够完成正常通信的前提,若通信节点A要向通信节点B发送数据,需要在服务器端对AB两节点进行连接配置,服务器向节点A发送建立连接命令,通信节点A和B开始进行建立连接阶段,建立连接完成后,双方向服务器反馈结果,服务器记录连接信息。图3为建立连接阶段流程,A随机生成四个随机数,将四个随机数分为两组,第一组记为CountAB、SeedAB,第二组记为CountBA、SeedBA,CountAB、SeedAB为通信节点A向B发送数据时计数器和密钥种子,这些密钥参数用于第二阶段的动态密钥生成,CountBA、SeedBA是通信节点B向A发送数据时的计数器和密钥种子,两组参数相互独立,互不影响,为了防止在传输过程中因AB双方传输方向的不确定性,导致双方密钥参数不一致的问题,因此选择两组的密钥参数。节点A向节点B发送密钥参数时,传输方案使用上文所介绍的基于PKI公钥基础设施的传输方案,保证了密钥参数在传输过程中的完整性和安全性。双方将两组密钥参数保存到各自的安全存储区中,且永远不会被传出设备之外,因此除A、B节点其它人无法得知密钥参数。节点B接收到密钥参数后,将接收结果反馈给节点A,至此第一阶段建立连接阶段完成。
Figure 3. Process of connection establishment phase
图3. 建立连接阶段过程
4.1.2. 密钥生成阶段
阶段二密钥生成阶段伴随着通信双方每一次的数据传输,当一方需要发送数据时需要动态生成密钥,然后使用此密钥加密数据,接收方则同样动态生成相同的密钥,使用此密钥进行解密。密钥动态生成方案基于公钥算法的密钥协商方案,提出了动态密钥生成器(Key Generator, KG),不需要存储会话密钥,也不需要传输会话密钥,而是通过双方时刻保持一致并且不断发生变化的密钥参数,在本地动态生成会话密钥,从而保证了密钥的一致性。
节点A向节点B发送数据具体过程如图4所示,节点A端通过KG模块,根据CountAB和SeedAB参数生成对称会话密钥,使用此会话密钥将明文进行加密得到数据密文,再对数据明文进行Hash运算,最后将数据密文和明文对应的Hash值发送给节点B。节点B收到数据后,通过KG模块,使用相同的密钥参数CountAB和SeedAB生成相同的对称会话密钥,并用此密钥对密文进行解密,得到明文数据,最后对比Hash值保证数据的完整性。若通信节点B向通信节点A发送数据,则使用另外一组密钥参数CountBA和SeedBA。
Figure 4. Process of node A sending data to node B
图4. 节点A向节点B发送数据过程
4.2. 密钥生成器
密钥生成器是优化后密钥协商方案的核心模块,保证了数据传输双方在建立连接后不再需要交换密钥信息就可以保证会话密钥一致,并且不断变化,变化方法基于Hash函数实现,由于Hash函数的单向性,使新会话密钥无法推出旧会话密钥,因此该密钥协商方案可以支持完美前向保密特性。
下面为动态密钥生成算法具体过程:
(1)
(2)
(3)
第一次A向B发送数据时,拼接CountAB和SeedAB密钥参数,并对拼接后的数字进行Hash运算,得到的Hash值作为本次数据通信的会话密钥,当数据发送成功后将更新CountAB、SeedAB的值,计数器CountAB自加1得到CountAB',SeedAB进行Hash运算得到SeedAB'。接收方B收到数据后同样按照公式(1)计算会话密钥,计算出会话密钥后按照公式(2)和公式(3)更新CountAB和SeedAB。
4.3. 方案分析
提出的密钥协商方案设计目标是解决基于PKI密钥协商在支持PFS时性能较低的问题,以下将论述本方案如何支持PFS特性,以及分析了如何对密钥协商进行性能上的优化。
4.3.1. 支持完美前向保密
本方案所涉及的密钥生成算法基于Hash算法实现,新的会话密钥使用计数器和密钥种子作为参数,计算Hash值生成,Hash算法具有单向性,无法通过Hash函数计算出的密文推出对应的明文,因此攻击者即使得到了本次传输时的会话密钥,也无法得到之前的密钥信息,之前的数据密文仍然无法被解密,因此方案支持了完美前向保密的特性。
4.3.2. 一次连接,多次传输
基于本方案密钥协商时节点A向节点B传输数据流程如图5所示,A向B发送数据时,只需要建立一次连接,确认身份和同步密信息,为了保证密钥信息的安全性,需要使用基于PKI的密钥交换协议,因此第一阶段执行效率相对较低,性能与传统PKI相同,但当连接建立完成后,双方在频繁数据传输时只需要执行第二阶段,该阶段密钥生成更高效,传输时数据包负载更轻。在前文所述,基于传统PKI密钥协商时每一次的数据传输时都需要进行耗时的身份认证和密钥协商,而本方案的优点在于耗时的第一阶段执行频率较低,第二阶段执行频率较高,因此本方案密钥协商性能更加高效。
4.3.3. 轻量、高效地密钥协商
该密钥协商方案首先在两端建立会话连接,并且双方只发生一次的数据交换,以密钥参数的确认。在第二阶段将不需要身份认证,与基于PKI密钥协商相比不需要发送新的会话密钥密文和数字证书,而是直接发送密文数据和明文数据Hash值,该方法使用最少的交换数据量进行了数据传输,减轻了数据包的大小。并且在基于PKI的密钥协商方案中需要频繁的使用非对称算法加密会话密钥,接收方使用非对称密码算法进行解密得到密钥明文,非对称算法涉及耗时严重的点乘运算,时间开销较高,相较于本方案所使用的密钥生成方式Hash运算的方式,算法性能要慢30倍,效率很低,因此新密钥协商方案更加高效。
Figure 5. Data transmission process from A to B in key negotiation based on optimization scheme
图5. 基于优化方案密钥协商时A向B传输数据过程
5. 算法实验与结果分析
实验配置
本实验使用C++语言通过调用GMSSL第三方库实现提出的密钥协商方案,基于PC平台进行开发,开发环境如下所示:
1) CPU:Intel i7-12700;
2) 内存:16 G;
3) 操作系统:Ubuntu 18.04。
表1为对传统PKI、所提出的密钥协商算法进行了运算步骤总结,由于密钥协商算法双方运算步骤是对称的,只对比了发送方在进行密钥协商时的运算步骤。传统PKI的密钥协商方案使用1次Hash运算H,2次非对称加密运算A,3次对称加密运算S。本方案使用3次Hash运算,1次对称加密运算。
Table 1. Summary of computational steps for each scheme
表1. 各方案运算步骤总结
本节模拟了1000次的密钥协商并加密传输数据的过程,明文大小使用1 KB,基于PKI的密钥协商各步骤消耗时间如表2所示,总共用时5.580秒,非对称算法的计算效率与其它算法相比很低,每次非对称算法只加密了很小量数据,但两次运算却占用总时间的97%,对称算法和Hash算法较为接近,总占1%,其余是系统开销时间占2%,各运算时间占比如图6所示,从图中可以观察出非对称算法是密钥协商过程的瓶颈。
Table 2. Time taken for each step in PKI key negotiation process
表2. PKI密钥协商各步骤用时
Figure 6. Proportion of time spent on various operations in PKI key negotiation
图6. PKI密钥协商各运算时间占比图
表3记录了优化后密钥协商方案的时间消耗,密钥协商了1000次,明文大小使用1 KB,本方案在第二阶段传输数据替换了耗时的非对称运算,使用效率较高的Hash运算,在算法运行时间上大幅减少,因此打破了瓶颈,总消耗时间由5.58秒变为0.122秒,与基于PKI方案相比性能提升了约55倍。各运算时间占比如图7所示,其中Hash运算时间占比14.7%,对称运算时间占比13.9%,系统开销占总时间的71%。
Table 3. Time taken for each step in the optimized key negotiation scheme
表3. 优化后的密钥协商方案各步骤用时
Figure 7. Percentage of operation time in optimized key negotiation scheme
图7. 优化后密钥协商方案各运算时间占比
6. 结束语
针对基于PKI的密钥协商方案在支持PFS特性时存在大量计算开销的问题,对其性能进行了优化,优化后密钥协商方案分为两个阶段,第一个阶段建立会话连接,对通信对方进行身份认证和密钥参数的同步,第二阶段在通信节点通过密钥生成器动态生成会话密钥,保证了每次数据加密的密钥不用,并且动态变化,从而支持了PFS特性。对密钥协商算法性能分析,相比基于PKI密钥协商性能优化显著,达到了预期效果。
基金项目
国家重大研发计划——“虚拟货币关键环节风险识别与监测处置技术”(2022YFC3320900)。