针对嵌入式系统中信息安全的特点,选择椭圆曲线公钥加密体制ECC( Eniptic Curves Cryptosystem)作为加解密系统体制,应用开源安全软件开发包OpenSSL作为密码库开发了加密和解密系统。

一、椭圆曲线加密体制

椭圆曲线加密体制ECC是基于椭圆曲线离散对数问题( ECDLP)的一种公钥加密体制,我们采用大素数有限域GF(p)上的方程y2=x3+ax+6(modp),这里p是大素数,a和b为两个小于p的非负整数,它们满足:4a3+27b2 (mod p)≠0。椭圆曲线离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对Q=kP,可以证明由k和P计算Q比较容易,而由Q和P计算尾则比较困难。由于椭圆曲线密码体制ECC所具有的特点,ECC可以用较小的开销(软硬件规模、存储要求、带宽)实现较高的安全性,是一种能够提供高比特强度的公钥加密体制。

二、OpenSSL简介

OpenSSL是一个用来开发网络安全软件的开源软件包,不仅实现了SSL协议,而且拥有功能强大的密码库。OpenSSL采用C语言作为开发语言,有优秀的跨平台性能。OpenSSL包括三个部分:SSL协议库,加密算法库,应用程序。其中加密算法库实现了大部分主流的加密算法和标准,包括对称加密算法,公开加密算法,散列函数算法,数字证书标准等。任何人都可以免费使用OpenSSL来实现消息摘要、文件加密和解密、数字证书、数字签名和随机数字产生等功能,以及解决信息的安全传输问题。使用OpenSSL可以缩短软件开发周期,提高软件的运行效率和稳定性。本系统中使用的OpenSSL-1.0.O版本有椭圆曲线加密体制的支持,可以基于OpenSSL软件包提供的椭圆曲线相关函数构建完整的椭圆曲线密码体系方案。由于其良好的跨平台及程序可移植性,可以方便地移植椭圆曲线密码系统到arm-linux平台或其他种类嵌入式平台系统。

三、椭圆曲线加密体制及其实现

椭圆曲线加密体制的两种常用算法是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算法:

①选定椭圆曲线Ep(a,b),并取椭圆曲线上点G作为基点。

②用户B选择一个私有密钥k,并生成公开密钥K=kG。

③用户A将明文M变换成为有限域Zp中的二元组M=(m1,m2)。

④用户A产生随机数r并计算:

RO=rG

(c1,c2)=rK

R1=clml( mod p)

R2=c2m2( mod p)

⑤用户A将(RO,R1,R2)作为密文发送给用户B。

⑥用户B接收到密文后计算:

(dl,d2) =kR。

(mll,m22)=(Rldl_1(mod p), R2d2_1(mod p))即为解密所得数据,与原加密数据(ml,m2)相同。

(2)OpenSSL实现Menezes-Vanstone算法主要代码

//加密操作,对( ml,m2)在有限域zp内赋随意值如下

BN.hex2bn(&ml,”3A2794482D6410697 C85 FA4643BAI DAEA76 FFAE6EC26A2C8");

BN_hex2bn( &m2,"AF7DF34CDA2DF2ACC65 C31BE95 A3888FC5DCC7 04461308EC");

//取参数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( mod p),R2=c2m2( mod p)

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( mod p),R2d2 -1( mod p))

BN_mod_mul( mll, R1 ,dll ,p,ctx);

BN_mod_mul( m22, R2, d22 ,p, ctx);

此处( mll,m22)经数据转换输出十六进制数据为:

mll: 3A2794482D6410697C85 FA4643BAIDAEA76FFAE6EC26A2C8

m22: AF7 DF34CDA2DF2 ACC65 C31BE95 A3888 FC5 DCC704461308EC

结果证明(mll,m22)与(m1,m2)相同,加密解密成功。

四、安全密码系统结构及分析

本系统基于arm9开发板搭建arm-linux系统,用OpenSSL软件包开发了完整的加解密程序,验证OpenSSL在arm-linux平台上实现的可行性及易用性和安全性。实验结果在主机的Linux操作系统中的rmmcom串口终端中显示。现对该安全加密系统的系统结构、搭建步骤、实验分析进行介绍。

1、安全密码系统结构

本嵌入式平台安全密码系统的结构如图1所示。

椭圆曲线加密系统之OpenSSL嵌入式

图l中各部分的功能简介如下:

(1)嵌入式硬件平台是安全加密系统的硬件基础,本系统采用ann9核心开发板,并可根据功能需求进行扩展。

(2)嵌入式操作系统是安全加密系统的系统平台,本系统采用了标准的Linux操作系统。

(3) OpenSSL层实现了SSL安全套接字层协议及其相关加密解密的支持。

(4)安全系统应用层提供基于安全加密的应用服务。

2、软硬件平台介绍

本系统平台采用以arm9为核心并移植Linux操作系统的嵌入式开发平台,基本的软硬件参数如下:

(1) CPU处理器

Samsung S3C2440A,主频400MHz,最高频率达到533MHz。

(2) SDRAM内存

64M SDRAM,32位数据总线。

(3) FLASH存储器

64M Nand Flash存储器;2M Nor Flash存储器。

(4)接口和资源

1个10M以太网RJ-45接口(采用DM9000网卡芯片);3个串行通信接口;1个USB Host接口;1个USB Slave B接口。

(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)。

(2) EC-ELGamal密码体制要求将明文编码为椭圆曲线上的点,还要考虑明文嵌入算法增加程序代码量及运行总时间的因素,在实用性上存在缺点。同时,EC-ELGamal密码体制存在密文相关问题(当如果攻击者已知部分明文mx,攻击者可以通过椭圆曲线方程推得my)。

(3) Menezes-Vanstone利用屏蔽明文的方法避免了明文嵌入的问题,但同时此算法也存在两种缺点:信息扩展问题(明文ml、m2被扩展成密文RO、Rl、R2,增加了存储空间和传输带宽需求)、密文相关问题(如果攻击者已知部分明文ml及其对应的密文,则他可以通过计算得到m2)。

(4)加解密速度比较。在素数域内选择密钥长度依次为192位、224位、256位、384位、521位。不考虑明文嵌入问题,统计EC-ELC amal加解密程序对基点Q进行加解密的程序运行时间,同时统计Menezes-Vanstone加解密程序对同样的Q点进行加解密的程序运行时间,表1为统计所得时间对比表。

椭圆曲线加密系统之OpenSSL嵌入式

对表1分析得出:①即使不考虑明文嵌入问题,Menezes-Vanstone在各种密钥长度的加解密速度上已经高于EC -ELGamal;②随着密钥长度逐渐增大两种算法加解密时间的增加幅度上区别不大。

小知识之OpenSSL

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。