解密时:
①私有密钥(d,N);②明文M=CdmodN
2.3、实现RSA快速加密
由RSA的基本原理可以看出,要快速实现RSA关键是大数的模幂运算,下面主要讨论怎样实现快速的长整数的模运算和乘幂运算
2.3.1、乘幂运算的快速实现
1M—ARY算法
在这里我们采用了一种适应的M—ARY算法,首先我们介绍一下M—ARY算法将E写为2进制表示法,设E为k位的,E=(Ek-1Ek-2………E0),将r位作为一组,令m=2r,算法如下:
1.求出M2,M3,。
。
。
。
。
。
。
Mm-1modN
2.令C:
=1
3.对于i=t-1,t-2,………..1,0重复计算:
(a)C:
=CmmodN(实际的运算是通过r次C:
=C2modN次运算得到的)
(b)若Ei≠0则C:
=C×MEimodN
所得C即为所求
由上面的算法可看出平均计算量为:
(1)预算M2。
。
。
。
。
。
。
Mm-1:
m-2=2r-2
(2)平方的次数:
k
(3)3(b)的执行乘的次数:
(2r-1)×k/(2r×r)+2r-2
我们可以看出这三部分构成了该算法的主要运算量,只要能减少任一部分,则计算乘幂的时间还可以减少,注意到平方的计算次数只与E的位数k有关,没法再减少其计算量,下面引入的适应性M—ARY算法即固定性非零窗口滑动窗口算法(CLNW)就是在M—ARY基础上的改进算法,其目的是减少其他两个部分的计算量
2.4、Montgomery模乘算法改进的RSA算法实现
2.4.1、改进的模乘算法
在Montgomery算法基础上,RSA整个加密系统包括匹配、模指数和再匹配三部分。
见下图
图
(2)
加密系统
2.4.2、2个CSA加法器的Montgomery模乘算法
1)目前使用2个CSA加法器的Mountgomery模乘算法:
算法1:
输入:
A,B,N(modulus)
输出:
P=(AB2-n)modN
n:
numberofbitsinA
Ai:
ithbitofA
S0:
thelowestbitofS
步骤1:
P=0;S=0;C=0;
步骤2:
fori=0ton-1do
2a:
(S,C)=S+C+AiB
2b:
(S,C)=S+C+S0N
2c:
S=Sö2;C=Cö2
步骤3:
P=S+C
步骤4:
if(P>N)P=P-N
步骤5:
return(P)
结果为REDC(A,B)=AB2-(n+2)modN.
2)一个CSA的Montgomery模乘算法
由于目前采用的改进Montgomery模乘算法实现时,使用了2个CSA加法器,虽然每个加法可以在一个时钟周期完成,但是随着加密数据长度n的增加,所需加法单元也会越来越大.例如n=1024bit时,也需要2048个加法单元,因此,所使用的硬件资源仍然很大.为了节省硬件资源,同时加快模乘
算法,本文对模乘算法做了相应的改进
算法2
输入:
A,B,N(modulus)
输出:
P=(AB2-n)modN
n:
mumberofbitsinA
Ai:
ithbitofA
S0:
thelowestbitofS
C0:
thelowestbitofC
B0:
thelowestbitofB
R:
precomputedvalueof(B+N)
步骤1:
P=0;S=0;C=0
步骤2:
fori=0ton-1do
2a:
if(S0=C0)andnotAithen:
L=0
if(S0≠C0)andnotAithen:
L=N
ifnot(S0xorC0xorB0)and
Aithen:
L=B
if(S0xorC0xorB0)andAi
then:
L=R
2b:
(S,C)=S+C+L
2c:
S=Sö2;C=Cö2
步骤3:
P=S+C
步骤4:
if(P>N)P=P-N
步骤5:
return(P)
结果为REDC(A,B)=AB2-(n+2)modN.
算法一图(3)算法二
2.4.3、实现RSA加密系统的结构图
由于CPA加法器是一种进位传播加法器,如果进行高比特的加法,不仅需要较多的硬件资源,而且会有很大的时延,因此不利于系统时钟频率的提高.为了保证整个加法能够在一个时钟周期完成,提高Montgomery模乘算法的时间和工作效率,需使用CSA加法器替代模乘算法中的CPA加法器。
在CPA加法中,执行1024bit的加法需要32个时钟,为了适应该加法结构,输入的1024bit寄
存器包括32bit的寄存器.使用32bit的CPA加法器和移位寄存器,减少了硬件资源.同时,移位寄存器也使32bitIöO接口成为可能.基于L2R的实现Montgomery算法的RSA处理器的结构框架图如图4所示.
图(4)
三、硬件加密
3.1、长整数模运算的快速实现
通常的长整数模运算都是用加减法来完成的,因为PC机的加减法指令的执行速度比乘除法要快得多,利用加减法可以使指令的执行速度大幅度的提高,但对于C54X则不同,C54X芯片中的17bit*17bit专用乘法器使得其乘法指令的执行只需一个时钟周期,与加减指令的速度完全相同,这样就要考虑更多地用乘法来完成模运算
假设要做运算R=TmodN(3.1.1)
其中N为k位的长整数,T为2k位的长整数,设字长为m,则N共有n=k/m个字,T有2n个字,同时记X=2m
将T写为表达式:
T=T1×2k+T0(3.1.2)
并将T1表示为:
T1=tn-1Xn-1+tn-2Xn-2+……….+t0(3.1.3)
将式(3.1.2)和(3.1.3)代入式(3.1.1)即得
R=(tn-1×(X2n-1modN)+tn-2×(X2n-2modN)+…….+t0×(XnmodN)+T0)modN(3.1.4)
从(3.1.4)式可看出,可以预求n个Xn+ImodN的值,分别记为:
r0=XnmodNr1=Xn+1modN…………rn-1=X2n-1modN
有R1=tn-1×rn-1+tn-2×rn-2+……..+t0×r0+T0(3.1.5)
执行完式(3.1.5)之后,R1的k比特以上部分(记为R11)的位数不会超过
m+㏒n,对于C54X,m=16,只要选择的k<16*28=4096,R11的位数就不会超过24,这样,可以选择X=28重复式(3.1.5)的操作,这时的预表中只要如下三项即可:
r10=2kmodNr11=2k+8modNr12=2k+16modN
记R11=(r12×X2+r11×X+r10)(3.1.6)
则可执行操作:
R2=r12×r12+r11×r11+r10×r10(3.1.7)
执行完(3.1.7)后,R2的k比特位以上的部分(记为R21,低k比特的部分记为R20)的最大长度为10比特,这是对乘/累加的利用已达到最大限度,接下来必须进行加减法的操作,构造预表如下:
r20=2kmodNr21=2k+1modN……..r29=2k+9modN
这时可以执行如下操作:
forI=1to10do
ifR2i的第i位是1thenbegin
R20=R20+r2i
If(R20>N)thenR20=R20-N
End
这样得到的结果R20就是最后的结果R
由上面的算法可见,整个模运算是由三步组成的,其中前两步是将加减法转换为乘/累加来做的,第三步的加法循环只有10次,这充分利用了C54X芯片的乘法优势,使模运算的速度有了很大的提高。
完成一次模运算的时间为用减法完成模运算时间的38.5℅.
3.2、TMS320C54X芯片的特点,及编程过程中应注意的地方
(1)芯片共有3条数据总线,1条程序总线,4条相应的地址总线,多条数据总线可同时读取多个数据,使得C54X具有功能强大的指令集。
很多指令的效率很高。
(2)8个辅助寄存器使得程序编制更灵活。
(3)有2个40-bit累加器,1个17-bit×17-bit乘法器,可很方便的进行乘/累加运算,另外单指令周期的乘法指令使模运幂运算的速度大幅度提高。
(4)320C54X芯片采用了六级流水线机制,但没有解决流水线相关的问题,因此在编程时必须注意指令的连接关系,必要时要加上空操作,合理调配指令顺序,尽量减少指令的相关性,可大大提高程序的运行速度。
(5)许多指令都分为有符号数和无符号数两种,应根据所用数的类型选用指令。
(6)TMS32054X芯片的地址形成方式比较特殊,16位地址的高9位由DP给出,低7位由指令给出,这样使得直接寻址的指令的执行速度比较快,但必须先将DP设置为正确的值。
因此在程序调试过程中,数据的存储位置尚未完全确定,最好避免利用DP寻址的指令,防止由于存储位置的变化引起程序运行错误。
四、参考文献
[1]卢开澄.计算机密码学[M].北京:
清华大学出版社,1998.81-96
[2]周建江,戴明桢,等.TMS320C54XDSP结构、原理及应用[M].北京:
北京航空航天大学出版社,2001.1-60
[3]阮飞.当前我国信息安全领域面临的重大问题.信息安全与通信保密,2003(12)
[4]佟晓筠,王翥,郭长勇,等.基于RSA等算法软件加密技术的研究
与实现.微处理机,2003(6):
[5]何彩燕,吴红.公钥制RSA算法应用中要注意的几个问题.现代计算机,
2004,178(5):
[6]尹勇,欧光军,关荣锋.DSP集成开发环境CCS开发指南.北京:
北
京航空航天大学出版社,2003
五、课程总结
1、第一章离散时间信号与系统
数字信号是由模拟信号经过采样得到离散时间信号,在经过量化和编码最终得到的。
在采样的过程中,他的采样频率必须高于两倍信号的最高频率,则整个连续信号就可以完全用它的采样值来代表,而不会丢掉任何信息。
任何一个时间离散信号都可以用单位脉冲序列信号及其移位的线性组合来描述他。
单位阶跃信号和他的移位的线性组合可以用来描述一个离散时间的持续时间。
判断一个系统是否为线性系统:
Linearsystem:
齐次性与叠加性
即y1(n)=T[x1(n)],y2(n)=T[x2(n)]
y(n)=T[ax1(n)+bx2(n)]=ay1(n)+by2(n)
*加权信号和的响应=响应的加权和。
Time-invariant:
时不变特性
即y(n-n0)=T[x(n-n0)]
所有
存在一个最小的正整数
满足:
则称序列
是周期序列,周期为
。
两个序列中只要有一个是无限长序列,则卷积之后是无限长序列,卷积是线性运算,长序列可以分成短序列再进行卷积,但必须看清起点在哪里。
Z变换是分析离散信号与系统的一种有力的数学工具,他类似于拉普拉斯变换之对连续信号与系统。
在离散时间系统分析中,从对系统数学模型的求解方法来讲,基本可以分为时域方法和变换域方法两类,时域法是直接分析时间变量的函数研究离散时间系统的时域特性。
第二章离散傅里叶变换
离散傅里叶变换建立了有限长序列与离散频谱之间的联系,他在理论上具有重大意义。
DFT隐含有周期性,周期为N,
有限N长序列x(n)的N点离散傅里叶变换(DFT)X(k)也可以定义为x(n)的周期延拓序列X((n))N的离散傅里叶级数(DFS)的主值序列。
周期序列的主周期序列指把周期序列截取主周期0——N-1得到的有限长序列。
循环卷积的计算方法,循环卷积与线性卷积的关系,用DFT计算线性卷积的方法。
设x1(n)(0≤n≤M-1),x2(n)(0≤n≤N-1)
循环卷积:
L取M、N中较长的一个(设M>N,则L=M)。
较短的一个需要补0至L(两个序列的长度要求相等)。
循环卷积可以用DFT(FFT)实现;
用循环卷积实现线性卷积:
L≥M+N-1
若不满足这个条件,则只在N-1≤n≤M-1范围内两者相等。
DFS
DFT
线性
线性
序列移位
循环移位
共轭对称性
共轭对称性
周期卷积
循环卷积
圆周卷积和线性卷积的对比
圆周卷积
线性卷积
针对FFT引出的一种表示方法
信号通过线性系统时,信号输出等于输入与系统单位冲激响应的卷积
两序列长度必须相等,不等时按要求补足零值点
两序列长度可以不等
如x1(n)为N1点,x2(n)为N2点
卷积结果长度与两信号长度相等皆为N
卷积结果长度为N=N1+N2-1
第三章快速傅里叶变换
DFT在数字信号处理起着非常重要的作用,而这是与DFT存在着高效算法,即FFT。
他不是一种新型变换,而是减少DFT计算量的一些高效算法。
FFT的运算量的计算,与DFT运算量的比较
N点的FFT的运算量为
复乘:
CM=(N/2)M=(N/2)log2N
复加:
CA=NM=Nlog2N
N点的DFT的运算量为
复乘:
CM=N2
复加:
CA=N(N-1)
第四章数字滤波网络
数字滤波器的功能本质上是将一组输入数字序列通过一定的运算后转变为另一组输出数字序列,其结构表示需要采用加法器,乘法器,延时器等。
IIR滤波器的结构和信号流图:
直接型;级联型;并联型。
FIR数字滤波器的结构和信号流图:
直接型;快速卷积型、频率采样型。
FIR数字滤波器:
非递归结构,无反馈,但在频率采样结构等某些结构中也包含有反馈的递归部分。
级联型结构简化了滤波器发的实现方式,采用一些二阶节,通过适当的系数变换就可以实现整个系统,并且各级联形式子系统的零,极点就是整个系统的零,极点,所以调整子系统系数可以直接控制系统的传输特征。
第五章滤波器设计原理
滤波器是一种具有一定传输特性的信号处理装置。
从广义上讲,凡是有能力进行信号处理的装置都可以成为滤波器。
但一般所讲的滤波器是一种选频器件,他对某些频率的信号衰减很小,允许信号通过,而对其他不需要的衰减很大,尽量阻止这些信号的通过。
比较成熟的几种滤波器:
Butterworth滤波器,Chebyshev滤波器。
对滤波器的技术要求:
中心频率,通带带宽,通带插入损耗,通带波动,阻带衰减。
第六章IIR数字滤波器的设计
第八章数字信号处理的实现及应用
自从数字信号处理器(DigitalSignalProcessor)问世以来,由于它具有高速、灵活、可编程、低功耗和便于接口等特点,已在图形、图像处理,语音、语言处理,通用信号处理,测量分析,通信等领域发挥越来越重要的作用。
随着技术成本的降低,控制界已对此产生浓厚兴趣,已在不少场合得到成功应用。
DSP在多媒体通信中的应用,多媒体包括文字、语言、图像、图形和数据等媒体。
多媒体信息中绝大部分是视频数据和音频数据,儿数字化的音、视频数据的数