一种基于虚拟私钥的OpenSSL与CSP交互方案
2018-06-19王增光
张 腊, 卢 昱, 王增光
(陆军工程大学石家庄校区装备模拟训练中心, 河北 石家庄 050003)
随着互联网+的提出,网络进一步深入大众生活,与之密切相关的网络信息安全问题也受到越来越多的关注。众多网络应用需要一个安全可靠的信息传输环境,以确保数据的保密性、完整性和安全验证等安全特性。目前广泛应用的开放式安全套接层(Open Secure Sockets Layer,OpenSSL)是实现这一目标的关键一环。作为一个强大的安全套接层密码库,OpenSSL开源实现了常规的密码算法和SSL。当会话双方需要在网络中进行敏感信息的交互时,OpenSSL还可以通过其内置的引擎(Engine)机制借力加密服务提供商(Cryptographic Service Provider, CSP),使用CSP提供的硬件加密设备进行加密运算,以确保实现安全性更高的加解密。
由于OpenSSL允许CSP在提供Engine对象时对其代码进行改动,因此在实际应用中各CSP实现的具体交互方式多种多样[1],概略分为3类:1)在OpenSSL和CSP两端同时保存私钥;2)实现方案需要传递私钥或私钥相关信息,进而得到私钥副本;3)实现方案不传递私钥或私钥相关信息,却需要对OpenSSL的Engine做出较大的代码改动。前2类实现方案由于私钥副本的出现,违背了私钥唯一性原则,因而增大了私钥泄漏的安全风险;第3类实现方案代码工作量大,容易出现漏洞,不便实现和推广[2]。
鉴于目前存在的这些安全缺陷,笔者提出一种OpenSSL与CSP构造虚拟私钥和使用虚拟私钥的交互方案。使用该方案可避免私钥在网络中传播,并减少大量代码工作,对进一步提高网络信息传输的安全性具有指导作用。
1 交互方案总体思路
交互方案构想如图1所示。总体思路为:CSP保存真实私钥,并提供虚拟私钥和Engine对象,交由OpenSSL保存;OpenSSL将虚拟私钥当作真实私钥加载使用,同时加载CSP提供的Engine对象;OpenSSL在需要进行私钥签名或解密运算时,利用该Engine对象登录CSP,并传递相关数据;由CSP的硬件加密设备完成实际私钥签名或解密运算,再返回相应结果;OpenSSL得到运算结果后继续执行原工作任务。
2 交互方案设计
交互方案设计包括虚拟私钥的构建和虚拟私钥的使用,所涉及的符号及含义如表1所示。
表1 交互方案涉及的符号及含义
2.1 虚拟私钥的构建
在CSP账号注册时完成虚拟私钥的构建,即当OpenSSL端将真实私钥导入CSP提供的硬件加密设备时,由CSP构建虚拟私钥。虚拟私钥构建过程如图2所示。
主要步骤如下:
1) OpenSSL向CSP发送注册请求ReqR;
2) 完成接收注册信息的准备工作之后,CSP返回确认响应ACKP;
3) OpenSSL设置身份标志IDO、登录口令PWO,并连同虚拟私钥请求ReqV 发送给CSP;
4) CSP保存IDO和PWO,发送ACKP和私钥请求ReqK;
5) OpenSSL向CSP发送ACKP,并提交私钥skO;
6) CSP以安全的方式存储skO,并返回ACKP和虚拟私钥vskO;
7) OpenSSL发送ACKO,并用接收到的vskO替换skO。
上述步骤主要着眼于OpenSSL和CSP在加密通道中从注册到完成虚拟私钥替换真实私钥的整体交互过程,虚拟私钥的具体生成在CSP内部。步骤6)中,CSP利用真实私钥在内部生成虚拟私钥的构建过程如下:
1) CSP以安全的方式存储skO,取得skO的存储地址等相关信息MskO;
2) 按照事先设置的某种变换组合(可以采用任意密文长度固定的简单、快捷、可逆的加密方法)将MskO、IDO、PWO变换形成多个字节的二进制码串;
3) 将形成的二进制码串级联冗余码R,得到一个与skO长度相同的新码串;
4) CSP将此新码串作为vskO,并将vskO返回到OpenSSL。
通过以上步骤,可以生成一个虚拟私钥,但需要保证CSP提供的Engine对象能够合理解释该虚拟私钥,从而能够提取正确的身份标志和登录口令,以及真实私钥在CSP中的存储地址等相关信息。
2.2 虚拟私钥的使用
当使用CSP服务的OpenSSL端需要与其他进程建立安全链接时,握手过程用到签名或私钥解密的部分由CSP完成实际运算。这需要OpenSSL成功登录CSP,将相关数据传递给CSP,并接收相应的返回信息[3]。以实现数字签名为例,其交互过程如图3所示。
主要步骤如下:
1) SSL加载虚拟私钥vskO以及CSP提供的Engine对象;
2) SSL将需要私钥签名的相关数据X以及vskO传递给Engine对象;
3) Engine对象合理解释vskO,取出登录CSP所需的IDO、PWO和MskO,并在加密通道中用IDO、PWO向CSP提出数字签名申请ReqS ;
4) CSP验证Engine对象发来的IDO、PWO,验证通过后在加密通道返回确认响应ACKP;
5) Engine对象将MskO、X由加密通道发送给CSP;
6) CSP通过MskO找到存储的skO,利用自身的硬件加密设备和真实私钥完成实际签名运算,并由加密通道返回Engine对象需要的签名数据signskO(X);
7) Engine对象得到signskO(X)之后在加密通道回送自身的确认响应 ACKO;
8) Engine对象将signskO(X)返回SSL。
经过以上步骤,OpenSSL接收到签名数据。随后可通过继续与其他进程的握手过程,建立起安全会话链接。
为了更加清楚地梳理整个过程,笔者综合文献[4-5]的表述方法,将OpenSSL端进一步分解为2部分,将其中由CSP提供的Engine对象单独显示出来。实际上,图3中SSL与Engine对象的交互部分与OpenSSL原机制的主要区别仅仅在于用虚拟私钥替换了原机制中使用真实私钥的部分。
3 基于SVO逻辑的形式化分析
为分析安全协议执行过程中主体信念和知识的演化过程,1989年由Burrows、Abadi和Needham提出了第一个说明和验证密码协议的信仰模态逻辑——BAN逻辑[6]。之后,随着理论的发展演变出很多逻辑语言,其中:1994年Paul Syversot和Paul C. van Oorschot提出的SVO逻辑语言作为BAN及类BAN逻辑成熟的标志,其表达力更强,综合性和可靠性更加突出,能成功发现协议设计中的安全缺陷和漏洞,为逻辑系统建立了用于推证合理性的优质理论模型。
笔者针对虚拟私钥使用方案中OpenSSL与CSP之间的交互部分利用SVO逻辑进行形式化分析,以证明方案的安全性与合理性。
本文用到的SVO推理规则及公理[7]如下:
A1.Pbelievesφ∧Pbelieves(φ→ψ)→Pbelievesψ。
A18.Pcontrolsφ∧Psaysφ→φ。
A19.fresh(Xi)→fresh(X1,…,Xl)。
A21.fresh(X)∧PsaidX→PsaysX。
1) 形式化分析基本假设
(1)初始假设
S1. P believes fresh(ReqS),
P believes fresh(Msko),
O believes fresh(signsko(X))。
S3. O believes(P controls sko),
P believes(O controls IDO,PWO,Msko)。
S4. P believes(Msko→sko)。
(2) 收到的消息假设
S5. P received{|IDO,PWO,ReqS|}k。
S6. O received{|ACKp|}k。
S7. P received{|Msko,X|}k。
S8. O received{|signsko(X)|}k。
S9. P received{|ACKo|}k。
(3) 对假设的理解
S10.P believes P received{|IDO,PWO,*1|}k。
S11.P believes P received{|*2,X|}k。
(4) 目标假设
T1. P believes O says ReqS。
T2. O believes P says(signsko(X)}。
2) 对T1的推理
(1) P believes P received{|IDO,PWO,fresh(ReqS)|}k,
根据S10, A19, MP。
(2) P believes O said(fresh(ReqS)),
根据(1), S2, S3, A1, A5, Nec, MP。
(3) P believes fresh(IDO,PWO,fresh(ReqS)),
根据S1, A1, A19, Nec, MP。
(4) P believes O says(ReqS),
根据(2),(3), A1, A21, Nec, MP。
T1得证。
3) 对T2的推理
(1) P believes P received{|fresh(Msko),X|}k,
根据S3, S11, A19, MP。
(2) P believes O said(fresh(Msko),X),
根据(1), S2, S3, A1, A5, Nec, MP。
(3) P believes fresh(fresh(Msko),X),
根据S1, S3, A1, A19, Nec, MP。
(4) P believes O says(fresh(Msko),X),
根据(2),(3), A1, A21, Nec, MP。
(5) O believes P said(signsko(X)),
根据 S3, S6, A18, Nec, MP。
(6) O believes fresh(signsko(X)),
根据S1, S3, A1, A19, Nec, MP。
(7) O believes P says(signsko(X)),
根据(4),(6), A1, A21, Nec, MP。
T2得证。
上述形式化分析成功得到预期目标假设T1和T2,即由SVO逻辑形式化证明了交互方案的安全性与合理性。说明双方完成的交互是安全可信的:CSP可以相信OpenSSL正在请求数字签名服务;OpenSSL可以相信CSP正在返回数字签名结果。
4 方案分析
笔者提出的交互方案旨在解决目前OpenSSL调用第三方加密服务时,各种商业实现存在的私钥不唯一、代码改动过多和不便推广的问题。下面主要从这3方面对所提方案进行分析。
4.1 安全性分析
现代加密算法的安全性主要取决于私钥的安全性[8],确保私钥安全的首要目标是确保私钥是唯一的,不存在额外的副本。下面从私钥唯一性的角度对本文所提交互方案进行安全论证,并做基于SVO逻辑的协议形式化分析。
一是虚拟私钥的信息与真实私钥并没有直接关联,通过此方法获取的虚拟私钥并非真实私钥的副本,所包含信息亦不足以推断出真实私钥本身,不能直接用于数字签名等非对称算法的运算(实际上即使更换真实私钥也可以不改变虚拟私钥)。因此相比传递真实私钥,传递虚拟私钥的方式十分安全,确保了真实私钥的唯一性,用于传递过程不会增加真实私钥泄露的风险。
二是尽管OpenSSL可以通过CSP提供的Engine对象解释虚拟私钥,进而登录CSP并调用真实私钥实现签名解密等运算。但虚拟私钥也仅仅是在OpenSSL处能够实现真实私钥的原有功能,并且最终是通过调用真实私钥的方式实现了功能。从根源上确保了私钥功能只能由真实私钥实现,虚拟私钥不是第2个“私钥”,保证了真实私钥的唯一性。
4.2 性能分析
通过虚拟私钥替代真实私钥正常加载,以及OpenSSL借由Engine对象调用CSP的过程可以看出:本交互方案能够保持与原OpenSSL端不同应用程序、不同调用方式相通用的调用效果,对现有应用程序和调用方式几乎没有影响。可以等同于OpenSSL端和CSP端同时保存真实私钥的方式,最大限度减少了OpenSSL端的代码改动量,不影响原OpenSSL性能,达到了良好效果。
4.3 通用性分析
OpenSSL作为一个非常成熟的开源实现,已经被大量网站和应用程序使用多年,因此OpenSSL不宜大规模变动[9]。由CSP负责主要改进工作且兼容OpenSSL本身的运行方式,符合少数服从多数的商业工程实现规律。本方案几乎没有改变OpenSSL本身的运行方式,代码改动工作基本由CSP一方完成,因而能够直接套用在现有各种应用中,具有较强的通用性。
5 结论
笔者设计的交互方案能够避免现有调用方案的一些缺陷,提高OpenSSL采用第三方加密服务的安全性;不足在于加密通道的建立和维护成本较高,且目前没有较好的替代方案。与文献[10]设计方案相比,本方案安全性更高。下一步的研究可以考虑与云计算相结合,将CSP扩展为一个用于分担OpenSSL服务器加解密运算压力的公有云。充分利用云计算的优势,进一步提高运算能力,增强OpenSSL所能借用的加密性能。
参考文献:
[1] KAMP P H.Please put OpenSSL out of its misery[J].Queue,2014,12(3):20-23.
[2] 杜在东.一种加密设备的配置方法及系统:CN106060022A[P].2016-10-26.
[3] 龚少麟.OpenSSL密码安全平台实现机制的研究[J].计算机与数字工程,2011,39(6):118-121.
[4] RASHTI M J,SABIN G,Kettimuthu R.Long-haul secure data transfer using hardware-assisted GridFTP[J].Future generation computer systems,2016,56:265-276.
[5] CHRISTIAN J D,CHOO K K R.A technique to circumvent SSL/TLS validations on iOS Devices [J].Future generation computer systems,2016,74:366-374.
[6] 李建华,张爱新.网络安全协议的形式化分析与验证[M].北京:机械工业出版社,2010:12-13.
[7] 王亚弟,束妮娜,韩继红,等.密码协议形式化分析[M].北京:机械工业出版社,2006:82-86.
[8] 谢东良.基于国密算法的OpenSSL安全性优化研究[D].哈尔滨:哈尔滨工程大学,2016:6-10.
[9] 王玮,龙毅宏,唐志红.OpenSSL引擎机制的研究[J].信息安全与通信保密,2011(10):60-62.
[10] 齐洪喜,周大水.基于OpenSSL的安全密码平台的设计与实现[J].计算机工程与设计,2007,28(2):314-319.