Ⅰ 密码学笔记
别人用A的公钥加密传输的信息,只有A的私钥可以解密。保证了传输的信息的安全性。
A用A的私钥加密的信息,别人用A的公钥才可以解密。可以证明这个信息一定是A传输而来的。
共享秘钥(对称加密):速度快,但无法保证客户端与服务器之间传输时秘钥的安全性。
和公开密钥(非对称加密):安全,速度慢。
一、客户端请求SSL(安全套接层)通信,报文中包含自己支持的SSL版本、加密算法等。
二、服务器应答,附带自己的公钥证书,协商定好的SSL版本、加密组件。
三、客户端根据自己本地的收信任的CA公钥,解封服务器公钥证书,得到服务器公钥。客户端生成一个随机码序列,用服务器公钥加密后,发回服务器。
四、服务器用私钥解密后,再加密将字符串传回客户端。
五、客户端确认服务器身份后,生成对称加密算法和共享秘钥,使用服务器公钥加密后,传给服务器。
六、此后,双方使用对称加密算法加密数据,进行传输。
上面过程中,一二用于获得合法的服务器公钥,三四用于确认服务器是否为真正私钥持有者(因为,服务器公钥谁都可以得到)。
使用与明文比特序列一样长的,真正的随机数序列,进行加密,绝对安全,因为穷举破译后能得到整个秘钥空间,毫无意义。
以分组为单位进行处理的密码算法称为 分组密码。
采用 Feistel网络。
以 64 bit 为一个加密单位,首先分成两部分,各32 bit 。
加密过程持续数轮,每轮中,使用子秘钥与右侧数据经过轮函数生成一个序列,然后与左侧做 XOR 。
每轮结束后,左右两侧交换。
加解密结构相同,轮数任意,函数任意。
使用秘钥1、2、3对明文进行加密、解密、加密三个过程,称为三重DES。
解密过程是为了兼容老版DES,如果1、2、3秘钥相同,则成为了普通DES。
1、3秘钥相同,2不同时,称为DES-EDE2 。
1、2、3秘钥不同,称为DES-EDE3 。
采用的是 Rijndael 算法,SPN结构。
输入分组为 128bit(16字节),秘钥长度可以以 32bit 为单位,在128~256bit之间选择。
该算法由多轮构成,10~14轮。
一轮中:
SubBytes,按字节,将输入分开,以每个字节为索引,查表找值,替换。
ShiftRows(平移行),按字节,打乱上面的输出。
MixColumns (混合列),按4个字节,比特运算。
与轮秘钥进行 XOR 。
分组密码:每次处理,特定长度的一块数据。
流密码:对数据流,连续处理,需要保持内部状态,记录进度。
明文分组加密后,直接成为,密文分组。
特点:攻击者无需破译,即可操纵明文。
明文分组,与前一个密文分组XOR,加密得到自己的密文分组。
第一个分组的前一个密文分组,由 初始化向量(随机比特序列) 代替。
加密时,需要从头开始。因为需要与密文分组做 XOR 。
解密时,对密文分组解密,直接与密文分组 XOR 即可。
同样的明文分组,密文值可以不相等。
密文分组可以损坏,影响部分。
密文分组比特缺失,影响全部。
前一个密文分组,通过加密算法得到一个比特序列,称为 密钥流 。
明文分组,与密钥流 XOR,得到自己的密文分组。
解密时,加密算法对密文分组进行加密,得到密钥流,与密文 XOR 可得到明文。
重复攻击:假设秘钥相同。发送 4 个分组,攻击者保存了后面3个。转天,你又发送了 4 个分组,攻击者将你后面三个替换,接收方解密后,只有 2 号分组有错。
对于每个分组,初始化向量加密后,得到密钥流。明文与密钥流 XOR 后,得到密文。
速度快,密钥流可以提前生成,或者,生成秘钥过程可以和 XOR 运算并行。
对每个计数器加密得到密钥流。密钥流与明文分组 XOR ,得到密文分组。
计数器生成的数,由 一个随机序列 nonce + 从1开始的递增数字 组成。
对每个分组,计数器递增后,加密,得到密钥流。
能够以任意顺序处理分组,因为加密时需要的初始数字序列能够计算出来。
为了确保安全,有地理局限,与不同的人通信需要不同密钥,共享繁琐。
每个员工有自己的密钥,密钥分配中心使用个人密钥,包裹临时会话密钥,分配给各个员工使用。
密文=明文的E次方 MOD N
E 和 N 是RSA加密用的密钥,也就是说,E 和 N 的组合就是公钥。
明文=密文的D次方 MOD N
D 和 N 的组合就是私钥。
寻两个很大的质数 p 和 q,相乘得到 N
L为 p-1 和 q-1 的最小公倍数
随机数生成器,不停地生成数字,直到满足如下条件:
1 < E < L
E 和 L 的最大公约数为 1
根据 E ,计算 D
1 < E < L
E × D MOD L = 1
保证 E 与 L 互质,则 D 一定存在。
求对数很容易,求 离散对数 很困难
对一个大数字进行质因数分解,人类未找到高效算法
利用了 MOD N下,求离散对数的困难度
加密后,密文长度翻倍
利用了 MOD N下,求平方根的困难度
密码实现通过 对椭圆曲线上的特定点进行特殊乘法。
利用了该种乘法的逆运算非常困难这一特性
单向散列函数 又称为,消息摘要函数、哈希函数、杂凑函数
输入的消息 又称为,原像
散列值 又称为,消息摘要、指纹
完整性 又称为,一致性
根据任意消息,计算出的散列值长度,固定
用时短
消息不同,散列值不同
具备单向性
MD是消息摘要的意思
可以产生 128bit 的散列值,但它们的抗碰撞性已被攻破
SHA-1散列值长度为 160bit,强碰撞性已被攻破
其余的统称为 SHA-2,散列值长度为各自后面的数字
欧盟版本
第三代 SHA
消息上限 2^64 bit。
消息长度需要是 512bit 的整数倍。这样的 512比特 称为一个输入分组。
过程:
消息末尾添加 1
然后添加 0,直到最后一个分组的 448比特 的位置
最后 64比特 需要保存原是消息的长度
对每个分组计算 80 个 32bit 的值。
过程:
将 512bit 分成 32bit × 16组,称为 W0~W15
从15组中按规律取4组,进行 XOR 运算,结果循环左移 1 位,得到另外一组。如此反复,得到总共 80 组。
ABCDE 五个 32bit 的缓冲区,保存了 160bit 的消息内部状态。
内部状态与每个 512bit 的输入分组混合,一共 80 个步骤。
最终得到 160bit 的最终内部状态。
暴力破解:暴力寻找与 1亿元合同 散列值相同的文件
生日攻击:准备两份 散列值相同的 1亿元合同
可以辨别 篡改,无法辨别 伪装,因此还需要 认证技术
认证技术包括 消息验证码 和 数字签名
消息验证码:可以向通信对象保证消息不被篡改
数字签名:可以向任何人保证通信对象不被篡改
message authentication code,简称 MAC。
相当于 使用共享密钥的单向散列函数
SWIFT:负责银行间的交易,公钥密码使用前,都是人工配送密钥的。
IPsec:对IP协议增加安全性,采用的是消息认证码
SSL/TLS:网上购物等场景中所用协议。
过程:
密钥填充 至单向散列函数要求的输入分组大小
填充后的密钥 与 ipad(16进制的36不断循环)XOR,得到ipadkey
与 消息 组合,计算散列值
填充后的密钥 与 opad(16进制的5C不断循环)XOR,得到opadkey
与 上面得到的散列值 组合,计算新的散列值,为最终的MAC值
对第三方证明
防止否认
因为知晓密钥的只有两个当事人,第三者无法确定能拿到合法的密钥,无法自己计算合法MAC值
RSA:利用质因数分解难度的那个
ElGamal:利用求离散对数的困难度的那个,数字签名有漏洞,现仅用于公钥密码
DSA:Schnorr算法与ElGamal方式的变体,只能用于数字签名
Rabin:利用了求MOD N中平方根的困难度,可用于数字签名和公钥密码
例如,verisign公司的认证业务分为三个等级,等级越高,越严格
ITU 国际电信联盟和 ISO 国际标准化组织制定的 X.509 规范如下
大体包含以下内容:
签名前的证书——签名对象的各种消息
数字签名算法——签名时所用的算法
数字签名——得到的数字签名
PKI :为了能有效使用公钥而制定的一系列规范和规格
PKI 的组成要素如下
两种方法:一种是由认证机构生成,一种是由 PKI 用户自行生成
认证机构有一个 CRL(认证作废清单),具有数字签名,记载了已经作废的证书的编号。
认证时,从上(根证书)往下
对于密钥,关键的是 密钥空间的大小
DES 的密钥 实质长度(即,除去校验错误的比特后的长度)7字节
DES-EDE2 的实质长度 14字节,DES-EDE3 的实质长度 21字节
AES 的密钥长度可以从 128、192 和 256bit 当中选
会话密钥:每次通信中,仅使用一次的密钥
主密钥:一直被重复使用的密钥
CEK:Contents Encrypting Key
KEK: Key Encrypting Key
各个步骤中的密钥管理方法
两种方法:
用随机数生成密钥:使用具备不可预测性的伪随机数生成器生成随机数
用口令生成密钥:一般使用,口令 + 一串称为 salt 的随机数,得到他们的散列值作为密钥(这种方法称为:基于口令的密码)
事先共享
秘钥分配中心
使用公钥密钥
Diffie-Hellman 密钥交换
密钥更新:一种提高通信机密性的技术
原理:
使用 共享密钥 进行通信时,定期改变密钥。
双方使用同样的方法,对当前密钥求 散列值,并作为下一个密钥
优点:
后向安全:防止破译过去的内容
对密钥进行加密,然后保存
意义:
同时对多个密钥进行加密,可以减少保存密钥的数量
步骤:
P 为非常大的质数,G 为 P 的 生成元
目的为,将 随机数 A 的信息 含蓄地发给了 B
目的为,将 随机数 B 的信息 含蓄地发给了 A
计算方法:密钥 = (G ^ B MOD P) ^ A MOD P = G^(A × B) MOD P
计算方法:密钥 = (G ^ A MOD P) ^ B MOD P = G^(A × B) MOD P
对于一个质数 P ,只有它的生成元在进行 G ^ x MOD P 时,结果能够覆盖 0 ~ P-1 的所有数字
用途:用于安全的保存密钥
由来:
一 生成会话密钥 CEK ,加密消息
二 需要保密 会话密钥CEK,使用 密钥加密密钥KEK 对会话密钥进行保密
三 现在需要保密 KEK 这个密钥,选择使用口令生成这个 KEK
保密的问题最终都归结为了 安全保存密钥,然而我们记不住密钥。
于是,选择单向散列函数对口令生成散列值,作为密钥。
这个密钥无需保存,我们可以通过口令随时求得,口令也无法被反向推出,且口令方便记忆。
顺带,为了防止字典攻击,生成口令散列值时,需要使用 口令 + salt(随机数序列)
事先 已准备好 候选列表 的攻击方法
随机性
不可预测性
不可重见性
这三个性质,越往下越严格。分别称为:
弱伪随机数(不可用于密码学)
强伪随机数
真随机数
伪随机数生成器是公开的,种子是保密的。
确保种子的不可预测性,更加容易些。
种子是用来对伪随机数生成器的 内部状态进行初始化 的
R1 = (A × R0 + C) MOD M
数据有限,不能用于密码学
单向散列函数的单向性是支撑伪随机数序列不可预测性的基础
利用 AES 等对称密钥对内部状态进行加密
从当前时间开始,利用加密算法 求得加密后的时间的掩码 (因为密钥未知,别人无法推测出掩码信息)
与内部状态 XOR,加密后输出, 得到伪随机数序列
对伪随机数序列加密后,作为 下一个内部状态
针对极端情况的密码软件,具有全部功能。
TLS 由 TLS 记录协议 和 TLS 握手协议 叠加而成。
负责消息的 加密、压缩 和 认证
商定 客户端和服务器 所用的加密算法和密钥
负责 传递 变更密码的信号
发生错误时 通知对方
传输数据
Ⅱ 密码学部分 数据加密标准(DES)相关知识来回答,越详细约好
额……我该说啥呢……
首先给你一个网址看看:http://kweenzy.blog.51cto.com/1093584/1008506
嘛……这个就是我本人的博客,所以不算抄袭哈……
1、见链接中【轮结构】下面的图,每一个方框的右下角都写了诸如“56bit”的字样(1bit就是1位)……
2、见整个文章的中部位置红色字体“密钥的处理流程……”下面所述……
3、和4、……请参见原文然后想一下该怎么回答……不过S盒的工作原理是啥我还真不知道……
5、DES的安全弱点啊……最显而易见的是有弱密钥,但是数量很少,在每次产生子密钥的时候稍微做一下检查就可以解决这个问题,貌似也说不上什么弱点?以及,S盒是整个运算里唯一的一个非线性运算,其他的都是线性运算,线性运算就表示可以进行反推,所以S盒的安全性非常重要!但是S盒是完全公开的啊……更神奇的是研究了半天发现了一些S盒的规律但是根据发现出来的规律编程重新生成S盒的话,安全性没有这个S盒高!另外,其实整个DES的加密过程经过了NSA(美国国家安全局)的修改,他们还拒绝提供为什么修改的信息,所以很多人担心其实NSA可以分分钟破解DES……其他的安全弱点……记不清了……回头找资料来补充回答哈……
6、我靠不会描述!……骚年你自己加油看完资料再思考怎么进行数学描述……
7、密钥的使用顺序是相反的……【其实好像密钥进行左循环移位时,加密密钥第一轮移位是1位,解密密钥第一轮是0位……
8、骚年你自己加油画出示意图……【EDE就是先加密再解密再加密,3就是使用三个不同的密钥K1K2K3……
Ⅲ 密码学基础
密码学是研究如何保护信息安全性的一门科学,涉及数学、物理、计算机、信息论、编码学、通讯技术等学科,已经在生活中得到广泛应用。
密码学组成分支分为编码学和密码分析学。密码编码学主要研究对信息进行编码,实现信息的隐蔽。密码分析学主要研究加密消息的破译或消息的伪造。二者相互独立,又相互依存,在矛盾与斗争中发展,对立统一。
密码学的发展历史大致可划分为三个阶段:
机密性
仅有发送方和指定的接收方能够理解传输的报文内容。窃听者可以截取到加密了的报文,但不能还原出原来的信息,即不能得到报文内容。
鉴别
发送方和接收方都应该能证实通信过程所涉及的另一方, 通信的另一方确实具有他们所声称的身份。即第三者不能冒充跟你通信的对方,能对对方的身份进行鉴别。
报文完整性
即使发送方和接收方可以互相鉴别对方,但他们还需要确保其通信的内容在传输过程中未被改变。
不可否认性
如果人们收到通信对方的报文后,还要证实报文确实来自所宣称的发送方,发送方也不能在发送报文以后否认自己发送过报文。
密码体制是一个使通信双方能进行秘密通信的协议。密码体制由五要素组成,P(Plaintext明文集合),C(Ciphertext密文集合),K(Key密钥集合),E(Encryption加密算法),D(Decryption解密算法),且满足如下特性:
<script type="math/tex; mode=display" id="MathJax-Element-1"> p ∈ P </script>
<script type="math/tex; mode=display" id="MathJax-Element-2"> c ∈ C </script>
<script type="math/tex; mode=display" id="MathJax-Element-3"> k1 ∈ K, k2 ∈ K </script>
<script type="math/tex; mode=display" id="MathJax-Element-6"> E_{k1}(p) = c,D_{k2}(c) = p </script>
无论是用手工或机械完成的古典密码体制,还是采用计算机软件方式或电子电路的硬件方式完成的现代密码体制,其加解密基本原理都是一致的。都是基于对明文信息的替代或置换,或者是通过两者的结合运用完成的。
替代(substitution cipher):有系统地将一组字母换成其他字母或符号;
例如‘help me’变成‘ifmq nf’(每个字母用下一个字母取代)。
置换(Transposition cipher):不改变字母,将字母顺序重新排列;
例如‘help me’变成‘ehpl em’(两两调换位置)。
密码分析者通常利用以下几种方法对密码体制进行攻击:
已知明文分析法:
知道一部分明文和其对应的密文,分析发现秘钥。
选定明文分析法:
设法让对手加密自己选定的一段明文,并获得对应的密文,在此基础上分析发现密钥。
差别比较分析法:
设法让对方加密一组差别细微的明文,通过比较他们加密后的结果来分析秘钥。
无条件安全:
无论破译者的计算能力有多强,无论截获多少密文,都无法破译明文。
计算上安全:
破译的代价超出信息本身的价值,破译所需的时间超出信息的有效期。
任何密码系统的应用都需要在安全性和运行效率之间做出平衡,密码算法只要达到计算安全要求就具备了实用条件,并不需要实现理论上的绝对安全。1945年美国数学家克劳德·E·香农在其发布的《密码学的数学原理》中,严谨地证明了一次性密码本或者称为“弗纳姆密码”(Vernam)具有无条件安全性。但这种绝对安全的加密方式在实际操作中需要消耗大量资源,不具备大规模使用的可行性。事实上,当前得到广泛应用的密码系统都只具有计算安全性。
一个好的密码体制应该满足以下两个条件:
在已知明文和密钥的情况下,根据加密算法计算密文是容易的;在已知密文和解密密钥的情况下,计算明文是容易的。
在不知道解密密钥的情况下,无法从密文计算出明文,或者从密文计算出明文的代价超出了信息本身的价值。
常见的密码算法包括:
对称密码体制也称单钥或私钥密码体制,其加密密钥和解密密钥相同,或实质上等同, 即从一个易于推出另一个。
优点:保密性高,加密速度快,适合加密大量数据,易于通过硬件实现;
缺点:秘钥必须通过安全可靠的途径传输,秘钥的分发是保证安全的关键因素;
常见对称密码算法:DES (密钥长度=56位)、3DES( 三个不同的密钥,每个长度56位)、AES(密钥长度128/192/256可选)、IDEA(密钥长度128位)、RC5(密钥长度可变)。
根据加密方式的不同,对称密码又可以分为分组密码和序列密码。
将明文分为固定长度的组,用同一秘钥和算法对每一块加密,输出也是固定长度的密文,解密过程也一样。
又称为流密码,每次加密一位或一字节的明文,通过伪随机数发生器产生性能优良的伪随机序列(密钥流),用该序列加密明文消息序列,得到密文序列,解密过程也一样。
非对称密码体制又称双钥或公钥密码体制,其加密密钥和解密密钥不同,从一个很难推出另一个。其中的加密密钥可以公开,称为公开密钥,简称公钥;解密密钥必须保密,称为私有密钥,简称私钥。
优点:密钥交换可通过公开信道进行,无需保密。既可用于加密也可用于签名。
缺点:加密速度不如对称密码,不适合大量数据加密,加密操作难以通过硬件实现。
非对称密码体制不但赋予了通信的保密性,还提供了消息的认证性,无需实现交换秘钥就可通过不安全信道安全地传递信息,简化了密钥管理的工作量,适应了通信网的需要,为保密学技术应用于商业领域开辟了广阔的前景。
常见的非对称密码算法:RSA(基于大整数质因子分解难题)、ECC(基于椭圆曲线离散对数难题)。
对非对称密码的误解
非对称密码比对称密码更安全?
任何一种算法的安全都依赖于秘钥的长度、破译密码的工作量,从抗分析的角度看,没有哪一方更优越;
非对称密码使对称密码成为过时技术?
公钥算法很慢,一般用于密钥管理和数字签名,对称密码将长期存在,实际工程中采用对称密码与非对称密码相结合。
哈希函数将任意长的消息映射为一个固定长度的散列值,也称消息摘要。消息摘要可以作为认证符,完成消息认证。
哈希是单向函数,从消息摘要来推理原消息是极为困难的。哈希函数的安全性是由发生碰撞的概率决定的。如果攻击者能轻易构造出两个不同的消息具有相同的消息摘要,那么这样的哈希函数是不可靠的。
常见的哈希函数有:MD5,SHA1,HMAC。
数字签名是公钥密码的典型应用,可以提供和现实中亲笔签名相似的效果,在技术上和法律上都有保证。是网络环境中提供消息完整性,确认身份,保证消息来源(抗抵赖性)的重要技术。
数字签名与验证过程:
发送方用哈希函数从报文文本中生成一个128位的散列值(或报文摘要),发送方用自己的私钥对这个散列值进行加密来形成自己的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给接收方。接收方收到报文后,用同样的哈希函数从原始报文中计算出散列值(或报文摘要),接着再用发送方的公钥来对报文附加的数字签名进行解密得出另一个散列值,如果两个散列值相同,那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现消息的完整性和不可抵赖性。
在网络安全中,密钥的地位举足轻重
。如何安全可靠、迅速高效地分配密钥、管理密钥一直是密码学领域中的重要问题。
密钥生成可以通过在线或离线的交互协商方式实现,如密码协议等 。密钥长度应该足够长。一般来说,密钥长度越大,对应的密钥空间就越大,攻击者使用穷举猜测密码的难度就越大。选择密钥时,应该避免选择弱密钥,大部分密钥生成算法采用随机过程或伪随机过程生成密钥。
采用对称加密算法进行保密通信,需要共享同一密钥。通常是系统中的一个成员先选择一个秘密密钥,然后将它传送另一个成员或别的成员。X9.17标准描述了两种密钥:密钥加密密钥和数据密钥。密钥加密密钥加密其它需要分发的密钥;而数据密钥只对信息流进行加密。密钥加密密钥一般通过手工分发。为增强保密性,也可以将密钥分成许多不同的部分然后用不同的信道发送出去。
密钥附着一些检错和纠错位来传输,当密钥在传输中发生错误时,能很容易地被检查出来,并且如果需要,密钥可被重传。接收端也可以验证接收的密钥是否正确。发送方用密钥加密一个常量,然后把密文的前2-4字节与密钥一起发送。在接收端,做同样的工作,如果接收端解密后的常数能与发端常数匹配,则传输无错。
当密钥需要频繁的改变时,频繁进行新的密钥分发的确是困难的事,一种更容易的解决办法是从旧的密钥中产生新的密钥,有时称为密钥更新。可以使用单向函数进行更新密钥。如果双方共享同一密钥,并用同一个单向函数进行操作,就会得到相同的结果。
密钥可以存储在脑子、磁条卡、智能卡中。也可以把密钥平分成两部分,一半存入终端一半存入ROM密钥。还可采用类似于密钥加密密钥的方法对难以记忆的密钥进行加密保存。
密钥的备份可以采用密钥托管、秘密分割、秘密共享等方式。
密钥托管:
密钥托管要求所有用户将自己的密钥交给密钥托管中心,由密钥托管中心备份保管密钥(如锁在某个地方的保险柜里或用主密钥对它们进行加密保存),一旦用户的密钥丢失(如用户遗忘了密钥或用户意外死亡),按照一定的规章制度,可从密钥托管中心索取该用户的密钥。另一个备份方案是用智能卡作为临时密钥托管。如Alice把密钥存入智能卡,当Alice不在时就把它交给Bob,Bob可以利用该卡进行Alice的工作,当Alice回来后,Bob交还该卡,由于密钥存放在卡中,所以Bob不知道密钥是什么。
秘密分割:
秘密分割把秘密分割成许多碎片,每一片本身并不代表什么,但把这些碎片放到一块,秘密就会重现出来。
秘密共享:
将密钥K分成n块,每部分叫做它的“影子”,知道任意m个或更多的块就能够计算出密钥K,知道任意m-1个或更少的块都不能够计算出密钥K。秘密共享解决了两个问题:一是若密钥偶然或有意地被暴露,整个系统就易受攻击;二是若密钥丢失或损坏,系统中的所有信息就不能用了。
加密密钥不能无限期使用,有以下有几个原因:密钥使用时间越长,它泄露的机会就越大;如果密钥已泄露,那么密钥使用越久,损失就越大;密钥使用越久,人们花费精力破译它的诱惑力就越大——甚至采用穷举攻击法。
不同密钥应有不同有效期。数据密钥的有效期主要依赖数据的价值和给定时间里加密数据的数量。价值与数据传送率越大所用的密钥更换越频繁。如密钥加密密钥无需频繁更换,因为它们只是偶尔地用作密钥交换,密钥加密密钥要么被记忆下来,要么保存在一个安全地点,丢失该密钥意味着丢失所有的文件加密密钥。
公开密钥密码应用中的私钥的有效期是根据应用的不同而变化的。用作数字签名和身份识别的私钥必须持续数年(甚至终身),用作抛掷硬币协议的私钥在协议完成之后就应该立即销毁。即使期望密钥的安全性持续终身,两年更换一次密钥也是要考虑的。旧密钥仍需保密,以防用户需要验证从前的签名。但是新密钥将用作新文件签名,以减少密码分析者所能攻击的签名文件数目。
如果密钥必须替换,旧钥就必须销毁,密钥必须物理地销毁。
PKI是一个利用公钥加密技术为密钥和证书的管理,所设计的组件、功能子系统、操作规程等的集合,它的主要任务是管理密钥和证书,为网络用户建立安全通信信任机制。
数字证书是一个包含用户身份信息、公钥信息、证书认证中心(CA)数字签名的文件。
作用:数字证书是各类终端实体和最终用户在网上进行信息交流及商业活动的身份证明,在电子交易的各个缓解,交易的各方都需要验证对方数字证书的有效性,从而解决相互间的信任问题。
CA全称Certificate Authentication,是具备权威性的数字证书申请及签发机构。
CA作为PKI的核心部分,主要由注册服务器组、证书申请受理和审核机构、认证中心服务器三者组成。
注册服务器:通过 Web Server 建立的站点,可为客户提供24×7 不间断的服务。客户在网上提出证书申请和填写相应的证书申请表。
证书申请受理和审核机构:负责证书的申请和审核。
认证中心服务器:是数字证书生成、发放的运行实体,同时提供发放证书的管理、证书废止列表(CRL)的生成和处理等服务。
通过CA可以实现以下功能:
1. 接收验证最终用户数字证书的申请;
2. 确定是否接受最终用户数字证书的申请和审批;
3. 向申请者颁发、拒绝颁发数字证书;
4. 接收、处理最终用户数字证书的更新;
5. 接受最终用户数字证书的查询、撤销;
6. 产生和发布CRL(证书废止列表);
7. 数字证书的归档;
8. 密钥归档;
9. 历史数据归档;
五、量子密码
5.1 量子计算
由于量子计算技术取得了出人意料的快速发展,大量仅能抵御经典计算机暴力破解的密码算法面临被提前淘汰的困境 。
非对称密码系统有效解决了对称密码面临的安全密钥交换问题,因而广泛应用于公钥基础设施、数字签名、联合授权、公共信道密钥交换、安全电子邮件、虚拟专用网以及安全套接层等大量网络通信活动之中。不幸的是,随着量子计算的发展,包括RSA密码、ECC密码以及DH密钥交换技术等非对称密码算法已经从理论上被证明彻底丧失了安全性。相对于对称密码系统还可以采取升级措施应对量子威胁,非对称密码系统必须采取全新方法进行重建 。
5.2 量子密码
量子密码是以量子力学和密码学为基础,利用量子物理学中的原理实现密码体制的一种新型密码体制,与当前大多使用的经典密码体制不一样的是,量子密码利用信息载体的物理属性实现。目前量子密码用于承载信息的载体包括光子、压缩态光信号、相干态光信号等。
由于量子密码体制的理论基础是量子物理定理,而物理定理是物理学家经过多年的研究与论证得出的结论,有可靠的理论依据,且不论在何时都是不会改变的,因此,理论上,依赖于这些物理定理的量子密码也是不可攻破的,量子密码体制是一种无条件安全的密码体制。
Ⅳ 【密码学笔记】第3部分 对称密码
跟诸位大牛相比,笔者阅历尚浅、经验不足,笔记中若有错误,还需继续修正与增删。欢迎大家的批评与指正。
查看上一篇请点击以下链接: 【密码学笔记】第2部分 历史上的密码
1. XOR运算
2. 一次性密码本
3. 对称密码算法
3.1 DES
3.2 三重DES
3.3 AES
3.4 Rijndael
4. 对称密码的选择
5. 对称密码的评价
参考书目
XOR运算,又称为 异或 运算,运算结果是 同0异1 。
对同一个比特序列进行两次XOR之后就会回到最初的状态,因此XOR运算可用于对称密码的加密和解密。
一次性密码本(又称为 维纳密码 )是一种非常简单的密码,它的原理是“ 将明文与一串随机的比特序列进行XOR运算 ”。
一次性密码本是无法破译的。 这是因为在对它尝试解密的过程中,所有的排列组合都会出现,既会包含规则字符串,也会包含英文单词,还会包含乱码。由于明文中所有可能的排列组合都会出现,因此 我们无法判断其中哪一个才是正确的明文 。
一次性密码本是一种非常不实用的密码。 原因如下:
a. 密钥的配送 。( 最大的问题 )如果能够有一种方法将密钥安全地发送出去,那么就可以用同样的方法安全地发送明文。
b. 密钥的保存 。 密钥的长度必须和明文的长度相等。 如果能够有办法安全保存与明文一样长的密钥,那就有办法安全保存明文本身。
c. 密钥的重用 。在一次性密码本中绝对不能重用过去用过的随机比特序列,因为作为密钥的比特序列一旦泄露,过去所有的机密通信内容将全部被解密。
d. 密钥的同步 。在通信过程中,发送者和接收者的密钥的比特序列不允许有任何错位,否则错位的比特后的所有信息都将无法解密。
e. 密钥的生成 。一次性密码本需要生成大量的随机数,这里的随机数并不是通过计算机程序生成的伪随机数,而必须是无重现性的真正随机数。
DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。
DES是以64比特的明文(比特序列)为一个单位来进行加密的,这个64比特的单位称为 分组 。以分组为单位进行处理的密码算法称为 分组密码 。
DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代,而迭代的具体方式就称为 模式(mode) 。
DES的基本结构又称为 Feistel网络 ,这一结构不仅被用于DES,在其他很多密码算法中也有应用。在Feistel网络中,加密的各个步骤称为 轮(round) ,整个加密过程就是进行若干次轮的循环。下图展现的是Feistel网络中一轮的计算流程。DES是一种16轮循环的Feistel网络。
一轮的具体计算步骤 如下:
a. 将输入的数据等分为左右两部分;
b. 将输入的右侧直接发送到输出的右侧;
c. 将输入的右侧发送到轮函数;
d. 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列;
e. 将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。
我们需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调。
Feistel网络的解密操作只要按照相反的顺序来使用子密钥就可以完成了。
Feistel网络的性质 :
a. 轮数可以任意增加;
b. 加密时无论使用任何函数作为轮函数都可以正确解密(即使该函数不存在反函数);
c. 加密和解密可以用完全相同的结构来实现。
综上所述,无论是任何轮数、任何轮函数,Feistel网络都可以 用相同的结构实现加密和解密 ,且加密的结果必定能够正确解密。
三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,也称为 TDEA ,通常缩写为 3DES 。
明文经过三次DES处理才能变成最后的密文,由于DES密钥的长度实质上是56比特,因此三重DES的密钥长度就是168比特。
三重DES并不是进行三次DES加密,而是 加密→解密→加密 的过程,目的是 让三重DES能够兼容普通的DES ,当所有密钥都相同时,三重DES也就等同于普通的DES。
尽管三重DES目前还被银行等机构使用,但其处理速度不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。
AES是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终选出了一种名为 Rijndael 的对称密码算法,并将其确定为AES。
AES的选拔并不仅仅考虑一种算法是否存在弱点,算法的速度、实现的容易性等也都在考虑范围内。此外,这种算法还必须能够在各种平台上有效工作。
Rijndael是由比利时密码学家设计的 分组密码算法 ,被选为新一代的标准密码算法——AES。
和DES一样,Rijndael算法也是由多个 轮 构成的,其中每一轮分为 SubBytes 、 ShiftRows 、 MixColumns 和 AddRoundKey 共4个步骤。DES使用Feistel网络作为其基本结构,而Rijndael使用的是 SPN结构 。
加密过程 :
a. 首先,需要 逐个字节 地对16字节的输入数据进行SubBytes处理,即以每个字节的值(0~255)为索引,从一张拥有256个值的 替换表 (S-Box)中查找出对应值( 类似于简单替换密码 )。
b. 进行ShiftRows处理,即以4字节为单位的 行(row) 按照一定的规则向左平移,且每一行平移的字节数是不同的。
c. 进行MixColumns处理,即对一个4字节的值进行比特运算,将其变为另外一个4字节值。
d. 最后,将MixColumns的输出与轮密钥进行 XOR ,即进行AddRoundKey处理。至此,Rijndael的一轮就结束了。实际上,在Rijndael中需要重复进行10~14轮计算。
在SPN结构中, 输入的所有比特在一轮中都会被加密 。和每一轮都只加密一半输入的比特的Feistel网络相比,这种方式的优势在于 加密所需要的轮数更少 。此外,这种方式还有一个优势,即 SubBytes、ShiftRows和MixColumns可以分别以字节、行和列为单位进行并行计算 。
在Rijndael的 加密 过程中,每一轮所进行的处理为:
SubBytes→ShiftRows→MixColumns→AddRoundKey
而在 解密 时,则是按照相反的顺序来进行的,即:
AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes
解密过程 :
Rijndael算法背后有着 严谨的数学结构 ,即从明文到密文的计算过程可以全部用公式来表达,这是以前任何密码算法都不具备的性质。如果Rijndael的公式能够通过数学运算来求解,那也就意味着Rijndael能够通过数学方法进行破译,这也为新的攻击方式的产生提供了可能。
(1) 因为现在用暴力破解法已经能够在现实的时间内完成对DES的破译, DES不应再用于任何新的用途 。但是也需要保持与旧版本软件的兼容性。
(2) 尽管在一些重视兼容性的环境中会使用三重DES,但 我们也没有理由将三重DES用于新的用途 ,它会逐渐被AES所取代。
(3) 现在应该使用的算法是AES(Rijndael) ,因为它安全、快速,而且能够在各种平台上工作。
(4) AES最终候选算法应该可以作为AES的备份 ,因为这些密码算法也都经过了严格的测试,且没有发现任何弱点。
(5) 一般来说, 我们不应该使用任何自制的密码算法 ,而是应该使用AES。
优点 :
使用一种密钥空间巨大,且在算法上没有弱点的对称密码,就可以通过密文来确保明文的机密性。 巨大的密钥空间能够抵御暴力破解,算法上没有弱点可以抵御其他类型的攻击。
不足 :
a. 用对称密码进行通信时,还会出现 密钥的配送问题 ,即如何将密钥安全地发送给接受者。为了解决密钥配送问题,需要 公钥密码技术 。
b. 尽管使用对称密码可以确保机密性,但仅凭这一点还并不能完全放心。 例如发送者可能发送伪造的密文,并利用解密时返回的错误来盗取信息。
衷心感谢您的阅读。
查看下一篇请点击以下链接: 【密码学笔记】第4部分 分组密码的模式
Ⅳ 密码学基础(二):对称加密
加密和解密使用相同的秘钥称为对称加密。
DES:已经淘汰
3DES:相对于DES有所加强,但是仍然存在较大风险
AES:全新的对称加密算法。
特点决定使用场景,对称加密拥有如下特点:
速度快,可用于频率很高的加密场景。
使用同一个秘钥进行加密和解密。
可选按照128、192、256位为一组的加密方式,加密后的输出值为所选分组位数的倍数。密钥的长度不同,推荐加密轮数也不同,加密强度也更强。
例如:
AES加密结果的长度由原字符串长度决定:一个字符为1byte=4bit,一个字符串为n+1byte,因为最后一位为'