数据加密数字签名简介
本文说明数据加密和数字签名的原理和算法。
数据加密发展:
计算机出现之前:置换表,多置换表,置换数据位置。 计算机出现之后:字节循环移位,xor或异或操作。
名词解释: 密码: 一组含有参数的变换。 明文: 加密前的原始数据。 密文: 加密后的数据。 密钥: 参与变换的参数。 加密算法: 进行数据变换的函数。
校验码: 有些时候我们需要知道数据是否被修改或被破坏,那么我们就需要产生一些校验码,然后将这些校验码填充到真正的数据流中,每次我们进行数据操作之前,可以对这些校验码进行检查,这样就可以保证其安全性。例如:病毒感染的文件可以有效防治。
CRC: 循环冗余校验。它对每一个数据块进行位循环移位和XOR操作产生得到一个16位或32位的一个校验和。这样的话,无论有数据丢失还是改变都一定会导致校验码出错,对于病毒感染也很有效。现在已成了一种标准。
基本说明:
一个数据加密算法应当有这样一个能力:制定一个密码或密钥,用它可以加密明文,不同的密码或者密钥,可以产生不同的密文(暗文)。密钥都是可以被破译的,仅是时间上的不可能性。
一个数据加密算法,需要考虑的是进行算法变换,密钥子密钥(公钥私钥)的计算消耗,计算时的空间占用,安全性,密钥长度,密文大小 这些方面。
数据加密技术分类:
古典算法,对称算法,非对称算法
古典算法:替代密码,换位密码。
对称算法:就是加密和解密都用同一套密钥。
对称算法可分为序列密码和分组密码。其中序列密码每次加密一位或者以字节的明文,也称为流密码。分组密码是将明文分组为固定长度的组,然后使用密钥算法对每一块进行加密,结果,输出的也将是固定长度的密文。
非对称算法:加密和解密时使用不同的密钥。加密的密钥为公钥,解密时需使用公钥对应的私钥。若发送方希望只有收信方可解密,那么发信方必须先知道收信方的公钥,然后使用收信方的公钥对数据进行加密,收信方使用自己的私钥进行解密密文。公钥私钥并不明确,都可进行加密,而使用另外一个进行解密。
不可逆算法。不需要密钥,可直接将数据经过算法处理得到密文,密文不可能被解密。
分别常见的有: 对称DES,ADEA,后来的AES。
非对称RSA,DSA,ECC。
不可逆MD5,SHS,SHA。
特殊分类方式:
若明文和密钥确定,则密文确定,则称为确定型密码体制。
若明文和密钥确定,密文不唯一确定,然后根据客观随机因素从一个密文集合中选择一个,则称为概率密码体制。
常见数据加密技术:
DES:对称加密算法。全称是Data Encryption Standard 美国数据加密标准。
S-盒:算法结晶所在。推导过程未知。
弱密钥:几个减弱DES安全系数的密钥。避免使用。
它是一种对二元数据进行的加密算法。数组分组长度为64位。密文分组的长度也是64位。密钥长度为64位(其中有效长度为56位,剩余8位作为奇偶校验)DES的整个体系是公开的,其安全性完全靠密钥的保密。
加密解密速度快。其扩展算法有 三重DES,IDEA,RC5,RC6,Blowfish,CAST,RC2
1:将明文分割为64位的一个单元,然后,对每个单元进行处理,若不足64位,则填充0 2:将明文单元进行一个初始IP置换 3:将置换后的单元分割为左右半部分,每部分32位。 4:对每个部分进行16轮迭代的乘积变换。(将数据和密钥结合起来,注意,密钥会在每一轮迭代时生成一个对应的子密钥进行乘积变换) 5:16轮迭代之后,两个部分再连接起来,进行一个初始逆置换IP-1,得到密文。
AES:比DES更安全高效。对称加密算法。效率比3DES高,安全性略高于3DES。全称为 Advance Data Encryption Standard
是基于128位(16字节)分组的对称加密算法。密钥可分为128.192,256位三种。密钥轮数分别为10,12,14次。一开始,我们预准备一个替换表,用于中途对密钥进行替换。
加密步骤为:
1:将明文拷贝到4*4字节的矩阵State中。 2:用第一轮的密钥与State进行异或运算。 3:使用替换表对密钥进行替换。 4:对State进行移位操作。 5:对State进行混合操作。 6:用下一轮的密钥对State进行异或操作。返回第3步。直至使用完所有轮数。 7:输出State.
特殊点:
若明文字节数除以16字节不为0,剩余n字节,则填充16-n个字节,每个字节内填充的数也为 16-n ;
若明文字节数除以16字节正好为0,则必须增加一个16字节的组,该组内每个字节内容必须填写16.
AES安全系数总结:
密钥长度 密钥数量 知密文后所需要时间 知明文和密文后所需要时间
32 4.3*10E9 35.8分 2.15毫秒
56 7.2*10E16 1142年 10小时
128 3.4*10E38 10E24年 5.4*10E18年
168 3.7*10E50 5.9*10E36年 5.9*10E30年
RSA:非对称加密算法。它使用了两个非常大的素数来生成公钥和私钥。加密算法比慢,不适合进行大量数据的加密。
它的密钥是两个非常大的素数相乘得到其中一个密钥,通过这两个素数进行其他一些算法得到另外一个密钥。将公布一个密钥作为公钥,留一个作为私钥。
若一个密钥被分解出得到两个素数,则RSA被击破。
为安全起见,建议两个素数相差不大。
椭圆曲线ECC算法:非对称加密算法。
它的密钥是通过一个椭圆曲线运算得到的。它的加密强度,执行速度都更好,并且密钥长度小,计算空间小,比RSA和DSA强。
PGP:非对称加密算法。使用公钥来加密一个随机生成的密钥,然后使用该密钥再去加密数据。所以要解密数据要先用私钥解密得到该密钥。
背包密码:非对称加密算法。
McEliece密码:非对称加密算法。
Rabin:非对称加密算法。
三重DES:使用三个(或两个)不同密钥对数据块进行三次(或两次)加密。强度系数高,但效率降低。
它分为四种方式:
DES-EEE3,使用三个密钥,顺序对数据进行三次加密变换。
DES-EDE3,使用三个密钥,对数据进行加密,错误解密,加密变换。
DES-EEE2,使用三个密钥,其中K1=K3(相当于两个密钥)对数据进行顺序三次加密。
DES-EDE2,使用三个密钥,其中K1=K3(相当于两个密钥)对数据进行加密,错误解密,加密变换。
RC5: 它是一种将明文分组长(W位,W必须为2的倍数次),密钥长(R字节),迭代轮数(B次)进行分组迭代的密码。它以RC5-w/r/b表示。推荐使用RC5-32/12/16
1:算法形式简单,运算速度快。 2:能适应不同字长的明文 3:加密轮数可变化,可调整加密速度和安全性。 4:密钥长度可变化,可调节安全性。 5:空间消耗度低。 6:对数据进行了位循环移位,增强了抗攻击能力。
IDEA:它使用了128位密钥,安全性更高,实现上也快了很多。
它将64位明文分割为4个子单元,一个子单元大小为16位。
它进行了8轮的重复运算,每轮运算有6个不同的子密钥参与运算,最后又进行了一次变换运算。
它将128位的密钥分割为8份子密钥,每份16位,再进行位移运算得到新的子密钥。
散列和数字签名
散列很类似于加密,不同的是,散列不需要密钥。散列的目的是将一个接近无穷空间内的信息映射到一个有维空间内。虽然可能出现散列值碰撞,但这个概率应当小到接近不存在。
散列函数的要求:
1:散列函数必须能够对任意长度的明文产生一个固定长度的密文值。 2:不允许任何一个明文在散列后得到的密文和原明文一致。 3:任意两个不同的明文,散列后得到的密文必须不一致。
数字签名就是对数据进行密码变换后得到的一些数据,这些数据负责让接受方确认数据的来源以及确认数据的完整性。
注意!数字签名和加密是不冲突的。
举例:Wang 要给 FK 一个信件,不希望被别人看到,那么FK要开放一个公钥给Wang,Wang拿到公钥进行加密,密文由FK收到后使用私钥进行解密,就得到了明文,这是加密。
若Wang发送给FK的信件,FK需要确认是由Wang发送的,并且要保证数据的完整性,那么就需要Wang在发送信件前,使用密钥进行信件签名,并且先将公钥提供给FK,FK使用公钥解密文件,检查签名是否又由Wang所发,虽然两个从加密技术上可以完全一致,均使用非对称加密即可,但意义和用途不同。
MD5:(Message-digest algorithm 5)消息摘要算法 是比MD4更安全的散列。
MD5进行4轮的运算。计算后得到的散列摘要为128位。
1:补位。 将明文长度补充到 length() 除以 512 得到 448 位。若不足,则先补1个1,其余位补0.
2:补数据 将明文原始长度以一个64位数表示,填充到最后,则明文长度将成为512位倍数。
3:初始化MD5参数 MD5的部分默认标志参数。
4:主要变换过程 4次循环,进行位与或异或等操作得到结果。
SHA: Secure Hash Fuction 安全散列函数。也是进行4轮的运算,计算后得到的散列摘要为160位,保存在5个32位的数据中。
计算方式过程与MD5极其类似,但变换过程略有不同,默认标志参数也有不同。
数字签名的算法和非对称加密算法通常一致。