针对嵌入式系统中信息安全的特点,选择椭圆曲线公钥加密体制ECC(EnipticCurvesCryptosystem)作为加解密系统体制,应用开源安全软件开发包OpenSSL作为密码库开发了加密和解密系统。
一、椭圆曲线加密体制
椭圆曲线加密体制ECC是基于椭圆曲线离散对数问题(ECDLP)的一种公钥加密体制,我们采用大素数有限域GF(p)上的方程y2=x3+ax+6(modp),这里p是大素数,a和b为两个小于p的非负整数,它们满足:4a3+27b2(modp)≠0。椭圆曲线离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对Q=kP,可以证明由k和P计算Q比较容易,而由Q和P计算尾则比较困难。由于椭圆曲线密码体制ECC所具有的特点,ECC可以用较小的开销(软硬件规模、存储要求、带宽)实现较高的安全性,是一种能够提供高比特强度的公钥加密体制。
二、OpenSSL简介
三、椭圆曲线加密体制及其实现
椭圆曲线加密体制的两种常用算法是EC-ELGamal与Men-ezes-Vanstone。其中,EC-ELGamal算法是基于椭圆曲线的ELGamal型加密体制,其基本思想是将椭圆曲线的点加和点乘运算类比为有限素域上的运算,加密实施中要求将明文编码为椭圆曲线上的点。Menezes-Vanstone算法利用屏蔽明文的方法避开了明文嵌入的问题。本系统利用OpenSSL-1.0.0提供的椭圆曲线进行密码系统的设计与实现。下面对两种椭圆曲线加密体制的算法进行介绍并附上用C语言设计的程序主要实现代码。
1、EC—ELGamal加密算法及其实现
(1)EC-ELGamal算法加解密及通信的过程
EC-ELGamal算法:
①选定椭圆曲线Ep(a,b),并取椭圆曲线上点G作为基点。
②用户B选择一个私有密钥k,并生成公开密钥K=kG。
③用户B将Ep(a,b)和点K,G传给用户A。
④用户A接到信息后,将待传输的明文编码到Ep(a,b)上一点M1,并产生一个随机整数r。本程序设计中随意选择G作为待加密的信息M1为例,也可以选择椭圆曲线上的其他点。
⑤用户A计算密文C1=G+rK;C2=rG。
⑥用户A将密文CI、C2传给用户B。
⑦用户B接到信息后计算M2=C1-kC2,M2即为解密的数据。
(2)OpenSSL实现EC-ELGamal算法主要代码
//加密操作,对点M1(此处以G为例)加密,C2=rG,C1=G+rK,
//其中K为B的公钥。
//OpenSSL里的函数功能:EC_POINT_mul是点乘,EC—POINT_
//add是点加。
EC_POINT_mul(group,C2,NULL,G,r,ctx);
EC_POINT_mul(group,B,NULL,K,r,ctx);
EC_POINT_add(group,C1,G,B,ctx);
//解密操作,对得到的(C1,C2)解密得到M2=Cl-kC2
EC_POINT_mul(group,R,NULL,C2,k,ctx);
EC_POINT_invert(group,R,ctx);
EC_POINT_add(group,M2,Cl,R,ctx);
M2即为经过解密得到的椭圆曲线上的点,与被加密的明文点M1进行比较,证明解密所得的点的坐标与被加密的数据点的坐标完全相同。此处实际应用中要涉及到用各种编码算法将明文编码到椭圆曲线上的明文点M1,最后再对解密所得的数据M2解码得到原明文。
2、Menezes-Vanstone密码算法及其实现
(1)Menezes-Vanstone算法加密解密及通信的过程
Menezes-Vanstone算法:
③用户A将明文M变换成为有限域Zp中的二元组M=(m1,m2)。
④用户A产生随机数r并计算:
RO=rG
(c1,c2)=rK
R1=clml(modp)
R2=c2m2(modp)
⑤用户A将(RO,R1,R2)作为密文发送给用户B。
⑥用户B接收到密文后计算:
(dl,d2)=kR。
(mll,m22)=(Rldl_1(modp),R2d2_1(modp))即为解密所得数据,与原加密数据(ml,m2)相同。
(2)OpenSSL实现Menezes-Vanstone算法主要代码
//加密操作,对(ml,m2)在有限域zp内赋随意值如下
BN.hex2bn(&ml,”3A2794482D6410697C85FA4643BAIDAEA76FFAE6EC26A2C8");
BN_hex2bn(&m2,"AF7DF34CDA2DF2ACC65C31BE95A3888FC5DCC704461308EC");
//取参数p,a,b,其中p后面要用到
EC_GROUP_get_curve_GFp(group,p,a,b,ctx);
//r为取的随机数,计算RO=rQ
EC_POINT_mul(group,RO,NULL,Q,r,cLx);
//计算C=(cl,c2)=rK
EC_POIN'r_mul(group,C,NULL,K,r,ctx);
EC_POINT_get_affine_coordinates_GFp(group,C,cl,c2,ctx);
//计算Rl=clml(modp),R2=c2m2(modp)
BN_mod_mul(R1,cl,ml,p,ctx);
BN_mod_mul(R2,c2,m2,p,ctx);
//解密操作,首先计算D=(dl,d2)=kRO,BN_mod_mul函数是
//进行模乘运算
EC_POINT_mul(group,D,NULL,RO,k,ctx);
EC—POINT—get一affine-coordinates_GFp(group,D,dl,d2,ctx);
//分别取dl与d2对p的模逆此处分别记为dll与d22
BN_mod_inverse(dll,dl,p,ctx);
BN_mod_inverse(d22,d2,p,ctx);
//解密(rull,m22)=(Rldl-1(modp),R2d2-1(modp))
BN_mod_mul(mll,R1,dll,p,ctx);
BN_mod_mul(m22,R2,d22,p,ctx);
此处(mll,m22)经数据转换输出十六进制数据为:
mll:3A2794482D6410697C85FA4643BAIDAEA76FFAE6EC26A2C8
m22:AF7DF34CDA2DF2ACC65C31BE95A3888FC5DCC704461308EC
结果证明(mll,m22)与(m1,m2)相同,加密解密成功。
四、安全密码系统结构及分析
本系统基于arm9开发板搭建arm-linux系统,用OpenSSL软件包开发了完整的加解密程序,验证OpenSSL在arm-linux平台上实现的可行性及易用性和安全性。实验结果在主机的Linux操作系统中的rmmcom串口终端中显示。现对该安全加密系统的系统结构、搭建步骤、实验分析进行介绍。
1、安全密码系统结构
本嵌入式平台安全密码系统的结构如图1所示。
图l中各部分的功能简介如下:
(1)嵌入式硬件平台是安全加密系统的硬件基础,本系统采用ann9核心开发板,并可根据功能需求进行扩展。
(2)嵌入式操作系统是安全加密系统的系统平台,本系统采用了标准的Linux操作系统。
(4)安全系统应用层提供基于安全加密的应用服务。
2、软硬件平台介绍
本系统平台采用以arm9为核心并移植Linux操作系统的嵌入式开发平台,基本的软硬件参数如下:
(1)CPU处理器
SamsungS3C2440A,主频400MHz,最高频率达到533MHz。
(2)SDRAM内存
64MSDRAM,32位数据总线。
(3)FLASH存储器
64MNandFlash存储器;2MNorFlash存储器。
(4)接口和资源
1个10M以太网RJ-45接口(采用DM9000网卡芯片);3个串行通信接口;1个USBHost接口;1个USBSlaveB接口。
(5)移植Linux版本2.6.31
3、实验步骤
(1)主机搭建arm-linux-gcc交叉编译环境,用于对软件库及应用程序进行交叉编译。
(2)向ann9开发板上移植经过裁剪的Linux操作系统,构成基本的arm-linux软硬件开发平台。
(3)下载OpenSSL-I.0.0并用交叉编译器arm-linux-gcc交叉编译并生成静态函数库,并向开发平台移植静态函数库。
(4)将两种加密系统的完整代码分别用arm-linux-gcc交叉编泽,将生成的可执行程序移植到arm-linux平台上运行。
4、实验分析
通过对椭圆曲线的两种算法的程序进行测试分析表明:
(1)两种椭圆曲线密码体制的程序都能准确进行加密解密,程序运行正常。同时,两种密码体制的安全性都是基于椭圆曲线离散对数问题(ECDLP)。
小知识之OpenSSL
OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
欢迎访问夏冰加密软件技术博客,您的数据安全知识库和加密技术资讯平台。我们致力于提供最新的加密技术动态、深入的行业资讯以及实用的软件使用技巧,帮助您在数字时代中保护好每一比特的数据。