《计算机网络》笔记 - 网络安全

AES BB84 DES DNS IP Kerckhoff PEM RSA Socket TCP 算法 网络 蓝牙 路由 纠错码 置换密码 转置密码

密码学简介

  • 加密:明文经密钥为参数的函数变换,输出密文
  • 密码编码学、密码分析学、密码术
  • Kerckhoff原则:所有算法必须是公开的,只有密钥是保密的
  • 含糊的安全性(security by obscurity):使算法保持秘密
  • 工作因子:密码分析者面对的密钥的复杂性,对于穷举搜索,为密钥长度的指数量级
  • 密码分析问题
  • 只有密文
  • 已知明文(有了一些相匹配的密文和明文)
  • 选择明文(能够加密一些自己选择的明文)

置换密码

  • 保留明文字符顺序,进行明文伪装
  • 凯撒密码(单字母表置换)
  • 字符频率猜测

转置密码

  • 重新排序,不伪装明文
  • 字符频率不变

一次一密

优点,不可能被破解;缺点,密钥数量限制、密钥流失、丢失字符。

  • 量子密码系统:BB84协议
  • 定义
  • 直线基:垂直和水平滤波器
  • 对角基:上述基旋转45度
  • 0与1:每一组基任意分配两个偏振方向为0和1
  • 过程
    1. A与B通信,T在监听
    2. A传送一次性密钥(长度略超过期望长度的2倍)给B,每一位随机选择一个基。
    3. B使用随机的基接收每一位;
    4. B告诉A自己使用的基。
    5. A告诉B哪些是正确的;
    6. A与B使用正确传输的位序作为密钥;
  • 反监听
    1. 监听者的密钥不完整。监听者T,对于B基序列中能正确接收的部分,若T与B恰好使用相同的基,则T可以知道该位的密钥;否则T将丢失该位。可经过秘密放大进一步减少T知道的内容。
    2. 监听检测。T必须将A的内容转发给B,却不能正确告知B的哪些基是正确的;一位密钥错误相当与B眼中的一位传输错误;A与B使用前向纠错码进行纠错,发现错误率大大超过设备的期望;得知T的存在。
  • 本质
    1. 光子遇到与自己偏振方向成45度的滤波器,会随机跳到其中一个且概率相等。
    2. 光子不可复制

基本的密码学原则

  1. 消息必须包含一定的冗余度:区分有效消息、检测信道
  2. 需要采取某种方法对抗重放攻击:新鲜度、时间戳

对称密钥算法

  • 块密码:接受一个n位的明文块作为输入,利用密钥把它变换成n为的密文块
  • P盒:转置操作,混淆
  • S盒:置换操作,扩散
  • 乘积密码:一系列的S盒和P盒叠加起来

DES(data encryption standard,数据加密标准)

  • 明文按64位数据块的单元加密,生成64位密文,接受56位密钥,共19个步骤,16次迭代
  • 三重DES:EDE(K1, K2, K1)模式,兼容了DES算法(只需让K1=K2)

AES(advanced encryption standard,高级加密标准)

  • NIST(national institute of standards and technology,美国标准和技术委员会)在1997年1月发起了密码学竞赛,新标准称为AES,要求
  • 必须是对称的快密码算法
  • 公开所有设计
  • 支持128位、192和256位密钥长度
  • 软件、硬件实现都是可能的
  • 算法必须是公有的
  • Rijndael:与DES相同,仍使用置换和转置,多轮策略(轮数取决于密钥和块长度);另外,所有操作都涉及整个字节

密码算法的使用模式

AES和DES本质上都是置换和转置操作,同样的明文会得到同样的密文

  • ECB模式(electronic code book mode,电子代码薄模式):分割明文,逐块加密。容易被替换某一块。
  • 密码块链接模式:第一个块与随机IV(initialization vector,初始向量)异或,之后的明文块与前一密文块异或后加密,IV一起传输
  • 密码反馈模式:逐字节加密,不必等64位数据块;密文只有一位偶然翻转,会波及到坏字节在寄存器中时的8个字节
  • 流密码模式
  • 过程:用一个密钥加密一个初始向量生成一个输出块,同样的密钥加密这个输出块产生第二个输出块,以此类推;然后将明文与该密钥流异或得到密文
  • 优点:密钥流仅仅依赖于IV和密钥,不会受到传输错误的影响。
  • 缺点:重复使用(密钥,IV)对,会产生同样的密钥流,会导致密文受到密钥流重用攻击(keystream resuse attack)
  • 计数器模式:除密码薄模式以外的模式中,要想随机访问密文是不可能的
  • 过程:初始向量加常数后进行加密,再与明文异或;每个新的数据块使初始向量递增1
  • 优点:文件中任何地方的块都可以直接解密
  • 缺点:重复使用(密钥,IV)对,会导致密文受到密钥流重用攻击

密码分析

  • 差分密码分析(differential cryptanalysis):观察少量位差异的明文产生的密文,有些位模式可能比其他位模式更容易出现,这种现象可以导致概率攻击。可用于攻击任何一种块密码算法。
  • 线性密码分析(linear cryptanalysis):将明文与密文特定位异或,应该一半为0一半为1,而加密过程会引入偏差,这样的偏差总可以降低工作量。只需2^43个已知密文就可以破解DES。
  • 电子功率消耗分析:计算机高电压表示1,低电压表示0,减慢时钟,记录CPU功率
  • 时间分析:if语句的then和else执行时间不同时,减慢时钟可以推断出轮密钥。

公开密钥算法

加密算法E与解密算法D满足:

  • D(E(P)) = P
  • 从E推断出D极其困难
  • 用选择明文攻击不可能破解E

RSA

RSA算法建立在分解大素数的基础上,RSA分别为三位发现者名字的首字母

  • 计算参数
  • 选择两个大素数p、q(典型情况为1024位)
  • 计算n=pq和z=(p-1)(q-1)
  • 选择一个与z互素的数d
  • 找到e使其满足e*d=1%z
  • 加密
  • 公钥对为(e, n)
  • 将明文分块,每个明文P落在0<=P<n中
  • 计算C=P^e(mod n)
  • 解密
  • 私钥对为(d, n)
  • 计算P=C^d(mod n)
  • 使用:所有人公开自己的加密密钥E,B给A发送Ea(P),A获得后进行解密P=DaEa(P)

其他的公开密钥算法

  • 主要有两方面的算法
  • 分解大数的困难度
  • 以大素数为模来计算离散对数的困难度
  • 背包算法:“根据给定的总重量找出可能的物品明细列表”被认为是计算上不可行的。该算法与其加强算法相继被S和R破解。
  • 其他:计算离散对数的困难度、基于圆锥曲线

数字签名

数字签名应满足条件

  • 接收方可以验证发送方所宣称的身份
  • 发送方以后不能否认该消息的内容
  • 接收方不可能编造这样的消息

对称密钥签名

选择一个中心权威机构BB,每个用户选择一个秘密密钥亲手交给BB。A发送A, Ka(B, Ra, t, P)给BB,BB将Kb(A, Ra, t, P, K_BB(A, t, P))给B

公开密钥数字签名

  1. 假设公开密钥算法不仅满足D(E(P))=P,还满足E(D(P))=P
  2. A向B发送 C=Eb(Da(P))
  3. B得到明文 P=Ea(Db(C))

消息摘要

  • 特性
    • 给定P,很容易计算MD(P)
    • 给定MD(P),想得到P是不可能的
    • 给定P的情况下,没有人能得到满足 MD(P’)=MD(P) 的P’
    • 输入明文即使只有1位变化,也会导致不同输出
  • 加密摘要比明文快的多,可以加速数字签名算法
  • MD5
    • 将明文填补到448位
    • 消息后追加其消息长度(64位整数),此时共512位
    • 取出一个512字节的输入块,通过正弦函数与128位的缓冲区混合,每个输入块执行4轮
    • 128位的缓冲区即为最终的消息摘要
  • SHA-1(secure hash algorithm 1):同样按照512字节块处理数据,唯一不同的是生成160位的消息摘要
    • 利用SHA-1和RSA对非保密的消息进行签名:Alice->明文P->SHA-1->P的散列值H->RSA(私钥Da)->签过名的散列值Da(H)->Bob

生日攻击

n个输入和k个可能的输出之间存在某种映射关系,公有n(n-1)/2个可能的输入对,若n(n-1)/2>k,则至少有一个匹配的机会是非常大的

公钥的管理

证书

CA(certification authority,证书权威机构),避免了24小时在线的密钥分发中心

  • 生成证书
  • Alice到CA,出示其公钥和身份,请求证明他的公钥
  • CA给Alice一个证书,其中包括Alice的身份、CA的私钥对身份散列值的签名
  • 证书验证
  • Bob计算Alice身份的散列值,与CA的公钥应用在Alice证书的签名上得到的散列值进行比对,因Trudy无法得知CA的私钥,所以他不能对散列值正确地签名
  • 证书格式标准 X.509:ITU1988年通过,采用OSI ASN.1(abstract syntax notation 1,抽象语法标记1)编码

PKI(public key infrastructure,公开密钥基础设施)

  • 信任链(证书路径):分层的CA,顶级CA负责证明次级CA(又称RA,regional authority,区域权威机构),次级CA负责证明第三级CA,以此类推
  • 信任锚:浏览器预先安装100多个根的公钥
  • 目录(在哪里存放证书):用户自己存放、DNS服务器存放
  • 撤销:CA定期发布CRL(certificate revocation list,证书撤销列表)

通信安全

IPSec

  • RFC 2401、2402和2406,总是要求加密功能,但允许空算法
  • IPSec是一个多服务、多算法和多粒度的框架
  • 两种模式
  • 传输模式:直接插在IP头的后面
  • 隧道模式:整个IP分组封装到一个新的新的IP分组中,新分组具有全新的IP头

防火墙

防火墙包括两部分

  • 分组过滤器(网络层):配置了某些额外功能的标准路由器,负责检查进入和出去的所有分组
  • 应用网关(应用层):根据头、消息长度,甚至内容决定转发或丢弃

DoS(denial of service)攻击:向目标机器发送大量合法的分组,防火墙不能处理;DDoS(distributed denial of service)攻击:大量普通用户的机器被控制而进行DoS攻击

VPN(virtual private network,虚拟私有网络)

建立在公共网络上的层叠网络,可利用IPSec实现隧道,将任意两个办公室的流量聚集到一个支持认证和加密功能的SA上

无线网络安全

  • 802.11安全性:WEP(wired equivalent privacy,相当于有线网络的保密性)为数据链路层安全协议,使用基于RC4的流密码算法
  • 蓝牙安全性:物理层的调频机制提供了一定程度的安全性;设备预先建立好的共享的秘密密钥(passkey,总密钥);蓝牙的加密算法使用叫做E0的流密码,完整性控制使用SAFER+,两者都是对称密钥快密码算法
  • WAP2.0安全性:它是基于IP的,可以使用IPSec;传输层可以使用TLS提供保护。

认证协议

基于共享秘密密钥的认证

  • 质询-回应协议:容易受到反射攻击

建立一个共享密钥:Diffie-Hellman密钥交换协议

  • 基于大素数分解的困难度,容易受到水桶队列攻击(又称中间人攻击)

使用密钥分发中心的认证协议

  • 重放攻击
  • Needham-Schroeder认证协议

使用Kerberos的认证协议

应用在许多实际系统中,如windows2000

使用公开密钥密码学的认证协议

电子邮件安全

PGP(pretty good privacy,相当好的隐私)

  • PGP使用一个称为IDEA(international data encryption algorithm)的块密码算法来加密数据
  • 私钥环:一个或多个本人的公-私钥对
  • 公钥环:与当前用户进行通信的其他用户的公钥

PEM(privacy enhanced mail,增强隐私的邮件)

像PGP一样,每条消息都使用一次性密钥进行加密,密钥(被RSA或三重DES保护)也被包装到消息中

S/MIME(Secure/MIME,安全的MIME)

  • IETF提出

Web 安全

安全的命名机制

  • DNS欺骗
  • 安全的DNS
  • 自证明的名字

SSL(secure sockets layer,安全套接字层)

在两个套接字之间建立安全的连接,位于应用层与传输层之间

  • 客户与服务器之间的参数协商
  • 客户与服务器的双向认证
  • 保密的通信
  • 数据完整性保护

移动代码安全

  • java applet安全:解释器将其封装到沙箱一边限制它的行为
  • Active控件:代码签名,认证码
  • JavaScript:没有正式的安全模型
  • 病毒:具有繁殖能力,不断复制自己

社会问题

###隐私 * clipper chip(剪切芯片) * key escrow(密钥托管) * 电子边境基金会(electronic frontier foundation) * 匿名邮件中继器(anonymous remailer) * 翻译型的邮件中继器(cypherpunk remailer)

言论自由

  • 信息隐藏学(steganography)
  • 数字水印

### 版权

  • 版权(copyright)是对IP(intellectual property,知识产权)的创造者的一种授权
  • 合理使用原则(fair use doctrine)
  • TCPA(trusted computing platform alliance,可信计算平台联盟)
Harttle

致力于简单的、一致的、高效的前端开发

看看这个?