密钥管理与分发
密钥分发管理
传统上,对称加密被用于实现消息的保密性(confidentiality)
面临的攻击:局域网内监听、搭线窃听
传输媒介:线缆(双绞线、同轴电缆、光纤) (电磁波干扰)、微波链路、卫星信道
保密通信两种基本选择:链路加密(link encryption)、端对端加密(end-to-end encryption)
两种方法的共用提供了一个好的模式
主机用端对端加密密钥来加密用户数据;整个分组使用链路加密
分组在网络中传输时,各个节点用链路加密密钥来解密信息头。然后再加密,发送到下一条链路;仅在分组交换节点的存储器内可以看到信息头的明文
WAP Security (Wireless Application Protocol)(无线应用协议)
Crossing the WAP Security Gap (安全鸿沟)
在网关, WTLS(Wireless Transport Layer Security(无线安全传输层)消息被转换为SSL消息,在很短的时间内,消息在网关内是明文,形成安全软肋。
链路加密:一般处于较低层次(OSI的物理层或者链路层)
端到端加密:网络层或传输层、表示层或应用层;两个不同体系结构的网络之间、相同体系结构但相互隔离的网络之间
加密所在逻辑层次越高,需要加密的数据越少且越安全
缺点是随着实体个数上升,会更加复杂且密钥数量更多
对网络层加密,可以使用带有加密函数的前端处理器(FEP),通常是末端系统的网卡,来实现整个网络传输的安全性
对具有类似存储转发功能的电子邮件等应用,获得端对端加密只能在应用层上进行
除链路头外的网络层数据头、TCP头、IP头和数据均被加密,因此到达路由器时就需要暂时解密为明文。在网关中也是如此。
以TCP层加密为例,消息过网关时,TCP连接被终止并开始新连接,用户数据被解密。并在下一次传输前再对用户数据和TCP加密。在网关内部的缓冲区内数据暂时是明文。
传输保密性和流量分析
可从数据传输分析中得到的信息:通信双方的身份、通信双方通信的频率、报文模式、报文长度、报文数量、特定的通信之间交谈所关联的事件
传输保密性的实现(防范手段):
链路加密方式:分组首部加密–但仍可以看到网络中的总通信量;通信量填充(浪费带宽)
端到端加密方式:有很大限制(应用层:攻击者可以判断出通信双方;传输层:攻击者可以得到网络层的地址和传输格式);填充数据单元;发送空白报文(浪费带宽)
对称加密中的密钥分配和管理
密钥分配方式:
1、由A选定密钥,物理地传送给B
2、第三方选定密钥,物理地传送给A和B
3、使用A和B共有的旧密钥加密新密钥后传送给另一方
4、A和B都有到第三方的加密连接,则由第三方用加密连接传送给A和B
其他……
密钥分配问题的规模取决于通信的个数(在网络层或者IP层实现端对端加密:要求每对主机都要有一个密钥,N台主机需要N(N-1)/2个密钥;在应用层实现端对端加密:每对通信用户或进程均需要一对密钥)
密钥分发中心KDC:基于密钥层次体系,至少需要两个密钥层;两个终端系统间通信使用临时密钥(通常指会话密钥);会话密钥用于逻辑连接,连接断开就丢失;主密钥可以通过一些不加密的方式分发,如物理传递
密钥分级:典型的应用中,密钥分为主密钥和会话密钥两级:会话密钥:用于数据加密,临时;主密钥:由KDC和用户共享,长期
同一个本地域中的各个实体要相互通信,由本地KDC负责密钥分发;不同域中的实体要通信,则需一个共享密钥,该共享密钥由两个对应的本地KDC通过全局KDC协商产生。
层次策略使得主密钥分发的开销最小化
会话密钥生命周期:交换越频繁就越安全,网络负担越大;面向连接的协议:每次会话使用一个新会话密钥;无连接协议:最安全的做法是每次使用新的会话密钥
密钥分配协议1
攻击一:不包含对KDC的实体认证
攻击二:中间人攻击
密钥分配协议2
攻击:不包含对消息的实体认证
密钥分配协议3
攻击:AB通信中不包含对A的实体认证
密钥分配协议4
攻击:AB通信中不包含对消息的认证(新鲜性)
最终的密钥分配协议:
原型为Needham-Schroeder协议,是Kerberos的基础
N1,N2:现时数(nonce):是对于一次交互的唯一标志符,可以为:时间戳、计数器、随机数,或以上的组合
分布式密钥控制:
在小的范围,可以假定所有用户之间共享密钥;通过主密钥协商(产生)会话密钥;不需要KDC或其他第三方;密钥数总量为n(n-1)/2;每个节点至多保存n-1个主密钥,可以产生很多会话密钥;由于会话密钥生命周期短,所以不易被攻破
密钥分发
密钥如何管理?
公钥的前提:公开自己的密钥
难点:不能轻易接受其他人的公钥
特点:关键不在于加密,而是认证
已提出的集中公钥分发方法:公开发布、公开可访问目录、公钥授权、公钥证书
途径一:公开发布
无控制的公钥分发
问题:任何人都可伪造公钥发布过程,直到公钥拥有者发现假冒
途径二:公开可访问目录
维护一个动态可访问的公钥目录来获得更大的安全性,由某可信实体或组织负责该目录的维护和分配
缺点:一旦攻击者获得目录管理员私钥,则可伪造任意通信方;攻击者还可能修改目录管理员保存的记录来达到目标
途径三:公钥授权
通过更加严格的控制目录中的公钥分配,可使公钥分配更加安全
问题:只能从管理机构获得公钥。公钥管理员成为瓶颈;容易产生DOS攻击;管理机构如何得到A的公钥?A如何得到管理机构的公钥?且公钥管理员维护的{姓名,公钥}目录也容易被篡改
途径四:公钥证书
由Kohnfelder提出。思想:通信各方使用证书来交换密钥,而不是通过公钥管理员。安全性与从公钥管理员处获得的密钥的可靠性相同。
证书由证书管理员产生,包含公钥和其他信息,发给拥有相应私钥的通信方,通信一方通过传递证书将公钥传给另一方,其他人可以验证证书确实是由证书管理员产生的。
要求:任何通信方都可以读取证书并确定证书拥有者的姓名和公钥;任何通信方可验证证书是真实的;任何通信方可验证证书的时效性;只有证书管理员才能产生和更新证书
效果:类似身份证
问题:A如何得到CA的公钥?密钥丢失后,如何挂失?(证书撤销列表)
利用公钥密码分配会话密钥
简单的秘密分配:A生成公私钥对{PKA,SKA},并将PKA和IDA发送给B;B用A的公钥加密会话密钥KS,返回给A;A放弃{PKA,SKA}, B放弃PKA
插入攻击:
攻击者Malice可以在(1)中用{PKM,IDA}替换{PKA,IDA}
Malice获得Ks后,用对Ks再次加密,转发给A
则A和B均知道Ks,但他们不知道Malice也知道Ks
具有保密性和真实性的密钥分配:
A用B的公钥对自己的身份IDA和临时交互号N1加密发送给B
B发送用A的公钥PKA加密的消息
A用B的公钥对B的挑战N2进行加密,B确认通信伙伴是A
A选择会话密钥,用自己的私钥SKA对Ks进行签名,再用B的公钥加密。确保只有B才能解密Ks,且只有A能发送该消息
B用自己的私钥解密第4步的消息,得到Ks
以固定口令为基础的认证方式存在很多问题:网络数据流窃听;字典攻击;穷举攻击;窥探;社交工程;垃圾搜索;
X.509 认证服务
X.509 是关于证书结构和认证协议的一种重要标准,并被广泛使用。
X.509 是基于公钥密码体制和数字签名的服务。
X.509定义了:用户目录的认证服务框架(可以用于14.3中方案)、基于公钥证书的一个认证协议
X.509的核心是与每个用户相关的公钥证书,这些用户证书由一些可信的签证机构(CA)创建并被CA或用户放入目录服务器中。
常用格式:
版本(Version):区分合法证书的不同版本,默认设置为1。如果存在发行商唯一标识或主体唯一标识,则版本号为2;如果存在一个或多个扩展,则版本号为3。
序列号(Serial number):一个整数,在CA中唯一标识证书。
签名算法标识(Signature algorithm identifier):带参数的、用于给证书签名的算法,由于此信息在证书尾部的域Signature中还会出现,这里很少含该信息。
发行商名字(Issue name): X.509中创建、签名证书的认证中心CA的名字。
有效期(Period of validity):包含两个日期,即证书的生效日期和终止日期。
证书主体名(Subject name): 获得证书的用户名,证明拥有相应私钥的主体是公钥的所有者。
证书主体的公钥信息(Subject’s public-key information):主体的公钥以及将被使用的密钥的算法标识,带有相关的参数。
发行商唯一标识(Issuer unique identifier):由于X.509的名字被许多不同实体引用,因此用可选位串唯一标识认证中心。
证书主体唯一标志(Subject unique identifier):由于X.509的名字被许多不同实体引用,因此用可选位串唯一标识证书主体。
扩展(Extensions): 一个或多个扩展域集,扩展域是在版本3中增加的。
签名(Signature):覆盖证书的所有其他域,以及其他域被CA私钥加密后的hash代码,以及签名算法标识。
该标准使用如下标注定义证书
CA<< A >>= CA{ V,SN,AI,CA,TA,A,AP }
其中:
Y<< X >> =用户X的证书是认证中心Y发放的;Y{I}= Y签名I,包含I和I被加密后的hash代码
CA生成的用户证书具有以下特点:
任何可以访问CA公钥的用户均可获得证书中的用户公钥。
只有CA可以修改证书。
由于证书不可伪造,因此证书可以存放在目录中,而不需要对目录进行特别保护。
获得用户证书:是否属于同一个CA
如果所有用户都属于同一个CA:
说明对该CA有普遍信任,所有用户的证书均可存放于同一个目录中,以被所有用户存取。另外,用户也可以直接将其证书传给其他用户。一旦B拥有了A 的证书,B即可确信用A的公钥加密的消息是安全的,不可能被窃取;同时,用A的私钥签名的消息也不可能仿造。
如果用户数量很多,不可能期望所有用户从同一个CA获得证书。由于证书是CA签发的,每一个用户都需要拥有一份CA的公钥来验证签名,该公钥必须用一种绝对安全的方式提供给每个用户,使得用户可以信任该证书。因此,拥有许多CA,并要求每个CA按一种安全的方式给其用户群提供该CA的公钥。
对于不同CA
假设A获得了CA_X1的证书;B获得了CA_X2的证书
此时,如果A无法安全地获得X2的公钥,则由X2发放的B的证书对A而言就无法使用,A只能读取但无法验证其签名。
然而,如果两个CA之间能安全地交换它们的公钥,则使A获得B的公钥过程:
A 从目录中获得由X1签名的X2的证书,由于A知道X1的公钥,A可以从证书中获得X2的公钥,并用X1的签名来验证证书。
A再到目录中获取由X2颁发的B的证书,由于A已经得到了X2的公钥,A即可利用它验证签名,安全地获得B的公钥。
A 使用了一个证书链来获得B的公钥,在X.509中,该链标识如下: X 1 < < X 2 > > X 2 < < B > > X_1<< X_2 >>X_2<< B >> X1<<X2>>X2<<B>>
同样,B可以逆向链获得 A 的公钥: X 2 < < X 1 > > X 1 < < A > > X_2<<X_1>>X_1<<A>> X2<<X1>>X1<<A>>
这个模式可以推广:
对经过长度为N的CA链的认证过程可表示如下: X 1 < < X 2 > > X 2 < < X 3 > > … X N < < B > > X_1<< X_2 >>X_2<< X_3>>…X_N<< B >> X1<<X2>>X2<<X3>>…XN<<B>>
在这种情况中,链中的每对 C A ( X i , X i + 1 ) CA(X_i,X_{i+1}) CA(Xi,Xi+1)必须互相发放证书。
X.509推荐的层次结构
前向证书:由其他CA发给X的证书。
后向证书:X发给其他CA的证书。
例如:
用户A可以通过创建一条到B的路径获得相关证书:X<< W >>W<< V >>V<< Y >>Y<< Z >>Z<< B >>
当A获得相关证书后,可以通过顺序展开证书路径获得B的公钥,用这个公钥,A可将加密消息送往B,如果A想得到B返回的加密消息或对发往B的消息签名,则B需要按照下述证书路径获得A的公钥:Z<< Y >>Y<< V >>V<< W >>W<< X >>X<< A >>
B可以获得目录中的证书集,或A可在它发给B的初始消息中将其包含进去。
撤销证书
有效期:在旧证书失效前发放新证书
其它原因可能导致提前撤销证书:用户密钥(私钥)被认为不安全、用户不再信任该CA、CA证书被认为不安全
每个CA必须保留一张表,其中包含所有被CA撤销且还未到期的证书,包括发给用户和其他CA的证书,这张表也应被放在目录中。
(目录是指管理用户信息数据库的服务器,用户信息包括用户名到网络地址的映射和用户的其他属性等)
每个放在目录中的证书撤销表(CRL)均被其发行商签名,并包含发行商的名字、表创建的时间、下一张CRL表发放的时间以及每个撤销证书的入口。每个入口中包含该证书的序列号和撤销时间。由于一个CA中的序列号是唯一的,因此序列号足以表示一张证书。
当一个用户在一个消息中接收了一个证书,该用户必须确定该证书是否已被撤销。用户可以在接到证书时检查目录,为了避免目录搜索时的延迟,用户可以将证书和CRL缓存。
X.509 包含三种可选的认证过程:单向认证、双向认证、三向认证
这三种方法均采用了公钥签名。假设双方知道对方的公钥,可以通过目录服务获得证书或证书由初始消息携带。
X.509 版本 3的格式增加了一些可选的扩展项。 每一个扩展项有:一个扩展标识、一个危险指示(用于指出该扩展项是否能安全地被忽略,如果为TRUE且实现时未处理它,则其证书将会被当作非法的证书。)、一个扩展值
三类证书扩展项:密钥和策略信息、证书主体和发行商属性、证书路径约束
PKI公钥基础设施
RFC 4949(互联网安全术语)定义了PKI系统是由硬件、软件、人、策略和程序构成的一整套体系。这些程序是用来创建、管理、存储、分发和撤销建立在非对称密码算法之上的数字证书。
创建PKI的主要目的就是用来安全、便捷、高效地获得公钥。
PKIX模型:在X.509基础上建立的一个可以用来构建网络认证体系的基本模型
元素:端实体
、签证机构CA
、注册机构RA
、证书撤销列表发布点
、证书存取库
PKIX管理任务:用户注册、初始化、认证书、密钥对的回复、密钥对更新、证书撤销请求、交叉认证
用户认证
用户认证:核实身份的方法是由或者对一个系统实体提出的
用户认证是最基本也是最重要的一道防线,用户认证是访问控制以及用户承担责任的基础
认证方法包含两步:鉴定阶段、核实阶段
票据是一种将身份和附加属性与用户权标可信地绑定得到的数据结构,并在认证过程中可以被验证方所验证。
权标可以能够唯一标识用户的密钥或者加密口令
认证一个用户的身份的四个常用工具:
知道什么:如口令、PIN或者之前准备的问题答案
拥有什么:如加密密钥、电子密钥卡、智能卡和物理密钥,这种类型的认证信息为:令牌
静态生物特征:如指纹、视网膜和脸
动态生物特征:如声音模式、手写特征和打字节奏
双向认证
能够使通信双方互相认证彼此身份并交换会话密钥;
已认证的密钥交换要注意保密性和时效性;
防止重放攻击
方法是为每一个用于认证交互的消息附上一个序列号,但是由于开销问题,序列号基本不会用于认证和密钥交换,反而是时间戳和挑战/应答两种方法更常用。
注意时间戳方法不能用于面向链接的应用,挑战/应答方法不适用于无连接类型的应用。
认证的作用
通常是,接收者需要确保消息确实来自所谓的发送者。
在分布式环境中,一个两层的对称加密密钥可用于为通信提供保密性,该方案需要可信的密钥分发中心(KDC)参与,每一方和KDC之间都共享一个密钥(称为主密钥)。KDC负责产生两者之间的会话密钥,并使用主密钥来保证会话密钥分发的安全。
使用时间戳来防止重放攻击
而存在另一种情况:
时钟或者同步机制的破坏或者错误都可能导致分布的时钟不同步,可能会造成攻击者截获消息后重放时的时间戳刚好满足接收者的时间,这种攻击称为抑制重放攻击(Suppress Replay Attack)
Kerberos
Kerberos认证身份不依赖主机操作系统的认证、不信任主机地址、不要求网络中的主机保持物理上的安全。
在整个网络中,除了Kerberos服务器外,其他都是危险区域,任何人都可以在网络上读取、修改、插入数据。
Kerberos把身份认证的任务集中在身份认证服务器上
Kerberos的认证服务任务被分配到两个相对独立的服务器:认证服务器AS(Authenticator Server)和票据许可服务器TGS(Ticket Granting Server)
它们同时连接并维护一个中央数据库存放用户口令、标识等重要信息。
整个Kerberos系统由四部分组成:AS,TGS,Client,Server。
Kerberos 环境包括Kerberos服务器、若干客户端和若干应用服务器:
Kerberos服务器必须有存放用户标识(UID)和用户口令的数据库。所有用户必须在Kerberos服务器注册。
Kerberos服务器必须与每个应用服务器共享一个特定的密钥,所用应用服务器必须在Kerberos服务器注册。
这种环境称为一个域。为了支持域间认证,又引入:
每个互操作域的Kerberos服务器应共享一个密钥,双方的Kerberos服务器应互相注册。
要求一个域的Kerberos服务器必须信任其他域的Kerberos服务器对其用户的认证。另外,其他域的应用服务器也必须信任第一域中的Kerberos服务器。
版本4–>版本5变更
首先从两个方面阐述了版本4的局限性:环境缺陷、技术不足
环境缺陷方面:
加密系统依赖性:使用 DES–>使用加密类型标记密文
Internet协议依赖性:只能用 IP 地址–>用类型和长度标记网络地址,允许使用任何类型的网络地址
消息字节顺序:发送者决定–>按照抽象语法表示(ASN.1)和基本编码规则(BER)规定
票据的生命周期: 最大 28×5=1280分钟–>票据中包含精确的起止时间,允许任意长度的生命周期
向前认证:发给客户端的证书不能转发–>提供这项功能
域间认证: O(N2)个Kerberos-to-Kerberos关系–>支持一种需要较少连接的方法
技术不足方面:
两次加密:提供给客户端的票据需要经过两次加密,而第二次不是必须的–>减少一次加密
PCBC加密:使用 DES 的非标准模式PCBC加密,易受交换密码块攻击–>提供精确的完整性检查机制,并用标准的CBC模式加密
会话密钥:同一会话密钥被多次使用–>客户端与服务器可以协商得到子会话密钥,保证每个密钥仅被使用一次
口令攻击:这两个版本均易受到口令攻击,但对版本5的攻击相对更难实现
攻击者可以通过尝试各种口令,来试图获得正确的客户端口令