找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于硬件加密卡技术的RSA加密引擎的局部封装

[复制链接]
admin 发表于 2013-3-23 11:20:47 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 目前主流的VPN是通过SSL协商进行认证的,其在调用Openssl的加密引擎过程中带来一个问题,即进行数据加密所使用的公钥不是自身的密钥,于是加密引擎不仅要有对私钥解密进行硬件实现,还要有对公钥加密实现原有算法调用的技术。本文介绍了目前主流的Openssl实现硬件RSA加密引擎仅对私钥解密数据进行调用,而对于公钥加密数据不调用的局部封装方法,有着重要的实用价值。
关键词: VPN;SSL协商;Openssl引擎;RSA加密
       目前,国家电网公司信息内外网边界的各类业务接入对象已经越来越多地采用多种接入方式。传统的内网专线模式已经远远不能满足日益增长的办公需要。随着智能电网的普及,电网内部专线资源也逐渐对外网的接入提出了迫切的需求。因此对满足内外网数据安全交互的VPN技术提出了更高的要求。Openssl以其开源、高效、安全的加密方式在数据加密的过程中发挥了巨大作用。但是由于SSL协议的特性,公钥将会在服务器和客户端直接传递,即进行数据加密所使用的公钥是由对方传递来的,而不是自身的密钥。这样也带来一个问题,传统openssl加密引擎必须实现对于RSA引擎的局部调用,即只对需要RSA私钥解密的数据进行硬件引擎的调用,而对于RSA公钥加密的数据采用原来的软加密方式不经过硬件引擎调用。
1 硬件RSA加密引擎主要技术
1.1 Openssl硬件加密引擎封装技术[1]

  Openssl硬件引擎(Engine)能够使用户比较容易地将自己的硬件加入到Openssl中去,替换其提供的软件算法。一个Engine提供了密码计算中各种计算方法的集合,它用于控制Openssl的各种密码计算。引擎机制的目的是为了使Openssl能够透明地使用第三方提供的软件加密卡或者硬件设备进行加密。换句话说就是对Openssl进行了一种“欺骗”,对于指定的一种算法,Openssl会自动用引擎内的方法对其实现加解密,然后默认其是由该算法进行加密的,而对于引擎内的具体实现不去关心。因此可以对引擎进行自定义式的实现,比如用硬件加密卡接口对其进行数据的加解密等,从而实现硬件加密卡与软件数据流之间的交互。
1.2 RSA加密技术[2]
     RSA算法是一种非对称密码算法。所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,而需要用另一个才能解密。RSA的算法涉及三个参数:n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示钥所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)×(q-1)互质;再选择e2,要求(e2×e1)mod((p-1)*(q-1))=1。(n及e1),(n及e2)就是密钥对。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;e1和e2可以互换使用,即:A=B^e2 mod n;B=A^e1 mod n。
2 RSA硬件加密引擎局部封装技术
2.1 RSA加密引擎[3]

     RSA加密引擎是在vpn进行身份认证SSL协议握手时对私钥解密部分进行硬件加密卡的调用,从而提高设备数据处理的效率。由于证书只能存放于加密卡内无法取出,可以做到一人一卡从而大大增加设备的安全性和防黑客攻击的能力。如图1所示,vpn采用Openssl框架进行加解密运算,用户通过硬件加密key专用接口或通用CSP接口,使用硬件加密key对数据进行加解密,而不是采用Openssl默认的软加密方式进行加解密。从而可以对程序的安全性有更好的保障,黑客在没有获得加密key的情况下,无法对数据进行加解密运算,也就保证了程序在应对黑客攻击的过程中更加具有安全性。
    20121107051416962251994.gif
   2.2 传统加密引擎封装方法[4]
     传统加密引擎封装主要通过指定一个加密算法,对其进行替换处理,用来“欺骗”Openssl,例如图2所示采用AES128算法进行替换,每当Openssl需要进行加解密并且判断得知所采用的算法是AES128算法后,会自动放弃使用软件加解密的方式。而通过接口调用硬件中的加解密函数,由于Openssl本身并不知道硬件中所采用的算法究竟是什么算法,因此相当于对Openssl进行了某种意义上的欺骗。Openssl默认该硬件加密卡采用了AES128算法进行了加解密,但是实际上采用的也许是用户自定义的算法,从而实现了对AES128算法的替换。具体流程如图2所示。
    20121107051417009121995.gif
   2.3 只封装私钥的RSA加密引擎
     在实际运用过程中,由于公私钥不是同一台电脑产生的,在vpn中客户端使用的公钥加密的公钥是来自于服务端,因此在硬件key中不可能预先保存公钥信息,对于公钥加/解密不能一并用硬件引擎实现。由于Openssl是通过识别AES128算法来进行对硬件引擎的调用,其本身并不能识别出此次加/解密所用的密钥是公钥或是私钥,因此公私钥判断并调用不同运算的过程只能在引擎封装中实现。在引擎加密初始化时需要声明如下:
     name_rsa.rsa_pub_enc = ossl_rsa_meth->rsa_pub_enc;
     name _rsa.rsa_pub_dec = ossl_rsa_meth->rsa_pub_dec;
其中ossl_rsa_meth->rsa_pub_enc表示openssl自身的公钥加密算法,即不通过调用硬件引擎的软加密算法,name_rsa.rsa_pub_enc表示该硬件引擎所要采用的公钥加密算法,第一行代码连起来的作用解释为将Openssl自身的公钥加密算法赋值给该硬件引擎所要采用的公钥加密算法。通过此次赋值,硬件再次调用公钥加密算法时,实际上又再次调用了软加密方法,即相当于对硬件加密引擎也进行了一次“欺骗”,重新回到主程序调用硬件加密引擎前的状态。第二行代码与第一行代码作用相似,只不过是将公钥加密变为公钥解密的算法。具体流程如图3所示。
    20121107051417040371996.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-24 10:16 , Processed in 0.058626 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表