本系列是陈春华教授所讲授的信息系统安全课程的个人笔记
大纲
- 数据机密性保护
- 加密概念
- 古典算法
- 替代算法
- 换位算法
- 现代密码体制
- 对称密码体制
- 非对称密码体制
- 对称与非对称体制相比
- Https
数据的机密性保护
机密性保护定义:保护数据不为非授权者(用户、实体或者过程)获取或者使用
分类:
- 可读性保护:借助数据加密技术
- 可见性保护:借助数据隐藏技术
数据加密概念
数据加密:隐藏数据的可读性,使非授权用户不能直接了解数据内容
加密系统:明文+算法+秘钥=密文
加密算法分类:
古典算法(不安全 密钥空间小 计算机可穷举秘钥破解)
1.替代算法:substitution cipher
原理:将明文中每个位置的字母用其他字母代替
举例:
- 凯撒密码算法:明文字母替换成字母表中后面举例5位的字母,如CHINA->HMNSF
- 维基利亚密码:按照秘钥长度分解明文成若干节,对于每个明文字母用对应秘钥和维基利亚方阵进行替换,具体为字母对应的秘钥为行数,字母本身为列数,在方阵中查找替换字母
2.换位算法:transposition cipher
原理:将明文中的字母位置重新排列
举例:
- 简单替换:将明文倒序输出
- 列换位法:按照秘钥长度分解明文,按照秘钥的字母在字母表中的顺序输出对应列的明文
现代密码体制
C为明文,E为加密函数,EK为加密秘钥
M为密文,D为解密函数,DK为解密秘钥
按照DK与EK的关系,现代密码体制可分为
- 对称密码体制:DK==EK
- 非对称密码体制:DK!=EK
1.对称密码体制
原理:加密与解密用相同秘钥
举例:
- 流加密(stream cipher):RC4算法等
- 原理:对明文与密钥流进行逐比特位(bit)进行加密操作(异或运算)
- 密钥流:基于种子秘钥K,通过密钥流生成函数不断产生Keystream
- 安全性:
- 1.密钥流生成函数需要有伪随机性(长周期不重复和不可推断)
- 2.种子秘钥K不重复使用,仅使用在一个通信会话中
- 3.长周期的种子秘钥更换:显示中真随机源(无周期重复)较难实现,一般采用线性反馈移位寄存器结构,具有很长的周期性即可
- 原理:对明文与密钥流进行逐比特位(bit)进行加密操作(异或运算)
- 块加密(block cipher):DES算法和AES算法
- 原理:将明文编码(如01编码),按照一定长度(m)分组,再将各组明文编码分别在秘钥的控制下加密
- 操作模式:
- 1.ECB(Electronic Codebook,电码本):明文被处理成大小合适的分组之后对每个分组进行独立的加密解密操作
- 2.CBC(Cipher-block chaining,密码分组连接):每个明文块先于前一个密文进行异或后在进行加密,因此每个密文快都依赖于它前面所有的明文块
- 安全性:明文块的长度(m)对安全性十分关键,至少需要64bit,推荐128bit以上,抵挡字典攻击
- DES(Data Encryption Standard,数据加密标准):块长度64位,秘钥长度56位
- AES(Advanced Encryptio Standard,高级数据加密标准):块长度128位,可变秘钥长度128/192/256位
- 原理:将明文编码(如01编码),按照一定长度(m)分组,再将各组明文编码分别在秘钥的控制下加密
- 对称秘钥体制问题:通信双方共享一个用于加密/解密的秘钥K,在规模为n的通信群体中共需要n(n-1)个秘钥,规模庞大时,秘钥管理困难
2.非对称密码体制
原理:加密与解密使用不同秘钥,使用其中一个秘钥(公钥PK)进行加密,可以用对应的另一个秘钥(私钥SK)进行解密
安全性:仅知道公钥难以求得私钥
解决秘钥管理问题:每个实体仅需要保管一个公私秘钥对
举例: RSA算法,安全性依赖于大整数素因子分解难题
对称与非对称体制比较
对称加密:
- 运算效率高,使用方便,加密效率高
- 秘钥需要安全信道传输,若秘钥泄密,损失惨重
非对称加密: - 安全性高
- 运算效率低,通常用于加密对称秘钥
HTTPS加密
HTTPs采用混合的加密机制,使用公开密钥(非对称加密)加密用于传输对称密钥,之后使用对称密钥加密进行通信
PublicKey为非对称加密的公钥,PrivateKey为非对称加密的私钥,用于传输对称加密秘钥SessionKey
这存在一个问题:怎么保证获取到的公钥PublickKey为真正的公钥呢?
答案是证书认证(签名)
数字证书认证机构(CA,Certificate Authority是客户端与服务器双方都可信赖的第三方机构。
服务器的运营人员向CA提出公开密钥的申请,CA在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。
进行HTTPs通信时,服务器会把证书发送给客户端,客户端取得其中的公开密钥之后进行验证其中的数字签名是否为CA,如果验证通过,就可以开始通信。
使用OpenSSL这套开源程序,每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。浏览器在访问该服务器时,会显示“无法确认连接安全性”或“该网站的安全证书存在问题”等警告消息。