加密算法学习:加解密基础概念
考虑一个经典的问题:拜占庭将军问题
拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了达到防御目的,每个军队都分隔很远,将军与将军之间只能靠信差传消息。在战争的时候,拜占庭军队内所有将军和副官必须达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定又扰乱整体军队的秩序。在进行共识时,结果并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成
究其根底,“拜占庭将军问题”最终想解决的是互联网交易、合作过程中的四个问题: (1)信息发送的身份追溯; (2)信息的私密性; (3)不可伪造的签名; (4)发送信息的规则
以上介绍来自百度百科,拜占庭将军问题主要描述的是在一个点对点网络中如何达成共识的问题,四个问题中的前三个问题可以通过密码学算法和协议解决,最后一个问题需要用共识算法解决。
上面三个问题对应功能为:消息验证、机密性、抗抵赖
1、消息验证
确认访问者的身份或在消息的来源,防止冒充他人的行为发生。主要功能是确保通信双方的实体都是可信的,与宣称的相符,并防止第三方假冒两方中的任意一方来接收或发送消息
2、机密性
保护信息免受主动的非法窃取、阅读灯攻击
3、抗抵赖
消息的制造者或发出者不能在事后否认他制作或发出的消息
除了这三个功能外,密码学算法还提供了一个功能:
4、完整性确认
确保消息在传输过程中没有被非法修改,也可以防止假冒的消息。
密码学发展阶段
密码三个阶段:
1、古典密码 ----- 由算法安全保证数据安全,算法不能被公开。
提供功能:机密性
2、近代密码学 ----- 对称加密算法,算法公开,秘钥保密
应用:加密,MAC(消息验证码)
提供功能:消息验证、完整性、消息验证
3、现代密码学 ----- 非对称加密,算法公开,私钥保密,公钥公开
应用:加密,签名
提供功能:消息验证、完整性、消息验证、抗抵赖
古典密码
古典密码是通过机密方法保密的方式来保证加密的机密性,由于加密方法没有被公开,因此加密方法没有经过检验,无法保证安全性。同理不应该使用自行设计的加密算法。
古典加密算法的攻击方式举例:
大部分古典加密算法都是通过字符映射来加密的,可以通过字符频率分析来破解。在英语中26个字母出现的频率是不一致的,当搜集到足够多的明文数据后,统计密文字符的频率便可以较容易的破解。另外在语言中像the这样固定且频率较高的组合也会成为攻击点
现代密码学基础介绍
随机数(RNG)分类
随机数在加密中应用非常多,随机数分以下三类
真随机数TRNG
根据物理过程生成的随机数,需要有外部随机源,如半导体噪音等。不可预测,不可计算
伪随机数PRNG ----- 不能在密码学中使用
根据算法计算过程生成的随机数,具有伪随机性,需要有较好的统计学随机性,但在获取到生成的数据数序列中的一部分后可以推出后续和之前的值
加密安全的伪随机数 CSPRNG ------- 可以在密码学中使用
在伪随机数上多了一个限制条件,在获取到随机数序列的一部分后无法通过计算得到后续的随机数序列
密码学安全判断条件
1、计算安全 在当前现实条件下,在可接受的时间内无法破解
2、无条件安全 在拥有无限资源下,也无法破解
现实中实际使用的加密算法都只能做到计算安全,无法实现无条件安全
对称加密算法
对称加密算法分为两大类:序列加密 、分组加密
序列加密
序列密码j机密方式
将数据的每一个bit与秘钥对应的bit位进行 mod 2运算(mod 2运算与 XOR运算性质相同),加密过程与解密过程都是相同的,因为XOR计算是可逆的.
Yi = e(x)=Si + Xi mod 2
Xi =d (y)=Si + Yi mod 2
那么序列密码加密的重点就在于密码序列Si的选择
序列密码一般的加密方式为 存在一个密码序列生成器,对于给定的秘钥(种子,控制参数等) 可以生成伪随机密码序列
由于XOR可逆的原因,知道了一段密文及对应的明文,则可以通过算法计算出对应的密码序列 ,而一般的伪随机数算法在已知的序列中的部分元素时可以计算出后续的随机序列,因此不能用来生成密码序列,只能使用CSPRNG(加密安全的伪随机数)
常用的伪随机密码序列生成方法:
基于 LFSR(线性反馈移位寄存器) 的算法:A5/1(GMS使用,目前处于临界安全) A5/2(不安全,已破解) Trivium
分组加密
分组加密方式:分组加密算法每次只能加密一个固定长度的分组,因此加密前需要将数据分为一个个标准分组,每个分组长度与加密算法的要求的分组长度一致,单独对每个分组进行加密,将加密后的分组拼接在一起后就是全部的密文
由于存在明文数据长度与不是加密分组的整数倍的数据,因此需要对原始数据进行填充,常见填充方式为先在明文后添加一个为1的bit位,并在之后填充为0的bit位,知道明文为分组的整数倍
分组密码都是基于以下两种操作:
混淆:是秘钥与密文之间的关系尽可能的模糊,常用的方式为替换
扩散:隐蔽明文的统计属性,将一个明文符号的影响扩散到多个密文符号的加密操作,常用的方式为位置换
分组密码算法都会对分组进行多轮混淆和扩散操作
分组加密主流的算法为 DES,AES
DES数据加密标准(美国国家标准)
DES数据加密的特点如下:
秘钥长度为64位,有效秘钥长度为56位,其中有8位为校验位。
每次加密分组大小为64位,操作单位为位
加密过程与解密过程非常相似,明文分组与密文分组存在一对一映射关系。
当前DES算法无有意义的分析攻击方法,但由于秘钥只有56位,使用专用硬件可以在几天内暴力破解DES秘钥
由于DES算法的秘钥空间过小,虽然算法本身无法破解,但可以通过暴力破解的方式获得DES的秘钥,因此基于DES提出了一些增强算法,其中最长用的就是3DES,即对同一个分组用三个秘钥按顺序进行三次加密,过程如下:
3重DES算法加密,三轮秘钥分别为k1,k2,k3,
密文y的计算方式为:Yi =Ek3(Ek2(Ek1(x)))
由于DES存在大量的遗留应用无法切换,因此3DES还有另一种兼容方式:第二轮使用解密算法,当三轮秘钥不同时,就是3DES,当K1=K2时,就等效于1轮加密,这种模式可以用于兼容已有的不可更改的系统
AES(高级加密标准)
为了应对DES加密算法秘钥空间过小的问题而由美国国家安全局征集遴选出的加密算法
算法特点:
加密秘钥可以选择128、196、256三种长度的秘钥
加密分组大小为 128位,操作的基本单位为字节
软硬件实现都比较高效
分组密码加密数据每次仅加密一个分组,每个分组对应的原文与密文存在一一映射的关系。实际使用加密算法是,需要加密的数据一般不仅仅是一个分组大小,对于加密长明文时,分组加密有多种操作模式,其中最主流的是以下几种方式:
ECB(电子密码本模式)
CBC(密码分组链接模式)
CFB(密码反馈模式)
OFB(输出反馈模式)
CTR(计数器模式)
下面分别介绍一下:
ECB(电子密码本模式):
是最简单直接的加密模式,即将长明文按分组大小进行分组,并使用选择的对称加密对每一个分组进行加密,将加密后的密文按顺序拼接起来就是最终密文。
问题:
1.对于给定明文x,秘钥k,其对应的密文是固定的
2.可以在不破解秘钥的情况下通过替换攻击实施
3.明文的统计属性被保留了(特别时位图数据)
以下E()为加密算法,k为加密秘钥,Xi为第i个明文分组,Yi为第i个密文分组,Si为中间结果,xor 为异或操作
CBC(密码分组链接模式):
将长明文分组后,第一个明文分组和IV向量异或以后进行再进行加密,即
第二个明文开始,每个明文和前一个分组的密文异或以后再进行加密即
IV向量为一个随机数
OFB(密码反馈模式):
初始化是生成一个随机数IV,对IV加密得到S1,后续Si都使用Si-1进行加密获得。即
Si+1=Ek(Si)
然后用生成的SI序列与明文x进行异或操作
CFB(输出反馈模式):
CFB与OFB相似,OFB使用Si作为生成Si+1的基础,CFB使用Yi生成Si+1
S1=Ek(IV)
Si=Ek(Yi-1)
Yi=Si xor Xi
CTR模式(计数器模式):
初始时生成一个IV向量,加密序列Si的生成方式为
Si = Ek(IV + i)
Yi=Si xor Xi
MAC应用
使用加密算法对数据进行加密传输,密文在传输过程中发生了被篡改了,或者攻击者随意构造了一段密文,解密端是无法发现的,即解密端无法确认消息来源,也无法确认密文是有效的。即没有完整性确认。而MAC(Message Authentication Code, 消息验证码)就是用于解决这个问题的。 MAC一般是以密文及秘钥作为输入计算出一个校验码,解密端收到密文和MAC后,可以使用自己持有的秘钥和收到的密码,经过相同的算法计算出校验码,若校验码一直则可以认为该密文是有效的,MAC可以使用 HASH函数(HMAC)、分组密码进行(CBC-MAC,GMAC)构造。
MAC具有以下特点:
特点:
1.密码学校验和 :给定一个消息,可以生成一个密码学安全的消息校验和
2.对称性:MAC基于对称密码,签名方与验证方必须共享一个秘钥
3.任意长度消息:MAC可以接受任意长度的消息
4.MAC生成的验证标签长度固定
5.消息完整性保证,消息传输过程中的任意修改都可以被接收者检测到
6.消息验证,接收者可以确认消息来源
7.不具有不可否认性(抗抵赖)
hash算法:
哈希算法或者叫摘要算法,主要用于为数据生成数据指纹,具有以下特点:
1、任意长度输入固定长度输出,无论输入数据长度为多少,输出长度固定。
2、由于输出长度固定,因此过程不可逆,即无法通过输出的摘要值计算出输入
3、由于输出的长度固定,因此冲突(两个不同的输入对应一个输出)是必然存在的,在算法强度一致的情况下,输出长度越长,其冲突的可能性越低
加密算法中的hash算法要求如下:
1、单向性:对于给定hash值z,找到满足z=hash(x)的输入消息x在计算上不可行
2、弱抗冲突性:给定了消息x1,试图找到消息x2,使得hash(x1)==hash(x2)在计算上是不可行的
3、强抗冲突性:找到一对消息x1,x2,使得hash(x1)==hash(x2)在计算上是不可能的
常用Hash算法:
专用hash算法:MD4家族: MD4/MD5/SHA(SHA,SHA-1,SHA-2)
也可以由分组加密算法构建hash算法。
非对称加密算法
背景
对称加密算法提供了对数据的加密、验证。但存在两个问题无法解决:
1、秘钥分配问题
1.1 秘钥交换:网络中通信时需要提前交换秘钥,若没有交换秘钥,直接在不可信的信道上传输秘钥是不可取的,而没有交换秘钥,对称加密算法无法建立可靠信道。
1.2 秘钥管理:如果要加密双方能进行加密通信,要么两个节点间都需要有一个唯一秘钥,对于有n个节点的网络中,就需要有n*(n-1)/2个秘钥,每个节点需要存储N-1个秘钥,否则就需要引入可信第三方来进行秘钥分配
2、不能抗抵赖
由于通信双方都拥有同一个秘钥,因此当A与B通信时,A无法证明一条数据是B发送给A的,因为这条数据A可以自行伪造
而上面两个问题,非对称加密算法都能解决。
非对称算法是基于数学难题来保证安全性的(如RSA依赖大整数的因式分解十分困难),当前主要分为 大数因式分解、离散对数问题、椭圆曲线问题 三种类型。加密过程和解密过程不同,中间存在数学联系,加密和解密使用不同的秘钥。因此可以解决以上两个问题。
非对称加密算法拥有一对秘钥,分别为公钥和私钥。公钥和私钥都可以用于加密,公钥加密可以使用私钥进行解密,私钥加密可以使用公钥进行解密。其中公钥是对所有人公开的,而私钥仅创建者持有,当非对称加密算法用于加密功能时,一般是使用公钥进行加密,私钥进行解密,因此非对称加密也叫公钥加密算法。
非对称加密可以用于应用:
1、秘钥交换:利用公钥秘钥可以对外公开这个特性,可以用于在不可靠网络中交换秘钥。
2、签名:利用私钥是保密的,可以用私钥对数据进行签名,使数据具有不可否认性。
3、加密数据
下面介绍一下 秘钥交换和签名的大致原理:
1、秘钥交换
由于公钥对外公开,因此所有人都可以拿到公钥,因此在进行交互前,可以有发起者生成一个临时对称秘钥,并用公钥进行加密,并发送给接收者,由于公钥加密的密文仅能使用私钥解密,因此该临时秘钥只有私钥持有者能通过解密获取到,攻击者通过监听网络的方式拿到了密文也无法解密获取到临时秘钥。
2、签名
使用使用HASH函数计算数据的摘要值,并使用私钥对摘要值进行加密,得到的就是签名。由于签名是私钥对摘要值的加密,因此所有人都能通过公开的公钥对签名进行解密,并与自己计算出来的数据摘要值进行对比是否一致。若一致则说明数据是私钥持有者生成的。
从上面的两种应用中可以看出,签名和秘钥交换时,对数据加密使用的秘钥是不同的,一个使用公钥,一个使用私钥。
3、直接加密
由于非对称加密算法性能是对称加密算法的几百到几千分之一,即对相同数据量的数据进行加密,要满几百至几千倍。因此非对称加密算法很少直接用于数据加密
非对称算法常用算法:
RSA算法:可以用于秘钥交换,签名
DH算法:用于秘钥交换
DAS算法:签名算法

浙公网安备 33010602011771号