计算机网络•自顶向下方法:网络安全、RSA算法
网络安全
网络安全的通用定义:
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠地运行,网络服务不中断。
网络中的通信安全
机密性:
-
报文内容的机密性:仅发送方和希望的接收方能够理解报文的内容
-
通信活动的机密性:通信活动或其特征不被外界察觉
端点鉴别:
- 发送方和接收方都能够证实通信过程中涉及的另一方
报文完整性:
- 报文来自真实的来源,且传输过程中未被修改
运行安全性:
- 网络系统正常运行,网络服务可用
安全攻击的类型:被动攻击
试图从系统中获取信息,但不对系统产生影响
两种类型:
-
偷听:监听并记录网络中传输的内容
-
流量分析:从通信频度、报文长度等流量模式推断通信的性质
安全攻击的类型:主动攻击
试图改变系统资源或影响系统的操作
四种类型:
- 伪装:一个实体假冒另一个实体
- 重放:从网络中被动地获取一个数据单元,经过一段时间后重新发送到网络中
- 报文修改:修改、插入、删除报文或报文部分内容
- 拒绝服务:阻止通信设施的正常使用或管理
常见的安全机制
- 加密:使用数学算法对数据进行变换,使其不易理解
- 鉴别:通过报文交换证实一个实体的身份,以防假冒
- 报文完整性:验证一个报文是否可信,包括来源和内容
- 数字签名:附加在一个数据单元后面的数据,用来证明数据单元的来源及完整性,以防伪造及抵赖
- 流量填充:在数据流间隙中插入比特,以挫败流量分析的企图
- 访问控制:通过授权机制限制用户对资源的访问,防止越权行为
密码学
密码学术语
- 明文(plaintext):欲加密的原始数据
- 密文(ciphertext):明文经加密算法作用后的输出
- 密钥(key):加密和解密时使用的参数
- 密码分析(cryptanalysis):破译密文
- 密码学(cryptology):设计密码和破译密码的技术统称为密码学
加密算法的分类
按照加密密钥与解密密钥是否相同,加密算法分为:
-
对称加密算法:加密密钥与解密密钥相同
-
非对称加密算法:加密密钥与解密密钥不同
按照明文被处理的方式,加密算法分为:
-
块密码(分组密码) :每次处理一个明文块,生成一个密文块
-
流密码:处理连续输入的明文流,并生成连续输出的密文流
传统加密方法:替换
替换密码:
- 用密文字母替换明文字母,但字母位置不变
- 例子:凯撒密码,单字母表替换,多字母表替换
传统加密方法:换位
换位密码:
- 保留明文字母不变,但改变字母的位置
- 例子:列换位密码
密码的安全性
传统加密方法的安全性建立在算法保密的基础上
现代加密方法也使用替换和换位两种基本手段,但现代密码学的基本原则是:加密与解密的算法是公开的,只有密钥是需要隐藏的
一个加密算法被称为是计算安全的,如果由该算法产生的密文满足以下两个条件之一:
- 破译密文的代价超过信息本身的价值
- 破译密文所需的时间超过信息的有效生命期
现代密码学中,密码的安全性是通过算法的复杂性和密钥的长度来保证的
现代密码学:非对称加密
非对称加密算法:
发送者和接收者不共享密钥
-
发送者使用加密密钥
-
接收者使用解密密钥
不存在密钥传递问题:
-
加密密钥是公开的
-
解密密钥是私有的
公开密钥算法的使用
每个用户生成一对加密密钥和解密密钥:
- 加密密钥放在一个公开的文件中,解密密钥妥善保管
当Alice希望向Bob发送一个加密信息时:
-
Alice从公开的文件中查到Bob的加密密钥,用Bob的加密密钥加密信息,发送给Bob
-
Bob用自己的解密密钥解密信息
公开密钥和私有密钥:
-
公开密钥:加密密钥,由发送者使用
-
私有密钥:解密密钥,由接收者使用
公开密钥算法应满足的条件
- 生成一对加密密钥和解密密钥是容易的
- 已知加密密钥,从明文计算出密文是容易的
- 已知解密密钥,从密文计算出明文是容易的
- 从加密密钥推出解密密钥是不可能的
- 从加密密钥和密文计算出原始明文是不可能的
RSA算法
RSA算法的加密和解密过程依赖于 公钥 和 私钥 的配对。加密和解密的密钥不是同一个,公钥用于加密数据,私钥用于解密数据。RSA的安全性基于大整数分解问题:即将一个大数分解成其质因数是非常困难的。
RSA算法步骤
1. 密钥生成
- 选择两个大素数p和q(典型值为大于 1 0 100 10^{100} 10100)
- 计算 n = p × q n=p\times q n=p×q和 z = ( p − 1 ) × ( q − 1 ) z=(p-1)\times (q-1) z=(p−1)×(q−1)
- 选择一个与 z 互质的数,令其为 d
- 找到一个 e 使满足 e × d = 1 ( m o d z ) e\times d=1 (mod z) e×d=1(modz)
- 公开密钥为 ( e , n ) (e, n) (e,n),私有密钥为 ( d , n ) (d, n) (d,n)
2. 加密过程
使用公钥 ( e , n ) (e, n) (e,n) 对明文 M M M 进行加密:
-
将明文消息 M M M 转换为整数 m m m ,使得$ ( 0 \leq m < n )$。
-
使用公钥加密公式:
c = m e m o d n c = m^e \mod n c=memodn- c c c是密文。
3. 解密过程
使用私钥 ( d , n ) (d, n) (d,n)对密文 c c c进行解密:
-
使用私钥解密公式:
m = c d m o d n m = c^d \mod n m=cdmodn- m m m是解密后的明文整数。
-
将解密后的整数 m m m转换回明文消息 M M M