第八章
安全通信需要具备机密性、报文完整性、端点鉴别、运行安全性
密码学的原则
这一部分解决了机密性的问题。
在对称密钥系统中,alice和bob的密钥相同且秘密;在公开密钥系统中,一个密钥全世界都知道,另一个密钥只有alice或bob知道(而不是两个都知道)
对称密钥密码体制
对于凯撒密码或者单码代替密码,攻击手段:
- 唯密文攻击
- 已知明文攻击:攻击者知道(明文,密文)的一些匹配的时候
- 选择明文攻击:如果攻击者能让alice发送The quick brown fox jump over the lazy dog,那么加密方案就能完全破译。
多码代替密码:顾名思义,就是用多个单码代替密码,换着来。
块密码
要加密的报文处理为$k$比特的块,每块独立加密。
这是一个块密码的例子,密钥是8张排列表。
怎样使相同的明文的密文不同?可以引入随机性。通常使用密码块连接CBC的计数,具体思想是仅第一个报文发送一个随机值,然后让发送方和接收方用计算的编码块代替后续的随机数。
公开密钥加密
bob有全世界都知道的公钥和只有他自己知道的私钥。alice想跟bob取得联系,就先获得bob的全世界都知道的公钥然后用全世界都知道的加密算法加密发给bob,bob用全世界都知道的解密算法和只有他自己知道的私钥解密。
但是这样也许会出现选择明文攻击,攻击者对所有怀疑可能被发送的报文编码。还有此时无法验证发送者的身份。
RSA
RSA几乎成了公开密钥加密的代名词。
生成公钥私钥的步骤:
- 选择两个大素数$p$和$q$
- 计算$n=pq$和$z=(p-1)(q-1)$
- 选择小于$n$且和$z$互质的$e$
- 求一个$d$使得$ed\bmod z=1$
- 公钥是$(n,e)$,私钥是$(n,d)$
明文$m$的加密值:$c=m^e\bmod n$
密文$c$的解密:$m=c^d\bmod n$
在应用中,rsa比较慢,通常和对称密钥密码结合做。比如alice设置一个会话密钥,用rsa这一套传给b,然后用会话密钥进行加密数据传输
RSA的工作原理
加密解密的结果是$(m^e\bmod n)^d \bmod n$也就是$m^{ed}\bmod n$,考虑欧拉降幂,$z=\varphi(n)=(p-1)(q-1)$,于是$m^{ed}\bmod n=m^{ed\bmod z}\bmod n=m\bmod n$。
你甚至可以发现先解密后加密结果一样。这个按上面的自己推一遍就好了。
rsa的安全性基于大数因式分解是困难的。
报文完整性和数字签名
这一部分解决报文完整性的问题。
密码散列函数
散列函数以$m$为输入,计算得到一个称为散列的固定长度字符串。
因特网检验和和CRC都是。因特网检验和显然是一个劣质的。
它还要求对于$x\not=y$,$H(x)\not=H(y)$。
广泛使用的MD5得到128比特的散列,SHA-1生成一个160比特的报文摘要。
为了报文完整性,alice和bob还要共享秘密$s$,鉴别密钥。
alice计算散列$H(m+s)$,它被称为报文鉴别码MAC,生成扩展报文$(m, H(m+s))$发给bob。bob得到扩展报文$(m, h)$,因为知道$s$,所以计算出$H(m+s)$,如果等于$h$,那么一切正常。
数字签名
这个签名应该是可以鉴别的,不可伪造的。bob为了签署一个文档,显然需要将一些独特的信息附加上来。
所以bob直接用私钥加密(回想rsa的工作原理这一部分,先解密后加密结果一样),这样如果用全世界都知道的bob的公钥解开了这个密文,那么就能知道这个是bob签署的了。
不过因为加密解密代价昂贵,没有必要完全签名数据。对报文的散列签名就可以了。
显然数字签名比MAC更高级。
公钥认证
将公钥和特定实体绑定由认证中心CA完成。
端点鉴别
这一部分解决端点鉴别的问题。
研究一个自己的鉴别协议:AP
ap1.0:我宣布我是alice,我就是alice。
ap2.0:alice有一个总是用于通信的周知网络地址(比如ip地址),bob可以检查报文的ip数据报源地址和alice的周知ip地址是否匹配。
ap3.0:使用秘密口令。嗅探数据分组存下来就破了。
ap3.1:用加密口令。回放攻击就破了。
ap4.0:使用不重数nonce。一个协议的生存周期中只使用一次的数。
- alice发送“我是alice”
- bob发送不重数$R$给alice
- alice使用和bob共享的对称秘密密钥加密不重数,发给bob
- bob解密收到的。如果等于,就鉴别了alice的身份。
安全电子邮件
我们需要什么?第一机密性,第二发送方鉴别,第三报文完整性,第四接收方鉴别。
机密性最直接的方式是对称密钥,然后是公开密钥密码。为了克服效率问题我们使用会话密钥。这个前面说过了。
要结合机密性、发送方鉴别和报文完整性的话,就把上面这套和数字签名和报文摘要加上。安全地分发公钥可以使用CA。
使TCP连接安全:SSL
安全套接字层ssl,ssl版本3的稍加修改版本是运输层安全性tls。
宏观描述
握手:
bob要和alice创建一条tcp连接,验证alice是真的alice,发给alice主密钥,用这个主密钥生成ssl会话所需的所有对称密钥。
密钥导出:
两边都根据主密钥生成四个密钥:
- $E_B$,从bob到alice的会话加密密钥
- $M_B$,从bob到alice的会话MAC密钥
- $E_A$,从alice到bob的会话加密密钥
- $M_A$,从alice到bob的会话MAC密钥
数据传输:
ssl将数据流分割成记录,每个记录附加一个mac用于完整性检查,然后加密记录+mac。为了产生这个mac,bob将数据连同密钥$M_B$放入一个散列函数中。为了加密记录+mac这个包,bob使用会话加密密钥$E_B$。
序号可以防止重放攻击。
更完整的描述
其实,真正的握手是:
- 客户发送支持的算法密码的列表和一个不重数。
- 服务器选择对称算法、公钥算法和mac算法,连同证书和服务器不重数返回
- 客户加密地发送前主密钥给服务端
- 客户和服务器独立从前主密钥和不重数中计算出主密钥,划分出四个密钥。
- 客户发送所有握手报文的mac
- 服务器发送所有握手报文的mac
在ssl中,不重数用来防御连接重放,序号用于防御在会话中重放个别分组。
网络层安全性:IPsec和虚拟专用网
这个看不懂
使无线lan安全
WEP协议
- 无线主机请求鉴别
- 接入点以不重数响应请求
- 无线主机用和接入点共享的密钥加密不重数
- 接入点解密加密的不重数
802.11i协议更加安全,主要是靠鉴别服务器。
运行安全性:防火墙和入侵检测系统
防火墙的目标:
- 从外部到内部or内部到外部所有流量都经过防火墙
- 仅被授权的流量允许通过
- 防火墙自身免于渗透
防火墙也分为三类:
传统的分组过滤器:
例如,防止网络被跟踪路由,可以丢弃所有出ICMP TTL过期流量。
状态分组过滤器:
这个在访问控制列表中包括了一个新栏“核对连接”。
应用程序网关
入侵检测系统
为了检测多种攻击类型,我们需要执行深度分组检查。常用入侵检测系统ids。
一个机构可能有多个ids传感器,划分为高度安全区域和低度安全区域,前者有分组过滤器、应用程序网关和ids系统,后者没有应用程序网关。
ids系统大致分为基于特征的系统和基于异常的系统。