超混沌加密算法及其软件实现

混沌同步保密通信和信息加密是近年发展起来的新研究领域,利用混沌变量的宽带、似噪声特性、以及对初始状态极为敏感的特点,可以设计出超混沌加密算法。由于其处理速度和密钥长度无关,因此超混沌加密算法的计算效率较高,安全性好。那么今天,就给大家介绍一下这种超混沌加密算法。

一、超混沌加密算法描述

1、超混沌加密算法原理

一般混沌系统是一种典型的三维现象,其特点是只有一个正的李雅普诺夫指数,其运动轨迹只在某个方向上产生不稳定性。在自然界中普遍存在高维非线性系统,它们有不止一个正的李雅普诺夫指数,其运动轨迹在两个以上的方向出现指数型的发散轨迹,这种混沌态被称为超混沌。

从安全性的角度考虑,因为超混沌系统比低维混沌系统具有更复杂的相空间,用它设计的加密算法不易被一类基于混沌同步的分析方法破译。

2、超混沌加密算法实现过程

以用Rossler系统和Lorenz系统构造的超混沌系统为例,加密端方程式:

式中,s——中间变量,s—m+3×2;c——密文,c一10x5+30s/x6; m——明文。

解密端方程式:

式中,s1为解密端方程中的中间变量,s1=(c-10y5)y6/30;c——密文。

恢复的明文为mr=s1-3y2

如果加密端方程与解密端方程的参数、初始状态完全相等,且没有信道传输差错,则密文能精确恢 复到明文,即有mr=m。

二、超混沌加密算法的软件实现

对超混沌系统采用欧拉法进行数值积分,步长取0.01。程序用Vc++6.0编写。加密软件面向二进制数,使之适用于任何文件类型。以64位为一个单元进行处理。加密时,将读入的二进制数和经放大的混沌信号进行异或运算,解密时作同样处理。处理前后的文件字节数不变。

程序根据用户输入的口令对混沌系统的参数、初始状态和程序运行参数进行重载。将口令通过安全通道传送给接收方。接收方输入相同的口令才能解密。设置了高、标准、低三档保密级别,默认值为标准。

程序的主要流程如下:

1、启动程序进入主窗口,内部预置为标准加密强度,允许打开文件操作;

2、用户选定加密/解密功能、加密级别,并打开文件后,允许输入口令操作;

3、输入口令并检查合格后,界面线程启动,允许“开始处理”按钮;

4、工作者线程启动,根据从界面线程处获得的信息开始加密或解密,并允许中断操作,此时界面线程等待用户中断和工作者线程消息;

5、若收到用户中断命令,立即中断工作者线程的执行,否则直到加密/解密完成;

6、界面线程收到工作者线程加密/解密完成消息后,终止工作者线程,整理界面,恢复界面初始状态,并准备好下一次加密/解密前的工作。

三、超混沌加密算法的安全性分析

经过加密,真实信号完全被混沌信号淹没,在信号通道传送的是混沌信号。由于混沌信号的频谱宽、形似噪声等特点,使攻击者很难从中提取真实信号。

真实信号和混沌信号不是进行简单的相加运算,而是异或运算,得到的结果已偏离原来的混沌吸引子,因此用统计分析方法,或用相空间重构等方法估计混沌系统的参数,都是无效的。此外,超混沌系统的相对空间较复杂,增加了破译的难度。

通过以上分析说明,超混沌加密算法能抵御一类针对混沌的分析破译方法。

综上所述,超混沌加密算法可用于任何类型文件的加、解密,超混沌算法的安全性好,解密精确恢复,速度满足一般文件加密系统的要求。

小知识之欧拉法:

欧拉法(euler method)是以流体质点流经流场中各空间点的运动即以流场作为描述对象研究流动的方法

小波域数字水印加密算法

随着数字媒体(数字图象、数字音频、数字视频)的广泛应用,媒体信息的数字化和网络化特征为版权保护问翘带来了难度。近年来,数字水印技术作为对传统加密方法的有效补充手段,引起了人们的高度重视,基于小波域的数字水印加密算法,因其本身具有良好的空间频率特性和多分辨率表示的优点更是人们研究的焦点。

小波域的数字水印加密算法

1、水印结构

水印信息一般分为无意义水印和有意义水印。

无意义水印大多采用伪随机信号作为水印,伪随机信号可用伪随机噪声的扩频序列来产生。这种水印模型的建立方法,在不同程度上克服了一般统计特征的数字水印易受非线性变换方法攻击的缺点。

有意义水印在版权证明上较无意义水印更具有直观性和可验证性。这种水印构成方法在抗击剪切、缩放等几何变形攻击时,可减小查找水印的范围和复杂度,提高检测效率。

2、小波域的数字水印嵌入加密算法

小波水印的嵌入流程如图所示:

水印嵌入的位置主要为小波分解后的低频域和高频域。

2.1、低频域水印嵌入加密算法

该方法是针对原图小波分解后近似子带的系数进行水印嵌入。近似子带代表图象中平坦的部分,具有较高的感觉容量,嵌入水印的鲁棒性强。该类方法对高频滤波、有损压缩都有较好的抗攻击性。但同时正因为低频分量直接影响着图象的质量,水印嵌入容量过大会直接影响图象的视觉效果。

(1)盲水印加密算法

盲水印是指水印检测时,不需原图及其他参考信息,故盲水印的嵌入加密算法也最复杂。但作为公开水印,盲水印的法庭证据效果较好。其盲水印提取在压缩率较大的情况下,检测效果不大理想,主要原因是,未对小波系数进行筛选,部分系数受压缩影响大,因而提高了误码率。

(2)自适应的半盲水印加密算法

自适应的半盲水印加密算法,采取自适应的方式选择嵌入位置,水印嵌入后的视觉效果及检测效率较盲水印要高。

2.1、高频域水印嵌入加密算法

小波分解中低频子带系数的大小大致相同,高频子带的系数遵从拉氏函数分布,大部分系数为0,只有少数代表边缘和高质地的峰值系数包含较大的能量。为了可靠地在细节子带中嵌入水印,可只选择足够大的系数,也可对水印强度加权,使之在重要系数中嵌入更多的能量,嵌入强度一般取决于分解层数、子带方向及能量。

因为高频域信息易受低通滤波和JPEG压缩的攻击,为提高高频域水印加密算法的鲁棒性,经常采用自适应的方法,来提高该类算法的抗攻击能力。

(1)阈值设定法

该类加密算法通过设定阈值,将高频域系数与阈值做比较,选择能量大的系数进行水印嵌入。

其采用嵌入零树小波的方法,将最高分解层的小波系数与给定阈值进行比较,如果小于阈值的系数则被认为是不重要系数,作为父节点(或根节点),其同方向的较低分解层的系数也被认为是不重要系数,作为子节点,从而形成一棵零树。零树树根被编码为特殊字符,以标识整个零树。零树是图象压缩中易被去除的位置,故不进行水印嵌入,反之,在重要系数构成的父节点及相应子孙节点上嵌入水印。

阈值设定法,是通过明确的阈值来判定重要系数,阈值的设定自适应产生。

(2)应用VHS的方法

该方法利用人眼的视觉特征,来选择嵌入位置点及嵌入的水印强度。采取根据各象素点的视觉差异,对嵌入水印权值进行限定的方法。主要考虑的视觉因素有:象素点位于小波分解子带的位置、象素点的亮度和象素周围的纹理情况。因为是对第一层小波系数进行修改,嵌入水印后的图象与原图差异不大,因而受滤波、压缩攻击的影响会较大。

该方法利用人眼视觉特征,反映在小波系数上,即能量大的边缘、纹理相应系数嵌入较大能量的水印信息。

(3)量化方法

该类方法一般是对小波分解后的三个方向的高频系数比较后,中间值量化的方法。因为kundur算法是对细节子带系数未经筛选地嵌入水印,所以属于盲水印范畴。但同时存在细节子带部分系数值太小,或为0的情况,使得量化间隔太小或为0,无法正确嵌入水印,造成水印提取准确率低,抗攻击能力差。

该方法的水印嵌入过程,实际也是一种自适应地选择嵌入位置的过程,通过三个系数的比较,找出合适的嵌入位置。

高频域水印嵌入加密算法,最需要解决的就是,抗JPEG有损压缩和低通滤波的能力问题。因为这两种图象处理去除了一些高频信号,嵌入高频信息中的水印会被同时去除掉。因此嵌入系数的选择若经过精心处理,水印的提取或检测准确率相应会大大提高。另一面,这类水印较低频子带水印嵌入模型的优点在于,其较好的抗噪声、抗切割等几何变形攻击的能力。

利用小波变换把原始图像或原始视频序列分解成多频段的子图像,能适应人眼的视觉特性且使得水印的嵌入和检测可分多个层次进行,小波域数字水印加密算法兼具时空域方法和DCT变换域方法的优点。因此,基于小波域的数字水印加密算法已经成为当前研究的重点。

小知识之数字水印

数字水印(Digital Watermarking)技术是将一些标识信息(即数字水印)直接嵌入数字载体当中(包括多媒体、文档、软件等)或是间接表示(修改特定区域的结构),且不影响原载体的使用价值,也不容易被探知和再次修改。但可以被生产方识别和辨认。通过这些隐藏在载体中的信息,可以达到确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等目的。

IDEA加密算法在电子邮件加密中的应用

电子邮件在网络上以“存储转发”方式传播,一封电子邮件在传送过程中可能要经过若干个中间主机的转发,途中所留下的拷贝,能被非法用户阅读、截获或者篡改。所以提高邮件系统安全性的主要措施之一是对电子邮件加密,这样邮件即使被他人截收,显示的也是一些杂乱的不能读懂的乱码。下面我们就来看看IDEA加密算法是如何给电子邮件加密的。

一、IDEA加密算法简介

IDEA加密算法是对称密码体制中的一种基于数据块的分组加密算法,整个算法包含子密钥产生、文件加密过程、文件解密过程三部分。IDEA加密算法规定明文与密文块均为64b,密钥长度为128b,加密与解密相同,只是密钥各异,其基本工作原理如图所示:

1、_IDEA加密算法文件加密过程

将明文中每64b文件块分成X1,X2,X3和X4四个子块,每一子块16b,令这4个子块作为第一轮迭代的输入,全部共8轮迭代。每轮迭代都是4个子块彼此间及16b的子密钥间进行异或运算、mod 216加法运算、mod(216+1)乘法运算,任何一轮迭代第3和第4个子块互换。最后与4个16b的子密钥进行输出变换,输出Y1~ Y4四个16b密文文件。

2、IDEA加密算法子密钥产生

IDEA加密算法经过8轮迭代,每轮需要6个子密钥,最后一轮还需4个子密钥,因此共需52个16b子密钥块。输入128b密钥k=k1k2…k128,将其分成8个子密钥,每个子密钥16b,依次为:Z1(1)=k1k2…k16、Z2(1)=k17k18…k32、…、Z6(1)=k81k82…k96、Z1(2)=k97k98…k112、Z2(2)=k113k114…k128; Zi(n)表示第n轮迭代中的第i个子密钥。Z1(1) ~Z6(1)作为第一轮的6个子密钥,剩下的Z1(2) 、Z2(2) 作为第二轮的子密钥。再将k向左旋转移位25b得k′=k26k27…k128k1k2…k25,同样将其分成8个子密钥,前4个Z3(2)、Z4(2)、Z5(2)、Z6(2)正好是第二轮的子密钥,后4个作为第三轮的子密钥。继续向左旋转移位25b,直到52个子密钥生成完毕。

3、IDEA加密算法的文件解密过程

IDEA加密算法解密过程与加密过程完全一样,只是解密子密钥是由加密子密钥加法逆或乘法逆构成的,且两者一一对应。如解密运算的第一轮用到的6个子密钥依次是:(Z1(9))-1、-Z2(9)、-Z3(9)、(Z4(9))-1、Z5(8)、Z6(8) 。其中-Zi表示Zi mod 216的加法逆元,即-Zi+Zi≡0 mod 216;Zi-1表示Zi mod (216+1)的乘法逆元,即ZiZi-1≡1 mod (216+1),其它依此类推。

二、IDEA加密算法在电子邮件加密中的应用

1、电子邮件加密的实现

电子邮件正文加密,首先定义CIdea类对象,调用SetKey()函数提供对称密钥,然后EnString()调用IDEA算法实现邮件加密。该函数首先根据加密密钥UserKey调用en_key_idea()生成加密子密钥块,然后打开邮件正文,获得邮件正文的长度,并用空字符将其补成8倍数的长度,然后将其按每64b依次分块读出并调用cipher_idea()函数加密每个64b组,并将加密后的字符串存储,直到邮件正文字符串全部加密完毕,跳出循环。

在电子邮件负责传输的类SMTP中加密响应函数的部分关键代码如下:

_void OnCheckEncrypt()

_{ CIdea idea; CString temp;

int len=m_strBody.GetLength();//获得邮件正文长度

if(m_btnEncrypt.GetCheck())

{ char*pszKey=m_strKey.GetBuffer(MAX_MAIL_LENGTH);

char*pszBody=m_strBody.GetBuffer(MAX_MAIL_LENGTH);

char*pszTemp=temp.GetBuffer(MAX_MAIL_LENGTH);

pszTemp[len+1]=’\0’; idea.SetKey((unsigned char*) pszKey);//提供对称密钥

idea.EnString((unsigned char*) pszBody,(unsigned char*) pszTemp);

m_strAfterEncrypt=temp+”\0″;//保存加密后字符串

MessageBox(“邮件已被成功加密!”);

GetDlgItem(IDC_EDIT_KEY) ->EnableWindow (FALSE);

}

else {GetDlgItem(IDC_EDIT_KEY) ->EnableWindow (TRUE);}

}

2、电子邮件解密实现过程

电子邮件解密过程与加密过程基本类似,其具体实现是:先定义CIdea类对象,调用SetKey()设置对称解密密钥,然后DeString()调用IDEA加密算法进行邮件解密。该函数首先根据解密密钥并调用函数de_key_idea()生成解密子密钥组。双击已接收的对应邮件主题,打开要解密的邮件密文,接着进入一个循环过程:读取要解密的字符串,用空字符将密文补成8倍数的长度,然后将其按每64b分组,并调用cipher_idea()函数解密每个64b分组,并将解密后的字符串存储。直到全部分组解密完毕,跳出循环。

在电子邮件负责接收的类POP3中解密响应函数的部分代码如下:

void OnButtonDecrypt()

{CIdea idea;CString m_strBody,temp; //获取密钥和邮件正文,定义并初始化指向密钥、邮件正文和存放密文空间的指针

idea.SetKey((unsigned char *)pszKey);

idea.DeString((unsigned char *)pszBody,(unsigned char *)pszTemp);

temp.ReleaseBuffer();

m_strKey.ReleaseBuffer();

m_strBody.ReleaseBuffer();

m_strBody=temp+”\0″;

MessageBox(“信件已被成功解密!”);

m_editBody.Clear();

m_editBody.SetWindowText(m_strBody);}

本系统除了基于IDEA加密算法的邮件加密、解密模块外,还集成了邮件发送模块和邮件接收模块,分别通过为smtp协议提供支持的CSMTP类,为pop3协议提供支持的CPOP类,格式化邮件头和邮件体的CMailMessage类来实现。

通过以上步骤,我们可以发现,IDEA加密算法应用于电子邮件系统中是非常有效的。

小知识对称密码:

对称密码术(也称作秘钥密码术)早已被人们使用了数千年,它有各种形式:从简单的替换密码到较复杂的构造方式。不过,数学的发展和计算能力的不断进步使得创建牢不可破的密码成为可能。对称系统通常非常快速,却易受攻击,因为用于加密的密钥必须与 需要对消息进行解密的所有人一起共享。

A5加密算法在雷达网文件加密中的应用

在信息化战争中,抵抗对手的信息进攻,提高对抗中的抗截获、抗干扰能力,保证文件的安全传输迫在眉睫,雷达网文件通信的安全问题就是其中最重要的组成部分。那么我们今天就来讲一下A5加密算法在雷达网文件加密中的应用。

一、A5加密算法原理和特性

A5加密算法是无线接口加密的核心,它是一种典型的基于LFSR的流密码算法,应用于通信两端,既可用于加密又可用于解密,是一种集互控和停走于一体的钟控模型。

A5加密算法包括3个线性移位寄存器LFSR,LFSR-1、LFSR-2、LFSR-3的级数分别为r1、r2和r3。如图所示(图中数字表示抽头)。

A5/1加强型版本中r1=19,r2=22,r3=23,LFSR-1的反馈抽头是18、17、16、13,LFSR-2的反馈抽头是21、20、16和12,LFSR-3的反馈抽头是22、21、18和17。它们的生成多项式分别为:

f1x=x19+x18+x17+x14+1

f2x=x22+x21+x17+x13+1

f3x=x23+x22+x19+x18+1

3个线性反馈移位寄存器的生成多项式均为本原多项式。

A5加密算法的钟控采用大数原则,钟控位置均在LFSR的中间抽头上,依次为第9抽头、第10抽头和第11抽头。设这3个抽头在t1时刻的值依次为x1、x2、x3,则钟控函数可写为:

g(x)=x1x2+x1x3+x2x3

在t时刻x1、x2、x3中和g(x)值相同的LFSR被驱动,不同则被停走,这样每次至少有两个LFSR被驱动。3个LFSR的输出异或后作为密钥输出。

GSM会话每帧含114bit,A5加密算法每次会话产生114bit密钥与所传输数据进行异或;A5加密算法的主密钥长64bit,还有一个22bit的帧号,与主密钥充分混合同样起到控制工作密钥的作用,但帧号周期较短,大约为3.5h。

二、雷达网信道特性和对A5加密算法的改进

雷达网作为专用网络(与其它网络物理隔离),文件通信具有以点对点传输为主、实时性要求高、传输速率较低等特点,因此比较适合流密码的加密体制。

A5加密算法具有较好的设计思想,所产生的密钥流的统计特性很好,且具有适合硬件实现、加密延迟时间短等优点。但同时也存在移位寄存器太短,易被穷尽攻击或直接攻击攻破的缺点。因此在适当提高抗攻击能力后可以作为雷达网文件加密较好的待选算法。

1、提高抗攻击能力有2种实现方案:

(1)除保留主密钥长仍为64bit外,再增加一组辅密钥例如32bit,每次(依时间或字节进行计数)通信主密钥与辅密钥之间进行某些位的相应置换或异或,这样主密钥缓慢更换,可保证更强的抗分析能力,但实现较复杂;

(2)适当加长移位寄存器长度(实际是增加主密钥长度),该方案实现简单但不够灵活,抗攻击能力与主密钥长度直接关联,穷尽攻击的复杂度为2r1+r2+r3。

基于目前实际所需和成本的考虑,我们采用第2种方案,并选定复杂可编程逻辑器件进行开发设计。

三、A5加密算法在雷达网文件加密中的实现

用户进行保密通信时,加密通信如上图所示。

当Ke=Kd,则信道两端产生的工作密钥相同。A用户端所发送明文与A5产生的密钥一次异或得到密文,B用户端用相同密钥再次异或得到明文。

1、A5加密算法的工作流程

具体实现时A5主密钥增至96bit,可使r1=29,r2=33,r3=34,则其复杂度为296,穷尽攻击是不可能的。每次初始化先舍弃产生的前100bit工作密钥,然后开始工作,以防止对手通过开始产生的工作密钥来猜测寄存器内容即主密钥。

该方案基于复杂可编程逻辑器件CPLD实现,使用VHDL语言进行编程,由单片机作为控制处理器.主密钥可以手动输入,也可以通过增加只读存储器ROM作为密钥存储芯片实现系统自动更换。

2、仿真波形及性能分析

A5加密算法的VHDL程序在Lattice公司的ispLEVER软件环境下编译、运行和仿真。仿真波形如图所示:

其中,上图为从初始化到开始工作的时序图。START=1标志系统初始化完毕,开始等待单片机送入明/密文;单片机送入明/密文后,置WORK_EN=1,系统开始工作;加密完毕置ENABLE_OUT=1和WORK_EN=0,等待下一次明/密文送入。下图为加密和解密一个字节的时序图。虽然A5加密算法的加密和解密是逐位进行的,但与单片机交换文件时则以字节为单位进行。单片机每次送入待处理文件前首先要读加密系统存放在地址为00001001的状态字,判断系统是否就绪,送入明/密文后则以查询状态字方式判断是否处理完毕;明/密文与工作密钥WORK_KEY逐位异或;加/解密完毕置状态字为00000101,单片机读出密/明文。

3、A5加密算法在雷达网文件加密中需要注意的问题

雷达网的通信安全不仅取决于加密算法部分,密钥的分发、密钥的管理等方面同样至关重要,任何一个环节的漏洞都会导致系统的安全隐患。因此,要注重系统每一个环节的保密和安全。

在对A5加密算法改进的基础上,结合雷达网文件通信需要,设计了基于CPLD和VHDL的文件加密方案,给出了系统工作的仿真波形。仿真表明,该方案达到了雷达网文件保密通信的需要。

小知识之流密码:

序列密码也称为流密码(Stream Cipher),它是对称加密算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。

Chord加密算法

Chord加密算法就是一种分割文件索引表的方法,它把这张文件索引分割成小块,每一块存放在某几个节点上。当要查询数据时,再通过一定的方式,连接某几个节点上的部分索引表,查找存放存放目标(KV)对索引表的节点,从而获取存放文件的节点地址。

Chord加密算法的实现

Chord协议运行的基础是一致性哈希函数,它把P2P网络中的每一个节点映射为一个哈希值。

Chord协议中的网络节点,都有惟一的一个160比特的节点标识,它是相应节点的IP地址及相关信息通过哈希函数得到。Chord协议把这些节点标识看作是一个圆形的命名空间,每一个节点在逻辑上有且仅有一个圆形的命名空间,每一个节点在逻辑上有且仅有一个前驱和后继。查询关键字的哈希值也映射到这个命名空间上。关键字j的后继(successor)定义如下,如果节点j存在,节点j就是关键字J的后继;否则它的后继是命名空间中比节点j大的第一个节点。在Chord协议中,最基本的操作是查找一个关键字的后继。

在这个网络中有3个节点,假设它们的标示为0,1,3。假设还有3个资源集合,它们的关键字通过哈希函数后的标识为1,2,6。它们的索引分别存储在各自的后继节点上,由于标示为1的节点存在,所以关键字1存放在节点1上;同理,关键字2和6分别存储在它们的后继节点3和0上。

Chord加密算法模型中,即使网络在动态变化时,只须改变少量的数据结构,就可以维护整体网络的一致性。当一个节点n离开时,原本在n上的索引对将转移到n的后继节点上:而当一个节点n加入时,原本n的后继节点上的索引对的一部分转移到n上。如上图中,如果节点3离开后,关键字2的索引将放在节点0上。

每个节点都维护一部分路由表,称为节点的Finger表。节点的Finger表共有log2n项(n为命名空间的大小),其中第i项存放着距离该节点长度为2f+1(0≤f≤0(log2n)的节点的后继信息。例如上图中,由于节点空间大小为8,每个节点维护3条路信息。节点0维护标示为1,2,4的后继节点信息。

节点的Finger表,以冗余的形式存储了所有资源的索引信息。另外,为了维护网络的动态性带来的变化,每个节点还冗余存放相邻节点的Finger表信息,这些节点被定义为该节点的邻居。

Chord加密算法的性能分析

Chord加密算法中,几乎所有的操作都是通过查找关键字K的后继完成的。当一个节点n不知道关键字K的后继时,它会在自己的Finge表中,查找一个比关键字K的后继小但是最接近的一个中间节点。它把查询消息传递给中间结点,这一过程被递归调用直到查询消息到达目标节点。

一般而言,查询过程在圆形命名空间上顺时针进行,每一次查询排出剩余的一半节点,所以hord加密算法是收敛的,查询的最大长度是0(log2n)。当一个节点n加入时,n通过查询距离自己2f+1(0≤f≤0(log2n)处的关键词初始化自己的Finge表,因此初始化一个节点的代价是0(log2n)。为了及时反映网络节点的变化,每个节点都定时发送查询更新自己的Finge表,这个过程被称之为节点的稳定化。

Chord加密算法的优点

虽然Chord加密算法的设计思想简单,但是有以下几个优势:

1、负载平衡

这一优点来自于一致性哈希,也就是一致性哈希中提到的平衡性。所有的节点以同等的概率分担系统负荷,从而可以避免某些节点负载过大的情况。

2、分布性

Chord是纯分布式系统,节点之间完全平等并完成同样的工作。这使得Chord具有很高的鲁棒性,可以抵御DoS攻击。

3、可扩展性

Chord协议的开销随着系统规模(结点总数N)的增加而按照O(logN)的比例增加。因此Chord可以用于大规模的系统。

4、可用性

Chord协议要求节点根据网络的变化动态的更新查询表,因此能够及时恢复路由关系,使得查询可以可靠地进行。

5、命名的灵活性

Chord并未限制查询内容的结构,因此应用层可以灵活的将内容映射到键值空间而不受协议的限制。

Chord加密算法的缺点

在Chord加密算法中,节点标识的分配是随机并且一致地,在关键字空间中,标识很接近的节点在物理网络上可能相聚很远。在数据的查询过程中,Chord加密算法采用跳数判断查询的代价,没有考虑网络延迟等因素,在逻辑上的最优路径花费的代价并非最优。在Chord网络稳定化的过程中,过多的消息发送占用了网络的带宽,影响网络的利用率。

Chord加密算法是国内外最新的研究热点,目前已取得一系列重要的成果,而且在实际工程中也得到广泛的应用。但Chord加密算法在语义查询、网络稳定性和安全方面还有待进一步研究。

小知识之Chord协议

Chord在2001年由麻省理工学院提出,其核心思想就是要解决在P2P应用中遇到的基本问题:如何在P2P网络中找到存有特定数据的节点。

非均匀B-样条曲线的加密算法

非均匀B-样条曲线的加密算法是利用随机生成的节点信息,对非均匀样条曲线形态特征进行调整,从而避免控制点加密曲线散列碰撞问题。由明文生成控制点信息,有效地丰富了非均匀B-样条曲线的几何特征。非均匀B-样条曲线的加密算法计算效率高、散列强度好,能够有效地应用于软件加密过程和身份认证中。

非均匀B-样条曲线的加密算法密钥生成与埋置

密钥一般具备以下3种特性:

(1)由一串固定长度的杂乱无章的字符串表示。

(2)能够随机生成,且尽量唯一。

(3)满足加密算法需要。

在非均匀B-样条曲线的加密算法中,密钥信息用来构建基函数的节点信息,有效调整曲线形态,达到加密曲线形态多样化,从而有效防止密文冲突。专家研究表明,通过调整一个节点使之变大或者变小可以调整B-样条曲线的形状,为B-样条曲线形状调整提供了简便有效的方法。

根据非均匀B-样条曲线基函数要求,密钥序列或密钥变形序列需满足数值非递减,且首尾数值为0和1的特征。在实际编程实现中,可通过以下两个步骤生成密钥。

(1)利用计算机时间获取函数GetSystemTime(&st)获取当前时间,时间包括年/月/日/时/分/秒。

(2)然后对获取的时钟进行变形,映射到N维数值串(N一般取8),且数值满足非递减,为了满足非递减可采取对应字符ASCII值累加,然后除以最大,最后通过对密钥变形得到节点信息串U(u1,u2,…,un),且0=u1≤u2≤…≤un=1。

基于间距的明文变异方法

通常明文是由一串字符组成,该字符串包括字母、数字标点符号或操作符,且字母区分大小写。为了能使明文信息转化为非均匀B-样条曲线的控制点,需要把字符串中的字符转化为坐标点信息(坐标点信息包括横纵坐标值),根据非均匀B-样条曲线的特性,为了构建比较光滑的曲线,控制点应该避免局部交叉,且能保证明文变异是一一对应关系的,从而我们提出的基于间距的明文变异方法是:

假设明文为S =“dfFGE,2WE/Fat”,首先确定起始控制点坐标P0(x0,y0),依次求明文S中各字符对应的ASCII值tn=ASCII(Sn),则P1=(x1,y1)=(x0+ t1,t1),P2=(x2,y2)=(x1+ t2,t2),…,Pn=(xn,yn)=(xn-1+ tn,tn)。使控制点在x轴方向上坐标值累加,避免局部交叉,在y轴方向上保持不变,保持原来的几何形态多变特征。从而明文到控制点数列的映射关系为(P1,P2,…,Pn)= F(S)。

非均匀B-样条曲线的加密算法

由密钥组成非均匀B-样条曲线基函数的节点,0= u1≤u2≤…≤un=1,然后对明文进行基于间距的映射处理,使明文转化为控制点坐标值。根据非均匀B-样条基函数的定义:

利用随机生成密钥,并进行处理得到非均匀B-样条基函数,为了提高非均匀B-样条曲线的加密算法效率,可以设定基函数的次数为有限次(2,6次),并根据非均匀B-样条定义,可求得在该基函数和控制点约束下的非均匀B-样条曲线函数,从而可以从该曲线上获取有用的信息作为密文。根据非均匀B-样条曲线定义(式(1)),得到直角坐标系下x、y分量上的方程为:

由于该曲线是连续的,可以从该曲线上获取无限的坐标点作为密文,根据需求得到密文字符串长度,坐标点可根据t区间的等间距求得。首先获取密文长度L,计算间隔距离S =1/L,密文坐标点为C(xm,ym)=(x(S × m),y(S ×m)),0≤m≤L,然后由密文坐标映射为字符,为了把密文字符串中的字符均匀分布,采用坐标求和然后整体缩放算法,缩放映射为P→M,P为密文坐标点0< m<74,其中0 ~74代表密文的表现形式(大写字母、小写字母和数字),最后通过ASCII转化得到密文。

非均匀B-样条曲线的加密算法

非均匀B-样条曲线的加密算法,属于散列加密算法范畴,能够广泛地应用于软件加密和身份认证领域,非均匀B-样条曲线的加密算法可以根据应用领域不同而进行变形。如下给出算法实现流程及详细实现步骤。

1、输入明文,并对明文进行基于间距的明文变异。

2、根据明文变异信息,生成非均匀B-样条控制点序列。

3、根据时钟信息,随机获取密钥。

4、根据随机密钥生成非均匀B-样条基函数节点序列。

5、通过输入加密次数,构建非均匀B-样条函数,进行基于非均匀B-样条曲线的加密。

6、对曲线加密信息,进行基于坐标值缩放算法的密文处理,获得散列密文,并对密文进行输出。

非均匀B-样条曲线的加密算法加密强度分析

为了适应当前数字化时代对加密算法需要不断创新和更新的需求,非均匀B-样条曲线加密算法有效地利用了样条基函数节点变化对曲线的形态变化影响和算法加密效率比较高的优点。它的加密强度依赖于对密钥的设置长度和对文件加密的输出长度信息。根据非均匀B-样条的局部性特征,密钥作为样条基函数节点信息的变形,密钥的长短势必影响到样条曲线的振荡敏感程度(每个局部都在变化),从而使样条曲线的形态随着密钥的长度增加而丰富。另外,密文作为非均匀B-样条曲线离散点的反映,密文的长度对应着离散点的数量,从而密文越长越能表达曲线几何特征,也越能避免散列碰撞问题。

由于非均匀B-样条曲线的加密算法属于不可逆加密算法,在加密的过程中既要满足加密强度,也要考虑加密时间。对密码的破解一般有两种方法,一种是穷举法,另一种是根据密文和加密算法的加密过程分析进行破译。由于该加密算法属于散列不可逆算法,从而使用穷举法是不可取的。只能在获得加密流程后,通过分析非均匀B-样条的加密算法的加密过程进行解密。非均匀B-样条加密算法的解密关键点在于控制点数及取控制点的规律、取样条次数、取密文长度以及取密文点规律。下表中,我们给出了根据几个关键点对解密时间复杂度的影响。

从非均匀样条函数来看,影响加密时间的主要在于样条次数,非均匀B-样条曲线的加密算法中开放了样条次数的设置,理论上可以选取n次非均匀B-样条进行加密。通过实验表明样条次数控制在2到5之间,加密迅速,适应于软件加密或身份认证需求。在处理器为P43. 0、内存512 M、Windows XP操作系统下进行加密时间测试结果,结果表明,加密效率比较高,适应于软件加密网络化需求。

非均匀B-样条曲线的加密算法有效地利用了非均匀B-样条特征信息,并通过样条曲线丰富的特征信息进行加密散列,在增强加密强度的同时有效地保证了加密效率。非均匀B-样条曲线的加密算法的可扩充性较强,可以通过修改基函数节点布局以及加密长度等信息对加密算法进行扩展,但关于算法散列强度还需进一步的验证和非均匀B-样条的特征信息有待进一步挖掘,从而才能够进一步提高加密强度和效率。

小知识之非均匀B-样条曲线

非均匀B-样条曲线(NURBS),是一种用途广泛的样条曲线,它不仅能够用于描述自由曲线和曲面,而且还提供了包括能精确表达圆锥曲线曲面在内各种几何体的统一表达式。

NTRU加密算法

随着信息技术的迅猛发展和一些高技术武器设备、通信指挥系统等的需要,未来军事部门将大量地使用公钥密码技术。由于RSA 和ECC 加密算法不能抗量子计算攻击,而NTRU加密算法能抗量子计算攻击,且速度快和安全性高,特别别适合用于诸如智能卡,保密蜂窝电话系统,保密传真、无线保密数据网,以及认证系统等业务。

NTRU加密算法简介

NTRU加密算法是1996年由美国布朗大学三位数学教授发明的公开密钥体制。经过几年的迅速发展与完善,NTRU加密算法在密码学领域中受到了高度的重视并在实际应用中取得了很好的效果。

一、参数说明

NTRU加密体制中,选取了三个整数参数(n,p,q)和四个多项式集合Rf,Rg,R_Φ ,Rm,这些集合中的多项式次数小于N-1,系数均为整数。p,q不一定是素数,但必须满足gcd(p,q)=1,而且q远远大于p。

二、NTRU 加密算法密钥的生成

随机生成2 个多项式f∈Rf,g∈Rg,其中f必须满足在模p和模q的情形下均有乘法逆元。如果参数选择合适,大多数的f都有逆元,而且可以通过改进欧几里得算法很容易找到这些逆元。用Fp,Fq分别表示这两个逆元,即

Fq_f ≡1(modq)

Fp_f ≡1(modp)

然后,计算

h≡Fq_g_(modq)

多项式h即为公钥,私钥为f,实际上Fp,Fq也必须保密。

三、NTRU加密算法加密过程

假设要加密的消息m∈Rm,随机选取多项式φ∈Rφ,然后利用公钥h进行如下运算:

e≡Pφ_h_+m(modq)

多项式e为消息m对应的密文。

四、NTRU加密算法解密过程

收到密文e后,可利用私钥f进行解密。Fp必须预先计算。解密首先计算

a≡f_e(modq)

其中选取多项式a的系数在区间[-q/2,q/2]内。然后通过如下计算恢复明文:

Fp_a(modp)。

五、NTRU加密算法解密过程工作原理

多项式a满足:

a≡f_e≡f_PΦ_h+f_m(modq)

a≡f_e≡f_PΦ_Fq_g+f_m(modq)

a≡f_e≡PΦ_g+f_m(modq)

对于最后一个多项式PΦ_g+f_m,如果参数选择合适,这个多项式的系数都可以限制在区间[-q/2,q/2]内,因此,这个多项式在所有系数模q的情形下不会改变。这意味着将f_e(modq)的所有系数都选取在区间][-q/2,q/2]内,的确可以得到正确的

a=PΦ_gf_m∈Z[X]/(Xn-1)

将多项式a进行模p约化,可得到f_m(modp),然后用Fp去乘上述多项式即可得到相应的明文消息m(modp)。

NTRU加密算法的安全性

NTRU加密算法的安全性介于RSA和ECC加密算法之间。

NTRU加密算法的优点

NTRU加密算法设计的非常巧妙,整个加密算法只包括小整数的加、乘和模运算,在相同安全级别的前提下,NTRU加密算法的速度要比其它公钥密码体制的算法快得多,NTRU加密、解密一个长度为N的信息块需要0(N2)次操作,RSA加密算法需要0(N3)次操作,所以NTRU加密算法比RSA加密算法快至少100倍。用NTRU加密算法产生密钥的速度也很快,它的密钥产生速度比RSA加密算法快300倍。

NTRU加密算法的缺点

NTRA公钥加密系统并没有提供完善的解密机制,也就是说存在着用公钥加密产生合法密文不能被私钥解密的现象。攻击者可能利用这一点来进行攻击,攻击者会利用DC判断程序来判断合法的密文是否被正确解密,通过系统提供的相关信息来恢复用户的私钥,不过可通过对系统参数的仔细选择,使解密失败的概率可小于5×10的-5次方。

国外有很多研究机构正在对NTRU加密算法安全性进行研究,但到目前为止还没有任何理由说明NTRU加密算法是不安全的,有理由相信NTRU加密算法完全有可能在公开密钥体制中占有主导地位。

小知识之公开密钥密码体制

公开密钥密码体制的产生主要是因为两个方面的原因,一是由于常规密钥密码体制的密钥分配问题,另一种是由于对数字签名的需求。

随机分组密码加密算法

随机分组密码加密算法与固定结构的密码加密算法不同,其比较难以分析。目前的分析方法仅限于信息论方式,它是将生成算法与等长的随机置换相比较,随机分组密码加密算法的安全性证明是通过有限次明文、密文对的查询以及不能区分生成的算法与等长的随机置换来保证的。

随机分组密码加密算法

随机分组密码加密算法基本思想是将密钥分成两部分,即控制密钥和加密密钥。

1、控制密钥

控制密钥用于生成密码算法,因而算法是随机的,它随着密钥的不同而变化;加密密钥用于生成子密钥,用于加密算法。控制密钥选取方法要保证能生成足够多不同的随机密码加密算法,同时生成的密码加密算法能达到足够的安全性使其密码分析人员难以进行静态分析。控制密钥又可以细分为加密算法控制密钥和密钥扩展算法控制密钥两部分。

(1)加密算法控制密钥由若干个轮函数控制密钥所组成,用于生成各轮的轮函数,轮函数控制密钥的个数即为加密算法的轮数;

(2)密钥扩展算法控制密钥用于生成密钥扩展算法。

2、加密密钥

加密密钥由所使用的密钥扩展函数决定。加密时通过加密算法控制密钥生成加密算法,通过使用加密密钥得到的子密钥进行加密;解密时通过加密算法控制密钥生成解密算法,使用加密密钥得到的子密钥进行解密,其具体步骤如下:

1)系统初始化

(1)确定整个加密系统公用的一些参数(Wb,We,Wz,Wr,Ws,t)。其中:Wb为明、密文分组长度(假定明、密文长度相等);We为加密算法密钥长度;Wz为算法每轮的子密钥长度;Wr为轮函数控制密钥的比特数;Ws为密钥扩展函数控制密钥的比特数;t为安全级别,即生成该随机算法需要的最大差分概率至多为2-t,最大线性相关度至多为2-t

整个加密算法密钥K由三部分组成,即加密算法密钥K1(长度为We)、轮函数生成算法控制密钥K2:(长度为Wr的整数倍)和密钥扩展函数控制密钥K3,(长度为Ws),即K=K1‖K2‖K3,其中符号‖表示级联。

(2)确定轮函数生成算法和密钥扩展生成算法。在控制密钥K2的控制下,由轮函数生成算法生成加密算法所需各轮的轮函数以及通过逆轮函数生成算法生成解密所需各轮的轮函数。在控制密钥K3的作用下产生密钥扩展函数生成算法生成密钥扩展函数。

(3)确定合法密钥需要满足的条件。设满足条件的轮函数控制密钥全体构成的集合为Kr,密钥扩展函数控制密钥全体构成的集合为Ks。

轮函数记为g,满足条件的轮函数全体记为LR,密钥扩展函数记为h,满足条件的密钥扩展函数全体记为LS,轮函数生成算法记为Fr,逆轮函数生成算法记为Fr-1,密钥扩展函数成算法记为Fs,则有

g∈LR,g:{0,1}Wt×{0,1}Wb→{0,1}Wb

h∈LS,h:{0,1}We→{0,1} ∞

Fr:Kr→Lr,Fs:Ks→Ls

(4)加密和解密轮数是由具体算法和安全级别t决定的,以下的讨论中假定为固定数r。

2)加密

加密该过程分成三部分,即生成算法、密钥扩展和加密算法。设密钥为K=k1‖K2‖K3,长度为W,明文M长度为Wb,输出密文为C,则各算法描述如下:

(1)生成算法

取密钥K2,按Wt,比特为间隔分成r组K(1),…,K(r),使用轮函数Fr生成算法生成对应的轮函数G(1),…,G(r)。

(2)密钥扩展

取密钥K3,使用密钥扩展对应算法Fs生成密钥扩展算法h,取密钥K1作为密钥扩展算法h的输入,得到子密钥比特流S。

(3)加密算法

分别使用G1…Gr作为轮函数,以及子密钥比特流S的第Wz×(i-1)+1比特到第Wz×i比特作为第i轮的子密钥,对明文M进行迭代加密得到密文C。

3)解密

该过程分成三部分,即生成算法、密钥扩展和解密算法。设密钥为K=k1‖K2‖K3,长度为Wb,明文M长度为输出密文为C,则各算法描述如下:

(1)生成算法

取密钥K2,按Wt,比特为间隔分成r组K(1),…,K(r),使用轮函数Fr生成算法生成对应的轮函数G(1)-1,…,G(r)-1

(2)密钥扩展

与加密过程的密钥扩展一样。

(3)解密算法

分别使用G(1)-1,…,G(r)-1作为轮函数,使用子密钥比特流S的第Wz×(r-i)+1比特到第Wz×(r-i+1)作为第i轮的子密钥,对密文C进行迭代解密得到明文M。

小知识之分组密码:

分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。

数据库加密算法

虽然一些大型的数据库管理系统都提供了用户身份标识和认证、使用权限控制、视图、审计等安全管理措施,但是一些重要部门或敏感领域的数据库应用系统仅靠这些措施还难以完全保证文件的安全性。因此,有必要对数据库中存储的重要文件进行加密处理,以实现数据存储的安全保护。那么我们今天就介绍几个适用于数据库加密的加密算法。

数据库加密算法选择标准

数据库中文件加密的粒度一般有表级、记录级、字段级和数据级4种,加密粒度越小,则适用范围越广,但实现难度就越大。就目前研究现状,以记录或字段为加密粒度居多。因此,适于数据库加密的加密算法必须符合以下标准:

1、 由于数据库数据保存的时限相对较长,数据库加密对加密算法强度的要求是第一位的。

2、 由于数据库中数据量大,数据最大量的使用方式是随机访问,因此对加密算法的加密和解密效率要求较高,不能引起数据库系统的性能大幅度下降。

3、加密后数据库组织结构对于数据库管理系统而言不能有大的变动,应尽可能做到明文和密文长度相等或至少相当。

4、由于时限较长和密钥的复杂,密钥管理机制应更加灵活和坚固。

通过以上分析,我们可以得知,数据库加密算法宜采用分组加密算法。由于数据库字段的长度一般较小,如果加密算法的分组规模大,会在数据库内产生过多的填充信息,致使数据长度发生太大变化,涉及数据库表结构变化,这样会增加实现的难度并降低系统运行效率,因此数据库加密算法适合采用小分组加密算法。

由于DES加密算法的密钥长度固定,无法扩展,并且已被攻破,安全性不太高;AES加密算法至少需要128位分组,都不太适合给数据库加密。RSA公司提供的RC5和RC6加密算法,是目前最成熟的分组加密算法,并且尚未被攻破,具有较好的安全性,并且由于其分组长度和密钥长度都可变。

数据库加密算法分类:

一、RC5 加密算法

RC5加密算法是RSA公司提出的一个新的迭代分组密码。

1、RC5加密算法的特点

分组长度2w,密钥长度b和轮数r都是可变的。简记为RC5-w/r/b。该密码既适合于硬件实现又适合于软件实现,具有运行速度快、强度高、易于实现的优点。

2、RC5加密算法的实现

它主要通过基于数据而变化的循环移位运算来实现数据的扩散和混淆。每次循环移位的位数都依赖于输入的明文,事先不可预测。RC5加密算法中没有非线性的置换表,循环移位是唯一的非线性运算,RC5的强度主要依靠与明文有关的数据循环移位。另外算法中的异或操作提供了加密时的雪崩效应,即一个明文输入块中一位的改变会引起后续轮中数据的多位改变。

二、RC6加密算法

RC6加密算法是AES第二轮测评评选出的5个候选加密算法之一,它是对RC5加密算法的改进,除了继承RC5加密算法的基于数据的循环移位外,它还增加了乘法运算,增加了每轮的扩散速度,使得用更少的轮数就能实现更高的安全性和抵御更强的攻击。

为抵抗RC5加密算法由于轮之间相对较慢的雪崩效应而面对的一些攻击,RC6加密算法使用二次F函数实现字内的更快的混淆,以便实现循环移位位数的快速改变。

RC6加密算法中循环移位位数除一部分是不确定数外,还有一部分是固定数,固定位数的循环移位使得对此算法的线性攻击和微分攻击变得复杂。

三、R加密算法

R加密算法是由RC5加密算法、RC6算法修改而成,它继承了RC5加密算法的密钥扩展算法,但对RC5的加密算法作了修改,将RC5加密算法的循环移位改为RC6加密算法的循环移位。除了继承RC5加密算法的基于数据的循环移位外,增加了乘法运算,加快了每轮的扩散速度,使得用更少的轮数就能实现更高的安全性和抵御更强的攻击。

为抵抗RC5加密算法由于轮之间相对较慢的雪崩效应而面对的一些攻击,使用RC6加密算法的二次F函数实现字内的更快的混淆,以便实现循环移位位数的快速改变。另外由于采用RC6加密的循环移位,移位位数除一部分是不确定数外,还有一部分是固定数,固定位数的循环移位使得对此算法的线性攻击和微分攻击变得复杂。

R加密算法综合了RC5加密算法、RC6加密算法优点并保持小的分组,使之更适合用于对数据库加密。安全性比RC5加密算法、DES加密算法高,密钥长度可变,能抵抗密钥穷举攻击。加密和解密速度快,可满足数据库加密的要求。

小知识之雪崩效应

雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文或密钥的少量变化会引起密文的很大变化,就像雪崩前,山上看上去很平静,但是只要有一点问题,就会造成一片大崩溃。

blowfish加密算法

自从32位处理器诞生后,blowfish加密算法在加密速度上就超越了DES加密算法,引起了人们的关注。blowfish加密算法没有注册专利,不需要授权,可以免费使用。正是由于这些特点,它广泛应用于很多产品中。那么我们今天就来给大家介绍一下blowfish加密算法。

blowfish加密算法原理

blowfish加密算法是一种对称的分组加密算法,每次加密一个64位分组,使用32位~448位的可变长度密钥,应用于内部加密。加密过程分为两个阶段:密钥预处理和信息加密。

blowfish加密算法中使用两个盒key—pbox[18]和key—sbox[4][256],以及一个核心的加密函数blowfish—encrypt()。这两个盒所占存储空间为(18×32+4×256×32)字节,即4186字节。加密函数blowfish—encrypt()输入64位明文,输出64位密文。

一、密钥预处理

blowfish加密算法的原密钥pbox和sbox是固定的,初始化方法是用π的小数部分,按每32位一次分配给pbox和sbox,即:

pbox[0]一0x243f6a88;

pbox[1]一0x85a308d3;

sbox[3][254]一0x578fdfe3;

sbox[3][255]一0x3ac372e6;

当加密一个信息时,需要自己选择一个key(64~448位),用这个key变换sbox和pbox,得到加密信息所用的key_pbox和key_sbox。

二、信息加密

信息加密采用加密函数blowfish—encrypt()。blowfish加密算法是一个16层的feistel网,加密一个64位分组需要16次的迭代,在迭代中使用key_pbox和key_sbox,最后得出64位的密文。由于计算中仅使用模232加、“异或”以及用key_sbox替代等操作,因此实现起来速度非常快。blowfish加密算法中有以下两个基本运算:

加法:字的模232相加,记为“+”。

按位“异或”:记为“⊕”。

三、信息解密

用blowfish加密算法解密,同样也需要两个过程:

1、密钥预处理,与加密时相同;

2、信息解密,把信息加密过程中的key_pbox逆序使用即可。

值得注意的是:与大多数分组密码不同,blowfish中解密顺序和加密顺序是相同的,而不能倒过来。

解密过程伪代码如下(i表示迭代次数):

对于i=1至16

xl=xl—p^[i]

xr=f(xl)^xr

交换xl和xr(最后一轮取消交换运算)

xr=xr^p[17]

xl=xr^p[18]

重新合并xl和xr,得到64位的明文。

blowfish加密算法性能分析

blowfish设计的基本原理既容易理解又实现简单。与其他算法不同,子密钥的生成都是由加密函数blowfish—encrypt()完成,每个子密钥都会受到密钥位的影响,这 使得密钥和数据完全混合在一起,对密钥的分析显得十分困难。其中的f函数给fesistel网络一个很好的雪崩效应。

blowfish加密算法的另一个特点是在每一轮中同时对两部分文件加密,增加了密码的强度。blowfish加密算法用c语言和汇编实现起来都很方便,每个操作均为xor、mov、add。schneier将该算法与其他算法的执行时间进行比较。到目前为止,blowfish加密算法法的安全性还未受到挑战。

小知识之分组密码:

分组密码(Block cipher,又称分块密码),是一种对称密钥密码。它的特点是将明文分成多个等长的组,并用相同的密码算法和密钥对每组分别进行加密和解密。其中典型的如DES和AES作为美国政府核定的标准加密算法,应用领域从电子邮件加密到银行交易转帐,非常广泛。

SHA-1加密算法

SHA-1加密算法在加密学中扮演着极其重要的角色,可以用于实现数据保密、防止数据更改和身份验证等功能。另外,SHA-1加密算法是当今众多流行加密思想核心,几乎无处不在。它在许多安全协议中广为使用。那么,我们今天就给大家来介绍一下SHA-1加密算法。

SHA-1加密算法的原理

一、 函数与常量定义

1、 SHA-1加密算法的迭代函数

SHA-1加密算法使用80个连续的逻辑函数f0,f1,… ,f79。每个函数Ft(0≤t≤79)都操作三个32位字(B,C,D),产生一个32位字作为输出。函数Ft(B,C,D)定义如下:

(1)、 SHA-1加密算法常量

SHA-1加密算法一共需要80个32位的常量(K0,K1,…K79),以16进制给出,它们如下所示:

(1)Kt=0x5A827999 _(0≤t≤19)

(2)Kt=0x6ED9EBA1 _(20≤t≤39)

(3)Kt=0x8F1BBCDC _(40≤t≤59)

(4)Kt=0xCA62C1D6 _(60≤t≤79)

2、预处理

在进行散列值计算之前,先要对需要加密的数据进行预处理。这一预处理由三部分组成:消息填充、分割已填充消息(将填充后的消息等分成m位处理块)、为散列值计算设置初始化值。

(1)消息填充

假设原始消息(M)的长度是L位。首先,在消息最后加一位“1”,接着在这位“1”后面补k个“0”,使得L+1+k(即补位后的消息长度)满足对512取模后余数是448。然后,添加最后的64位二进制数据,这64位二进制数据就是原始L位消息(M)长度的二进制表示。例如,在8位ASCII码系统中,消息“abc”长度为8×3=24,加上一位“1”,还要添加448-(24+1)=423位“0”,最后加上64位原始消息长度二进制表示后,就得到512位的填充消息:

(2)分割已填充消息

经过消息填充后,还必须将数据划分成m位一组的N块的数据块来提供给下面的散列值计算过程。对于SHA-1加密算法,填充过的消息被分割成N(M(1),M(2),…,M(N))块,每块512位。然后每组512位的输入块可以表示成16个32位的字,分别记为:M0(i),M1(i),…,M15(i)。

(3)设置初始散列值(H(0))

在安全散列算法开始其核心的散列迭代计算之前,还必须设置好正确的初始散列值H(0)。而H(0)的数量和字长取决于消息摘要的选择。对于SHA-1加密算法,初始散列值由下面5个32位的字组成,其16进制表示如下:H0(0)=0x67452301,H1(0)=0xEFCDAB89,H2(0)=0x98BADCFE,H3(0)=0x10325476,H4(0)=0xC3D2E1F0。

3、散列值计算

在对原始数据消息进行了填充、分割后,就可以开始SHA-1加密算法的核心部分:散列值计算。

计算需要两个缓冲区,每个都由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。第二个5个字的缓冲区被标识为H0,H1,H2,H3,H4。80个字的缓冲区被标识为W0,W1,… ,W79。另外,还需要一个一个字的TEMP缓冲区。为了产生消息摘要,定义的16个字的数据块M1,M2,… ,Mn会依次进行处理,处理每个数据块包含80个步骤,在处理每个数据块之前,缓冲区H0,H1,H2,H3,H4被设置初始值。为了处理Mi,需要进行如下步骤:

(1)将Mi分成16个字W0,W1,… ,W15(W0是最左边的字)。

(2)对于 t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16)。

(3)令 A = H0, B = H1, C = H2, D = H3, E = H4。

(4) 对于 t = 0 到 79,执行下面的循环

TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;

E = D; D = C; C = S30(B); B = A; A = TEMP;

(5)令 H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E。

在处理完所有的 Mn, 后,消息摘要是一个160位的字符串,以下面的顺序标识

H0 H1 H2 H3 H4。

SHA-1加密算法实现与安全性

一、SHA-1加密算法实现

基于上述SHA-1加密算法原理的分析,SHA-1加密算法实现流程如图所示:

SHA-1加密算法是一种易于实现并可以基于多种平台的方便易行的安全算法,目前很多计算机语言,像C、Java、C++和PHP依照SHA-1加密算法的标准都能实现SHA-1。当然,受语言平台应用性的制约,应用最广泛的是C语言和Java语言。自身计算机上的消息认证一般采用C语言实现就足够,不仅能够保证良好的可移植性,而且实现起来也比较简单、容易理解。考虑到网络上的数字签名,乃至电子商务等,一般采用Java实现代码较简单迅速,其可移植性和安全性也能得到更好的保证。

事实上,这里还存在一个潜在的问题,SHA-1加密算法加密信息摘要的计算速度并不总是能满足要求。使得SHA-1加密算法的硬件实现也有很多途径,如利用现场可编程门阵列不仅可以实现这种算法,并且某种程度上也能提高运算速度。特别是随着数字通信领域的飞速发展,在急剧增长的无线移动设备领域,对加密系统的性能要求越来越严格。使得SHA-1加密算法软硬件优化方案的实现成为专家关注的热点。

二、SHA-1加密算法安全性

SHA-1加密算法是由MD5算法演变而来的,它们之间最大的区别在于前者产生的摘要长度比后者长32bit。SHA-1对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度为2160数量级的操作,较MD5的2128数量级操作要难。因此, SHA-1加密算法对抵抗强行攻击的强度很高。同时,因为SHA-1加密算法的循环步骤有80次,比MD5算法的64次要多,所以其运行速度也较慢。从目前密码学研究的最新进展来看,SHA-1加密算法虽然被发现存在缺陷,碰撞,但在近几年内,SHA-1加密算法仍然被大量使用。

随着互联网与通信技术的飞速发展,大量重要的数据信息存储在网络服务器中,给人们带来方便的同时也造成了巨大的信息安全隐患。在保证信息系统安全性的各种技术中,数据信息加密算法扮演了一个重要角色。虽然SHA-1加密技术由于其SHA-1。当然,受语言平台应用性的制约,应用最广泛的是C语言和Java语言。自身计算机上的消息认证一般采用C语言实现就足够,不仅能够保证良好的可移植性,而且实现起来也比较简单、容易理解。考虑到网络上的数字签名,乃至电子商务等,一般采用Java实现代码较简单迅速,其可移植性和安全性也能得到更好的保证。

事实上,这里还存在一个潜在的问题,SHA-1加密算法加密信息摘要的计算速度并不总是能满足要求。使得SHA-1加密算法的硬件实现也有很多途径,如利用现场可编程门阵列不仅可以实现这种算法,并且某种程度上也能提高运算速度。特别是随着数字通信领域的飞速发展,在急剧增长的无线移动设备领域,对加密系统的性能要求越来越严格。使得SHA-1加密算法软硬件优化方案的实现成为专家关注的热点。

二、SHA-1加密算法安全性

SHA-1加密算法是由MD5算法演变而来的,它们之间最大的区别在于前者产生的摘要长度比后者长32bit。SHA-1对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度为2160数量级的操作,较MD5的2128数量级操作要难。因此, SHA-1加密算法对抵抗强行攻击的强度很高。同时,因为SHA-1加密算法的循环步骤有80次,比MD5算法的64次要多,所以其运行速度也较慢。从目前密码学研究的最新进展来看,SHA-1加密算法虽然被发现存在缺陷,碰撞,但在近几年内,SHA-1加密算法仍然被大量使用。

随着互联网与通信技术的飞速发展,大量重要的数据信息存储在网络服务器中,给人们带来方便的同时也造成了巨大的信息安全隐患。在保证信息系统安全性的各种技术中,数据信息加密算法扮演了自身安全等级高,被广泛应用在社会的各行各业。但随着加密技术的不断更新和发展,SHA-1加密算法将来可能会完全被其他更安全的算法取代。

小知识之迭代函数:

在数学中,迭代函数是在碎形和动力系统中深入研究的对象。迭代函数是重复的与自身复合的函数,这个过程叫做迭代。

RSA加密算法在数字签名中的应用

网络技术的迅猛发展促进了办公模式的改变,电子政务开始在政府的各行各业广泛的应用开来。数字签名作为一种法律承认的能够保证数据的完整性、机密性、抗否定性的信息安全技术,在安全、高效的利用网络进行办公中发挥了重要的作用。那么我今天就给大家介绍一下如何利用RSA加密算法来实现数字签名。

RSA加密算法实现数字签名的技术原理

实现数字签名的方法大体分三种:单项散列函数(HASH)签名、对称密钥系统签名、非对称密钥系统签名。其中单项散列函数(HASH)签名和对称密钥系统签名都存在密钥保存困难的问题,所以利用非对称密钥算法——RSA加密算法进行数字签名的技术被广泛的运用。

一、RSA加密算法

RSA加密算法作为最著名的非对称密钥算法,其原理是利用两个大质数与被加密原文模乘产生的积来进行加密金额解密。这两个质数无论是用哪一个与被加密的原文模乘.即对原文件加密,均可由另一个质数再相乘来进行解密,即:

EPubk(DPrik(m))=DPubk(EPrik(m))=m(1)

但是,若想用这个乘积来求出另一个质数,就要对大数进行质因子分解,分解一个大数的质因子是十分困难的,若选用的质数足够大,这种求解几乎是不可能的。在现实的应用中每个用户保存着一对密钥:公钥Pubk和私钥Prik。其中私钥Prik采用私密的安全介质保密存储起来,应不对任何外人泄露;公钥Pubk可以公开发表,通常存放在公共服务器上供人查询。

二、RSA加密算法实现数字签名的原理

当发方向收方通信时发方用收方的公钥Pubk对原文进行加密,收方收到发方的密文后,用自己的私钥Prik进行解密,其中他人是无法解密的,因为他人不拥有与加密公钥Pubk所对应的私钥Prik。

RSA加密算法在数字签名中则是私钥加密,公钥解密。即发送方先用HASH加密算法对文件M求散列值,即数字摘要H,然后利用自己的密钥Prik对数字摘要进行加密生成数字签名C,然后将M和C一起发送给接收方,接受方收到文件M1和数字签名C1,现在需要验证M和M1是否完全相同。接收方利用眦HASH函数对收到的文件M1进行求散列值,即数字摘要H1,利用发送方公开的公钥Pubk对数字签名C1进行解密得到数字摘要H2,比较H1和H2,如果相同,则说明在传输中文件没有发生变化,并且文件是由发送者发的。

先将文件用HASH加密算法计算出相对较短的摘要,然后对摘要进行签名可以缩短RSA签名过程,以适应现实应用需要,因为HASH函数具有以下性质:对于任意长度的信息m,经过HASH运算后,会生成一个固定长度的散列值,即:

h=H(m)

给定m,很容易计算出h;已知h,求m是很困难的:已知h=H(m),构造H(m’)=h很困难;h的每一比特与m的每一比特都相关,并有高度的敏感性,即每改变m的每一比特,都将对h产生明显影响。以上流程完成了数字签名的功能:防篡改和防抵赖。因为如果文件在传输过程中被篡改,根据HASH算法具有的“原文有任何改动,其哈希值就要发生剧烈变化”的特点,
H1和H2不会相同;如果发送者否定文件是他发的,那么根据RSA加密算法的“分解一个大数的质因子是十分困难的,若选用的质数足够大,这种求解几乎是不可能的”的特点,用发送方的公钥是绝对解密不了用其他人私钥加密的秘文的。

利用RSA加密算法实现公文流转的数字签名的过程

NET Framework将加密和数字签名算法组合到一起,并将它作为AsymmetricAlgorithm类的子类,利用抽象算法类 RSA 及其实现的对应方法可以简单的实现数字签名。

一、产生密钥对

首先实例化RSA算法引擎RSACryptoServiceProVider,导出密钥参数值。

RSACryptoServiceProvider rsa=new;

RSACryptoServiceProvider();

RSAParameters keys=rsa. _ExportParameters(true);

将导出的密钥参数值写入文件产生密钥对,并将密钥对保存为xml文件。其中私钥由发送文件方保存,公钥存放在公共位置以便接收方查询。

SaveToFile (address._PubK,pkxnil);
SaveToFile (address_PriK,psxNI);

二、 对文件进行数字签名

对文件进行数字签名分为两个部分,生成数字摘要和实现数字摘要的签名。

首先实例化RSAHandler类,将需要签名的文件以流读入,利用GetHashData函数对文件生成数字摘要。

RSAHandler rsahd=new RSAHandler();

Stream sm=new FileStrea:(file name,FileMode. Open,FileAccess. Read,FileShare. Read);

byte[]hashsm=rsahd, GetHashData(sm);

然后实例化签名类RSAPKCSISignatureFonatter,装入私钥,利用CreateSignature函数对数字摘要生成签名。

RSAPKCSISignatureFoniatter format=rsahd. CreateRSAFoniatter (address_PriK);

byte[]signdata=format. CreateSignature (hashsm);

三、验证数字签名

验证数字签名分为两个部分:对接收的文件重新生成数字摘要和将原数字签名解密成原数字摘要并比较这两个摘要。

1、重新生成数字摘要:

Stream newSm = new

FileStream(filename, FileMode. Open, FileAccess. Read,FileShare. Read);

byte[]newHashsm=rsahd. GetHashData(newsm);

2、检查数字签名:

首先实例化签名类RSAPKCSISignatureDeformatter,装入公钥,利用RSAPKCSISignature Deformatter类的VerifySignature函数,先将数字签名解密成数字摘要,然后与重新生成的数字摘要作比较,以确定文件是否被更改。

RSAPKCSISignatureDeforHiatter deformat=rsahd. CreateRSADefonatter(address PubK);

if (defonnat. VerifySignature (Convert. FronBase64String (newHashCode),

Convert, FromBase64String (dataSignCode)))

{…}

可以进行简单的验证:按照软件的流程对文件进行数字签名后,更改文件,程序会报“验证失败”;选择与加密私钥不对应的公钥解密也会得到同样的结果。

用RSA加密算法对文件和文件的数字签名进行加密,提高了数字签名验证效率,确保了电子公文在流转过程中的安全。

小知识之数字签名:

数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

SHA加密算法

SHA是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。

SHA加密算法原理

接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

SHA加密算法信息产生摘要的过程

SHA加密算法最大输入信息长度小于264位,产生的输出是长164位的信息摘要。输入按每组512位处理。

第一步、附加添凑位 

对信息附加添凑位以便使它的长度等于448(模512)。即使信息已经达到需要的长度,也总是附加添凑位。因此,添凑位的长度范围是1至512位。添凑位由单个“1”后跟必要数目的“0”组成。

第二步、附加长度

将一个长64位的数据块附加到信息添凑位后,这个块被视为一个无符号的64位整数,而且包含了信息在附加添凑位之前的初始长度。

前面两步的结果是产生长度为512的整数倍的信息。用数字标记信息扩展后的512位分组序列Y0,Y1…YL-1,于是扩展后信息的总长度是LX512位。同样地,结果是16个32位字的整数倍。让M0,M1…MN-1代表结果信息字,N为16的整数倍,因此N=LX16。

第三步、初始化MD缓冲区

用一个160位的缓冲区存放哈希函数的中间结果和最终结果。这个缓冲区用5个32位寄存器(A,B,C,D,E)表示。这些寄存器初始化为如下的16进制值(高8位在前):

A=67452301

B=EFCDAB89

C=98BADCFE

D=10325476

E=C3D2E1FO

第四步、处理512位(16字)信息分组

SHA加密算法的核心是一个由80步处理组成的模块,这个模块在上图中标记为HSHA,它的逻辑如下图所示。这80步有相似的结构。

请注意每一层(round)的输入是当前正处理的512位分组YQ和值为ABCDE的160位缓冲区,并在每一层修改缓冲区的内容。再每一层中用到了一个辅助常数K1,K1只用到4个不同的常数值。这些值用16进制表示如图所示:

总之,对分组YQ,SHA加密算法以YQ和摘要的中间值MDQ作为输入。MDQ放在缓冲区ABCDE中,第80步的输出与MDQ相加以产生MDQ+1。这个加法是利用模232加法,由缓冲区5个字中的每一个字单独地与MDQ中相应的字相加完成。

第五步、输出

当所有的L个512位分组处理完后,从L阶段的输出是160位的信息摘要。

在每一层的逻辑中,每一层的形式是:

A,B,C,D,E—[CLS3(A)+FT(B,C,D)+E+WT+KT],A,CLS30(B),C,D

这里,A,B,C,D,E为缓冲区中的5个字;T代表层或步数字型,0≤T≤79;FT是一个简单逻辑函数;CLS3表示循环左移32位变量S位;WT是从当前输入512位分组中产生出来的;KT是一个辅助常数,用到了4个不同的值;“+”是模232加法。

每个简单函数32位输入,32位输出。每个函数执行一组“位位置逻辑”操作。也就是说,第N位输出是第N位3个输入的函数。正如你所见到的,只用到了3个不同的函数。对0≤T≤19,函数是条件函数:如果B那么C否则D。对20≤T≤39和60≤T≤79,函数产生奇偶校验位。对40≤T≤59,如果2个或3个变量值为TRUE,则函数值为TRUE。

现在剩下的是说明32位字WT如何从512位信息中产生。前16个WT的值直接取当前分组产生的16个字。剩下的WT值定义为:WT=WT-16 8 WT-14 8 WT-8 8 WT-3

这样,在前16层处理中,信息分组产生的输入由分组中的一个32位字组成。在余下的64层中,输入由一些信息分组中的字异或而成。

SHA可概述为:

MD0=IV

MDq+1=SUM32(MDq,ABCDEq)

MD=MDl-1

这里,IV为ABCDE缓冲区中的初始值,在第三步中定义;ABCDE为第Q个信息分组在最后一层处理的输出;L为信息(包括附加位和长度域)的分组数;SUM32代表输入的每一对字的独立的模232加法;MD等于最后的信息摘要值。

小知识之信息摘要:

信息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。

基于混沌的RC4加密算法

RC4属于对称加密算法,双方采用相同的密钥,加解密算法简单,但不便于密钥管理。为减少密钥协商次数,且使每个数据包加解密使用不同的密钥,在密钥协商结束后,WEP和TKIP都使用变化的IV向量来改变RC4的初始密钥,这就是我们今天要介绍的基于混沌的RC4加密算法。

基于混沌的RC4加密算法的工作原理

采用Logistic作为RC4的种子密钥发生器,随机生成序列密钥,增加密钥的随机性,且在加密的过程中,多个参数的不同取值使得在不需要设置IV向量的情况下,可达到不断改变RC4初始密钥的目的。

基于混沌的RC4加密算法的具体运行过程

基于混沌的RC4加密算法的具体运行过程如图所示,主要分为3个阶段:密钥协商,Logistic产生种子密钥及数据加解密。

一、密钥协商 

密钥协商过程采用IEEE802.11i的四次握手结构,实现动态密钥协商,整个密钥协商过程在STA与AP之间进行。

在握手过程中,共享密钥TKP并未在双方之间传输,所以密钥的安全性在双方之问得到了很好的保障。AP与STA四次握手成功后,双方载入由PMK生产单播密钥PTK:

PTK={EK,CK,TK}

其中,TK为双方共享的数据加密密钥。我们今天介绍的基于Logistic混沌映射的RC4加密算法,就是将混沌映射的初始值、控制参数及取值的起始位置作为双方共享的加解密密钥进行协商,即:TK={X0,_μ ,stat}

其中,X0为迭代初始值;_μ为控制参数;stat为RC4种子密钥取值的起始位置。

二、Logistic产生RC4的种子密钥

双方载入共享密钥TK后,利用{X0, μ}进行Logistic迭代,产生一个随机数序列:X={X0,X1…},若系统处于混沌状态,则可以构建一个真随机数序列,而该随机序列又是由X0,_μ_唯一确定的。由于Logistic产生的值都落在(0,1)范围内,为转化成RC4加密算法中初始置换S={0,1…N一1,N(=2N)的种子密钥,需对产生的随机序列X进行如下运算,使取值在[0,255]之间:

Y=mod(round(1000xx),255)

通过实验验证,当初始值X0相差10-16时,产生的2个随机序列经过60次左右的迭代出现了明显的差异,形成2个完全不相同的随机序列,因此,在选取RC4种子密钥key时,应从60次迭以后代开始取值。

当传输的数据量非常大时,为使每个数据包使用不同的密钥加密,利用混沌系统对初始值的敏感性,在每次生成RC4种子密钥的过程中,将Logistic的初始值以10-16进行递增。

三、数据加密与解密

在发送端A处,Logistic产生随机序列,并截取128bit的种子密钥key后,利用RC4加密算法对key进行新的一轮运算,产生最终用于数据加密的密钥流K(n)={k1,k2…}。RC4属于一种流加密算法,对明文文件加密时,需将明文转化成连续的符号或比特流P(n)={P1,P2….},加密时用密钥流K(n)的第n个元素Kn与Pn进行异或运算,即:

E(n)=P(n)⊕K(n)

其中,K(n)为RC4产生的密钥流;P(n)为明文。加密结束后,E(n)通过信道发送给接收端B。

在接收端,需对接收到的密文E(n)进行解密,RC4属于一种对称加密算法,加解密需使用相同的密钥流K(n),可利用双方共享的密钥TK,通过Logistic混沌映射恢复RC4的种子密钥key,进而通过RC4加密算法产生相同的密钥流K’(n),将密文的第N个元素E(n)与K’(n)异或即可恢复出明文,即:

D(n)=E(n)⊕K’(n)

其中,K’(n)为通过共享密钥恢复的RC4密钥流;E(n)为密文;D(n)为解密恢复的明文。

小知识之RC4加密算法

RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。

Bayes加密算法

Bayes加密算法是探索、处理不确定性知识领域的一种简洁而有效的方法,以概率理论为基础,其学习和推理都由概率规则实现,Bayes加密算法关键在于使用概率表示各种形式的不确定性。

Bayes加密算法的分类

一、朴素Bayes加密算法

朴素 Bayes加密算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,且方法简单、分类准确率高、速度快。

朴素Bayes加密算法实现方法

设每个数据样本用一个n维特征向量来描述n个属性的值,即:X={x1,x2,…,xn},假定有m个类,分别用C1, C2,…,Cm表示。给定一个未知的数据样本X(即没有类标号),若朴素Bayes分类法将未知的样本X分配给类Ci,则一定是

P(Ci|X)>P(Cj|X) 1≤j≤m,j≠i

朴素Bayes加密算法的局限性

根据Bayes定理,由于P(X)对于所有类为常数,最大化后验概率P(Ci|X)可转化为最大化先验概率P(X|Ci)P(Ci)。如果训练数据集有许多属性和元组,计算P(X|Ci)的开销可能非常大,为此,通常假设各属性的取值互相独立,这样先验概率P(x1|Ci),P(x2|Ci),…,P(xn|Ci)可以从训练数据集求得。

根据此方法,对一个未知类别的样本X,可以先分别计算出X属于每一个类别Ci的概率P(X|Ci)P(Ci),然后选择其中概率最大的类别作为其类别。

朴素Bayes加密算法成立的前提是各属性之间互相独立。当数据集满足这种独立性假设时,分类的准确度较高,否则可能较低。另外,该算法没有分类规则输出。

二、TAN加密算法

TAN加密算法通过发现属性对之间的依赖关系来降低NB中任意属性之间独立的假设。它是在NB网络结构的基础上增加属性对之间的关联(边)来实现的。

TAN加密算法实现方法

用结点表示属性,用有向边表示属性之间的依赖关系,把类别属性作为根结点,其余所有属性都作为它的子节点。通常,用虚线代表NB所需的边,用实线代表新增的边。属性Ai与Aj之间的边意味着属性Ai对类别变量C的影响还取决于属性Aj的取值。

TAN加密算法的局限性

类别变量没有双亲结点,每个属性有一个类别变量双亲结点和最多另外一个属性作为其双亲结点。找到这组关联边之后,就可以计算一组随机变量的联合概率分布如下:

其中ΠAi代表的是Ai的双亲结点。由于在TAN算法中考虑了n个属性中(n-1)个两两属性之间的关联性,该算法对属性之间独立性的假设有了一定程度的降低,但是属性之间可能存在更多其它的关联性仍没有考虑,因此其适用范围仍然受到限制。

小知识之加密算法:

数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。

HMAC加密算法

HMAC加密算法是一种基于密钥的报文完整性的验证方法,其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。HMAC加密算法可以用来作加密、数字签名、报文验证等。

HMAC加密算法的定义

HMAC加密算法是一种执行“校验和”的算法,它通过对数据进行“求和”来检查数据是否被更改了。在发送数据以前,HMAC加密算法对数据块和双方约定的公钥进行“散列操作”,以生成称为“摘要”的东西,附加在待发送的数据块中。当数据和摘要到达其目的地时,就使用HMAC加密算法来生成另一个校验和,如果两个数字相匹配,那么数据未被做任何篡改。否则,就意味着数据在传输或存储过程中被某些居心叵测的人作了手脚。

HMAC加密算法的定义用公式表示如下:

HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))

HMAC加密算法的加密步骤

(1) 在密钥K后面添加0来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00)

(2) 将上一步生成的B字长的字符串与ipad做异或运算。

(3) 将数据流text填充至第二步的结果字符串中。

(4) 用H作用于第三步生成的数据流。

(5) 将第一步生成的B字长字符串与opad做异或运算。

(6) 再将第四步的结果填充进第五步的结果中。

(7) 用H作用于第六步生成的数据流,输出最终结果 。

HMAC加密算法的典型应用

HMAC加密算法的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下:

(1) 先由客户端向服务器发出一个验证请求。

(2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。

(3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。

(4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户 。

HMAC加密算法的安全性

HMAC加密算法引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:

(1)使用的密钥是双方事先约定的,第三方不可能知道。由上面介绍应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。

(2)在HMAC加密算法的应用中,第三方不可能事先知道输出(如果知道,不用构造输入,直接将输出送给服务器即可)。

(3) HMAC加密算法与一般的加密重要的区别在于它具有“瞬时”性,即认证只在当时有效,而加密算法被破解后,以前的加密结果就可能被解密。

小知识之HMAC:

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

Playfair加密算法

在经典加密算法中,最著名的多字母加密算法是Playfair加密算法,曾被英国陆军在第一次世界大战中作为第一流领域系统使用,并在第二次世界大战中仍被美国陆军和其他同盟军使用。那么我们今天就给大家来介绍一下这种Playfair加密算法。

Playfair的加密过程

Playfair加密算法根据下列规则一次对明文的两个字母进行加密,这两个字母构成一对。其加密规则如下:

(1)一对明文字母如果是重复的。则在这对明文字母种间插入一个填充字符。如X。因此,单词session将被分割成:se、sx、si、on。

(2)如果分割后的明文字母对在矩阵的同一行中都出现,则分别用矩阵中其右侧的字母代替,行的最后一个字母由行的第一个字母代替。例如,on被加密成qo,而st被加tn。

(3)如果分割后的明文字母对在矩阵的一列中都出现,则分别用矩阵中其下方的字母代替,列的最后一个字母由列的第一个字母代替。例如,en被加密成nu,而aw被加密成ba。

(4)如果分割后的明文字母对既不在矩阵的同一列中都出现也不在矩阵的同一行中都出现,密文是这两个字母所在的长方形的另两个顶点。例如,se被加密成nk,而cu被加密成ix(或jx)。

(5)如果明文有奇数个字母,末尾加一个无效字母。

Playfair加密算法与单字母替代密码相比有明显的优势

第一、双字母有26x26=676种组合方式,识别各种双字母组合比单字母困难得多;

第二、各种字母组的相对频率范围也更为广泛,使频率分析更加困难。

因此,Playfair加密算法曾被认为是不可破译的。

Playfair加密算法的实现

用vb模拟实现时,有设置密钥、加密、算法简介、重新输入、退出这五个按钮(图一)和三个文本框:分别用于输入明文、矩阵的关键字和输出密文。

根据密钥矩阵生成的原则,若取关键字为Playfair,则生成的密钥(图一)。以下的加密实现都是基于以Playfair为关键字生成的密钥矩阵。若设明文为plnuamdi。

因为pl在同一行,nu在同一列,am既不在同一列也不在同一行,di在同一行。依据加密规则其密文为laupflair。在本模拟系统中,我们对于两个一样的明文和奇数个明文采取增加大写字母Z的方式来实现。考虑到解密的可行性,我们只对奇数个明文进行了循环加密,对两个一样的明文只是增加了一个大写字母Z。

Playfair加密算法主要程序

Function Encode Char(char1 As String, char2 As String) As String
Dim x1,x2, y1, y2 As Integer
Dim flag1,flag2 As Boolean
If (Asc(char1)> asc_z_l) Then
flag1= True
char1 = Chr(Asc(charl)_asc_change)
End If
If (Asc(char2)> asc_z_l) Then
flag2 = True
char2 = Cbr(Asc(char2)_ asc_change)
End If
If (GetXYln ex(char1, x1, y1) And GetXYindex(char2. x2. y2) Then
“相同字符
If (x1 =x2/ id y1 = y2) then
EncodeChar Case Low(char1. flag1) + fillChar + CaseLow(char2, flag2)
“同行字符
EncodeChar Case Low(matrix(x1. (y1 + 1) Mod 5), flag1) + Case Low(matrix(x2, (y2 +1) Mod 5) flag2)
“同列字符
Else if (x1=x2) Then
Encode Char caseLow (matrix((x1 + 1) Mod 5, y1), flag1) + Case Low(matrix(x2 +1l) Mod 5, y2),flag2)
“对角字符
Else
Encode Char= caseLow(matrix(x1. y2), flag1) + CaseLow(matrix(x2. y1), flag2)
End If
Else
Encode Char= aseLow(char1.FLag1) + CaseLow(char2, flag2)
End If
End Function

小知识之矩阵:在数学上,矩阵是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。

DDES加密算法

针对DES加密算法中使用的随机数离散度不高、线性相关度大的问题,许多学者利用线性同余发生器提出了DDES加密算法(动态DES加密算法)。经实验及分析证明DDES加密算法能显著提升DES加密算法的抗攻击强度,是提高DES安全性的一种有效途径。

DDES加密算法

DDES加密算法不同于其它DES扩展算法,它具有动态加密特性,DDES是一个分组加密算法。

DDES加密算法分类

DDES加密算法分三部分:即输入控制器、动态密钥发生器、DES加密器。它们的功能分别如下:

1、输入控制器

输入控制器对明文数据流进行控制,明文数据流为64位分组数据,每当输入一个分组时输入控制器产生一个信号,输入动态密钥发生器,同时把该分组输入DES加密器。

2、动态密钥发生器

动态密钥发生器每接到输入控制器的一个信号就随机产生一个64位的加密密码输入DES加密器,动态密钥发生器的初始值为系统的密钥。

3、DES加密器

DES加密器为传统的DES加密算法,在接收到输入控制器的文件和动态密钥发生器的所产生的密钥后就对文件加密。

DDES加密算法的特点

1、没有弱密钥或半弱密钥

DDES加密算法改进了DES加密算法的内部工作方式即加密密钥随机产生,而且是动态变化的,自然就不存在弱密钥或半弱密钥问题。

2、能抗击差分密码

DDES加密算法在第一次输入了密钥后,利用LCG产生以后的加密密码,因此要找出相应的差分是不可能的。

3、 能抗击线性密码分析线性密码

由于DDES的加密密码的随机性的,要找到相应的线性关系是不可行的。

4、 能抗击相关密钥

DDES在加密前对密钥进行了变换,要找出密钥间的关系是非常困难的。

DDES加密算法具有抗击差分密码、抗击线性密码和抗击相关密钥的能力,大大地增强了加密强度,从新的角度扩展了DES加密算法。

小知识之DES加密算法

DES加密算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密匙长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

NAF-ECC加密算法在电子商务SET协议中的应用

随着Internet的日益普及和高速发展,电子商务也得到了迅速发展,对社会经济活动产生较大的影响。但是,在电子商务发展中当前所遇到的主要技术还是电子商务的安全问题。所以我们今天就来讲解一下点乘快速实现加密算法NAF-ECC在电子商务SET协议中的应用。

ECC加密算法中点乘快速算法方案NAF-ECC

ECC加密算法是利用有限域上椭圆曲线的有限点群代替基于离散对教问题密码体制中的有限循环群所得到的一类密码体制。其中使用最典型的方法是点乘快速算法(NAF方法),简称NAF-ECC加密算法。

NAF-ECC加密算法是对正整数n的二进制表示进行变形,采用一种特别有用的带符号数字表示.且保证没有两个相邻的位是非零,其算法的思想是重复地除以2。为了获得正整数的二元展开.首先用n除以2,提取余数0或者1,然后用商重复这个过程直到商为0。为了获得正整数n的非邻近表示形式型,允许余数是0.1或者-1。如果余数是1或者-1,则选择使商为偶数的余数。

与重复加一倍点运算相比,NAF大约节省了t/6次的点加运算。

NAF-ECC加密算法在电子商务SET协议中的应用

采用更高效的NAF-ECC加密算法后,SET协议的加密和解密流程分别为:

发送方加密流程为:

1、采用NAF-ECC加密算法对接收方的数字证书进行认证,以验证接收方的身份的真伪。如果证书是真的,再从证书中提取接收方的签名公钥。

2、对要发送的消息进行哈希运算,生成消息摘要,并用自己的私钥对消息摘要进行NAF-ECC加密算法加密,形成数字签名。

3、用随机生成对称的对称密钥采用NAF-ECC加密算法对文件加密,生成文件密文。

4、用接收方的公钥对对称密钥进行NAF-ECC加密算法加密,得到数字信封。

5、发送方将文件密文,数字签名.数字信封及数字证书发给接收方。

接收方解密流程:

1、接收方接收到发送方的消息后.采用NAF-ECC加密算法对发送方的数字证书进行认证,以验证发送方的身份的真伪。如果证书是真的,再从证书中提取发送方的签名公钥。

2、采用NAF-ECC加密算法,接收方用自己的私钥对数字信封进行解密,得到对称密钥。

3、采用NAF-ECC加密算法,用对称密钥对文件密文解密,得到文件明文。

4、采用NAF-ECC加密算法,用发送方的公钥对数字签名解密,得到文件接要。

5、对文件明文进行哈希运算,得到重新计算的文件摘要。

6、比较4和5得到的文件摘要,确认文件的完整性。若两个摘要相同,说明文件是相应方发送的,且在传输过程中没有被篡改。

小知识之SET协议SET协议是B2C上基于信用卡支付模式而设计的,它保证了开放网络上使用信用卡进行在线购物的安全。SET主要是为了解决用户,商家,银行之间通过信用卡的交易而设计的,它具有的保证交易数据的完整性,交易的不可抵赖性等种种优点,因此它成为目前公认的信用卡网上交易的国际标准。

RSA加密算法在自动发药机中的应用

大家都知道,自动发药机中的每一味药都是由唯一的16位条码标识的,医生开出处方之后,将药名以及各味药的用量发送给自动发药机控制系统,然后根据其中包含的信息进行发药。为了防止在药品发送过程中,被入侵者监听,因此,我们采用RSA加密算法将其加密,只有拥有RSA私钥者,才能将其解密,就保证了处方信息的安全性。

RSA加密算法在自动发药机中的加密原理:

因为我们要加密的就是药品的条码信息,而在数据库中,条码是CString类型,考虑到数据的存储范围,所以我们用CString的mid方法把16位条码分成4段,将每4位转化为对应的整数,然后将其加密,解密时,将每一个密文分别用私钥解密之后,还原成对应的字符串,然后连接在一起,成为16位条码。

RSA加密算法在自动发药机中的应用实例:

假如医生所开处方中,有一味药“白果仁”,要将其用RSA加密。

首先,需要查询数据库,得出它对应的条码是“0013010000072383”,将16位条码当作参数传给RSA类中的RsaTotEncry。在RsaTotEncry方法中,将条码分成四段,“0013”、
“0100”、“0007”、“2383”;将这四个串分别转化成四个整数:13、100、7、2383;每一个整数作为参数,传给RSA的RsaSinFncry,将随机产生的数值47、71分别赋给p,q,n=p*q=3337,φ(n)=(p-1)*(q-1)=3220;经过下图所示的过程,得到的密钥P= 2257。

在经过下面的过程,得出d= 3113;加密之后,四个整数对应的密文分别是:2385、1626、3257、217;将加密之后的信息组合成条码“2385162632570217”作为传送的内容,发送给发药机控制系统。

接下来,发药机控制系统收到医生发来的处方信息之后,需要解密药品条码.将各个密文分别作为参数传给RSA的Decrypt,调用模指数运算,将各密文还原成明文:13、100、7、2383;将各个整数转化为对应的四位字符,不足四位的,前面补“0”,最后连接变成了“0013010000072383”,这样,就实现了一个条码文件加密解密的过程。

如果在发送过程中,有入侵者侦听到发送的包,他得到的条码信息将是“2385162632570217”,而在数据库中,并不存在条码为“2385162632570217”的药品,故而处方信息得到了
保密。

在发药机系统中,加密行为发生在传送处方信息之前,解密行为发生在存储处方信息之前,这与提取处方信息然后发药的过程并不会有重叠部分,所以,在自动发药机系统中采用RSA加密算法,并不会降低自动发药机的工作效率。

小知识之RSA加密算法RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。