阅读完本篇文章,你可以知道:
- 什么是对称加密?
- 什么是非对称加密?
- 单向散列函数的应用
- 数字签名是什么?
开发中还需要知道的密码学知识我觉得应该还包括以下,不过我还不是很懂
- 数字证书是什么?
- 密码学中常见的编码格式?
概要
无论加密系统实现的算法如何不同、形式如何复杂,其基本组成部分是相同的,通常都包括四个部分:
(1)需要加密的初始消息,即明文M。
(2)用于加密或解密的钥匙,即密钥K。
(3)加密算法E或者解密算法D。
(4)加密后形成的消息,即密文C。
C=Ek(M)表示对明文M使用密钥K加密后得到密文C;同样,M=Dk(C)表示对密文C解密后得到明文M
对称加密
对称密钥加密技术又称为传统密钥加密技术,它是指在一个加密系统中通信双方使用同一密钥,或者能够通过一方的密钥推导出另一方的密钥的加密体制
在使用对称密钥加密时,信息交互的双方必须使用同一个密钥,并且这个密钥还要防止被他人窃取。另外,还要经常对所使用的密钥进行更新,以减少攻击者获取密钥的概率。因此,对称密钥加密技术的安全性依赖于密钥分配技术。
对称密钥加密技术的特点在于效率高、算法简单、易于实现、计算开销小,适合于对大量数据进行加密。它的最大缺点是密钥的安全性得不到保证,易被攻击。所以,密钥分发、密钥保存、 密钥管理 都是对称密钥加密的缺点。
在实际应用中,常用的对称密钥加密技术有DES算法、AES算法等。·
DES算法:数据加密标准(Data Encryption Standard),是由IBM公司研制的一种加密算法。DES是一个分组加密算法,以64位为分组对数据加密。加密和解密使用的是同一个密钥。它的密钥长度是56位。64位的明文从算法的一端输入,经过左右部分的迭代和密钥的异或、置换等一系列操作,从另一端输出。
·AES算法:高级加密标准(Advanced Encryption Standard),是由美国国家标准技术协会(NIST)在2001年发布的。AES也是一种分组密码,用以取代DES。AES作为新一代的安全加密标准,集合了强安全性、高性能、高效率、易用和灵活等优点,其分组长度为128位,密钥长度为128位、192位或256位。
非对称加密
背景:对称密码系统的一个严重缺陷是在任何密文传输之前,发送者和接收者必须使用一个安全信道预先商定和传送密钥。在实际的通信网中,通信双方很难确定一条合理的安全通道
公开密钥加密技术又称为非对称密钥加密技术,非对称加密为数据的加密与解密提供了一个非常安全的方法,使用一对密钥:公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。
例如:你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人——银行才能对你的消息解密。 与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
使用公钥加密技术,通信双方事先不需要通过通信信道进行密钥交换,并且公钥是公开的,因此密钥的持有量得到了减少,密钥保存量少,密钥分配简单,便于密钥的分发与管理。常用的公开密钥加密算法有RSA算法、DH算法等
当前应用最为广泛的公钥系统RSA(Rivest、Shamir、Adleman三人名字的缩写)是基于大数因子分解的复杂性来构造的,它是公钥系统最典型的加密算法,大多数使用公钥加密技术进行加密和数字签名的实际应用都是使用的RSA算法。RSA算法如下:
(1)用户选择两个足够大的保密素数p、q。
(2)计算n=pq,n的欧拉函数为F(n)=(p-1)(q-1)。
(3)选择一个相对比较大的整数e作为加密指数,使e与F(n)互素。
(4)解方程:ed=1modF(n),求出解密指数d。
(5)设M、C分别为要加密的明文和已被加密的密文;加密运算为C=Me mod n,解密运算为M=Cd mod n。
每个用户都有一个密钥(e,d,n),(e,n)是可以公开的密钥PK,(d,n)是用户保密的密钥PR,e是加密指数,d是解密指数。RSA算法的两个密钥中的任何一个都可用来加密,另一个用来解密。RSA算法的安全性基于数论中大数分解为质因子的困难性,从一个公开密钥加密的密文和公钥中推导出明文的难度,等价于分解两个大素数的乘积。可见分解越困难,算法的安全性就越高。DH(Diffie-Hellman)算法是最早的公钥算法,实质上是一个通信双方进行密钥协定的协议,它的用途仅限于密钥交换。DH算法的安全性依赖于计算离散对数的难度,离散对数的研究现状表明所使用的DH密钥至少需要1024位才能保证算法的安全性。
单向散列函数
单向散列函数算法也称为报文摘要函数算法,使用单向的散列函数,其实现过程是从明文到密文不可逆的过程。其实就是只能加密而不能将其还原,即理论上无法通过反向运算得到原始数据内容。因此,单向散列函数算法通常通常用来进行数据完整性验证。
单向散列函数表达式为h=H(M),其中M是一个变长消息,H(M)是定长的散列值。消息正确时,将散列值附于发送方的消息后,接收方通过重新计算散列值认证该消息。散列函数必须具有下列性质:
(1)M可应用于任意大小的数据块。
(2)H产生定长的输出。
(3)对任意给定的M,计算H(M)比较容易,用硬件和软件均可实现。
(4)对任意给定的散列码h,找到满足H(M)=h的M在计算上是不可行的,称之为单向性。
(5)对任何给定的分组M,找到满足N不等于M且H(M)=H(N)的N在计算上是不可行的,称之为抗弱碰撞性。
(6)找到任何满足H(M)=H(N)的(M,N)在计算上是不可行的,称之为抗强碰撞性。由于单向函数在速度上比对称加密算法还快,因此它被广泛应用,是数字签名和消息验证码(MAC)的基础,常用的单向散列函数算法有MD5和SHA-1等。
数字签名
背景:前面不管是对称加密还是非对称加密或者是单向散列函数,都是在保证传输的密文不会被破解,使敌人无法知道明文是什么。但是他无法保证消息的来源和完整性。比如A给B发送了一个消息M,敌人截取了消息M,虽然无法破解消息M,但是敌人可以直接替换消息M,随便造一个消息D发给B,B拿到消息D之后进行解密,解密得到的明文并不是A发来的!!!
现在需要解决2个问题:
- 消息确定是A发来的
- 消息在传输的过程中是完整的,没有被篡改。
数字签名是一种认证机制,以公钥技术和单向散列函数为基础,使得消息的产生都可以添加一个起签名作用的标识。签名保证了消息的来源和完整性,即数字签名能验证出数据在传输过程中有无改变,确保传输电子文件的完整性、真实性和不可替代性。
以下是数字签名的流程:
数字证书
还不是很懂。我想应该至少包括以下三点
- 什么是数字证书,产生背景是什么?解决什么问题?
- 如何给网站申请数字证书?
- 如何自制数字证书?
密码学中的编码格式
也不是很懂。