详解基于PKI(公钥密码机制)的认证方案

1. 定义

为了能够更有效地运用公钥而制定的一系列规范和规格的总称,这是一种广泛的定义,但是往往在论文中指定一个特定的形式也就是下面所讲的形式,但是这种形式也是一种总称

注意

  1. 下面模型都是基于身份的认证协议的PKI,这是一种特定的PKI模型;但实质上PKI是广义的,只要是为了解决公钥密码体制而建立的一套机制都可以统称为PKI,所以我们目的并不是讲全一个PKI,其旨在于通过其让你明白大致的PKI应该是个什么样的模型。
  2. 用户向认证机构进行注册,认证机构生成公私钥的话,认证机构肯定也会将私钥发送给用户,但是如果是用户自己生成公私钥的话就不用认证机构进行发送;所以当别人申请下载证书的时候,认证机构就会发放对应的公钥。

2. 组成

基于身份的认证协议的PKI
1.用户
2.认证机构
3.仓库
申请注册的用户
申请使用公钥的用户

2.1 用户

使用PKI的人,分类如下:

  1. 注册公钥的用户,他们所做的操作的如下:
    1. 在认证机构注册公钥;
    2. 向认证机构申请证书;
    3. 根据需要申请作废已注册的公钥
    4. 解密接收到的密文;
    5. 对消息进行数字签名
  2. 使用已经注册的公钥的用户,他们所做的操作如下:
    1. 消息加密后发送给接收者;
    2. 验证数字签名;

2.2 认证机构

颁发证书的人,对证书进行管理,进行如下操作:

  1. 生成秘钥对;
  2. 在注册公钥时对本人身份进行认证;
  3. 生成并颁发证书;
  4. 作废证书;

2.2.1 认证机构的工作

  1. 生成秘钥对,有两种方式:
    1. PKI用户自行生成;
    2. 认证机构来生成,这种方式认证机构就需要把私钥发送给用户;
  2. 注册证书:
    1. 如果是PKI用户自行生成秘钥对,那么它在这个阶段就会请求认证机构生成证书
  3. 作废证书以及CRL
    1. 当用户的私钥丢失、被盗的时候,认证机构需要对证书进行作废,注意:此时即使秘钥安全无恙也是需要对证书进行作废,因为存在潜在的威胁,你无法去做出一个肯定的判断;
    2. 需要制作一张证书作废清单CRL,并且对这个清单加上数字签名;
    3. 查询:用户需要从认证机构获取最新的CRL,并查询自己要用于验证签名(或用于加密)的公钥是否作废。

2.3 仓库

保存证书的数据库

  1. 也叫证书目录
用户Bob-公钥注册者
用户ALice-公钥使用者
认证机构发送到仓库
1.发送Bob的公钥
2.发送证书到仓库
3.Alice进行
对证书的下载
认证机构Trent
证书
部分一:
Bob公钥
部分二:
Trent的数字签名
仓库
Bob
ALice

3. 证书——PKI围绕的主体

3.1 证书的层级(组成)

证书的作用:认证机构对用户的公钥进行了数字签名,并生成了证书,验证该数字签名的证书由认证机构进行携带一起进行发放,通过公钥去验证此公钥是否就是认证机构所发公钥,不能让人进行篡改;

那么要做到足够的可信度就需要做到下图所示几点:

1.数字签名,包含:下一个CA使用的公钥
+对公钥进行的数字签名
2.数字签名对应的公钥用以验证是否对应
数字签名+公钥
根CA
下一个子CA
下...个CA

任何机构都可以成为认证机构,只要对公钥进行数字签名就是,所以当你得到一个数字签名的时候,需要做的就是确认对公钥签名的认证机构就是你想要认证的认证机构。

3.2 对证书的攻击:

3.2.1 在公钥注册之前攻击

  1. 秘钥对的生成方法有两种:1.由用户自己生成了秘钥对,然后在去认证机构进行注册;2.通过向认证机构注册,由认证机构进行秘钥对的生成并分发。
  2. 注意到如果由第一种生成方法,期间就会有一个传传送过程,有传送过程就有可能导致对其他人进行替换和篡改,将公钥换成攻击者的最后变成攻击者的公钥+用户的个人信息,这样就会造成其他用户要和该用户进行通信的时候公私钥就会对应不上。

3.2.2 注册相似人名进行攻击

  1. 我们需要理解的是:最后的签名信息以及相关认证机构的信息是给人看的,而不是用机器去验证即使是通过机器验证你也需要去选择对应的身份信息,所以身份是需要我们进行输入或者选择选择的,如果有人特意让两个身份很相似,那么人们在选择的时候就容易选错;
  2. 相似的身份信息示例(主要利用英文字母中大小写来迷惑,其中中文也有类似,比如→中和申):
    1. Bob和BoB
    2. Alice和ALice

3.2.3 窃取认证机构的私钥进行攻击

  1. 如果从技术上窃取认证机构的私钥是很难的,因为认证机构主要做的就是这方面的保护。但是其实就像现实中的黑客去拿到你的信息并不需要很强的技术性,其实他是通过强大的社交网,就像这里它可以通过和认证机构内部人员打通关系或者本身就是内部人员,从而获得认证机构的私钥,这就是我们经常说的——社会学

3.2.4 攻击者伪装成认证机构进行攻击

  1. 前面我们讲到每一个人都可以去成为认证机构,只要是它对公钥进行了数字签名并且能对申请注册的以及申请使用的做出常规的响应;对应到现实中就是运营认证机构不需要做其他多余的事情,只要有运营认证的软件就行
  2. 正因为成为认证机构的要求简单,所以当你收到认证机构的数字签名的时候需要对照是否是对应的认证机构,防止一些人冒充。

3.2.5 钻CRL的空子进行攻击1/2:

主要还是通过CRL列表发布更新的时间差来进行违规操作

这里我们需要理解的是:用户的公钥失效向认证机构申请CRL更新,这个更新需要时间,但是同时查询却有可能在同时发生,于是你查询的可能未必是你想要的结果

1. 第一种钻空子的方法:

  1. 攻击者入侵电脑导致私钥被盗,当你想向认证机构进行CRL有效性的查询的时候,此时可能此时CRL废弃清单并没有发布更新,因为当收到用户说自己公钥失效的时候认证机构需要做相应的处理,并且更新CRL也是需要实践,所以此时查询的可能是之前没有更新的,这就导致转的钱就用来私钥进行签名,这就导致了攻击者可以对其进行盗取
  2. 暂时并没有一个很好的办法去解决,唯一的只是去有效的减少这类事件的发生,其做法如下:
    1. 当公钥失效时尽快通知认证机构;
    2. 尽快发布CRL;
    3. 及时更新CRL;

2. 第二种钻空子的方法:

  1. A开两个账户,另外一个用来实际转钱,让别人转钱给你,但地址却指向另外一个账户,在别人转的时候就会转给另一个账户,然后自己却申请公钥失效,之所以申请公钥失效是为了之后迷惑别人说是自己没收到钱然后别人一看公钥还真失效了,所以为什么转得时候也检查了CRL,为什么那时候就没有失效呢?这是由于CRl更新的时间差;
  2. 这里就是通过时间差这件事掩盖住了别人本身将钱转出去了而且转给了A的口袋中。
    1. 解决方案:将签名时间与作废时间对比。
      1. 按照所说情况:作废时间是在签名之前的
      2. 实际情况:作废时间是在签名之前
    2. 依旧存在的问题:这种情况可能会一段时间才会察觉到

3.3 攻击的示例:

3.3.1 Superfish(相当于从用户那里盗取了公私钥)

联想笔记本用户从去年年中开始在官方论坛上报告他们的电脑预装了广告软件Superfish,Superfish会在用户电脑上安装自签名证书,劫持用户浏览的HTTPS/HTTP网页,劫持搜索结果,在Google搜索页面及其它网站上注入广告。在网络上发布签名可以畅通无阻,使得钓鱼网站就变得不能被识别出来,那么一旦用户亲信就会导致损失惨重。所以这件事告诉我们的结论就是用户去购买的产品知识硬件产品所携带的软件不一定是可信的,平时是需要注意预防这方面的病毒入侵的

3. 通过自己的方法进行认证是否可行以及认证机构可信的理由

通过自己的方法进行认证是否可行:自己开发保密的认证方法是犯了典型的隐秘式安全错误,公开的方法能够通过全世界的安全专家不断地区寻找错误
认证机构之所以可信:另外我们之所以信任某一个认证机构是因为那是基于多个可信的情报源做出的判断

参考文章

1.图解密码技术.第10章.第六节

你可能感兴趣的:(信息安全数学基础,论文精读)