完整文章列表:
iOS的签名与证书机制(一):加密解密
iOS的签名与证书机制(二):单向散列函数
iOS的签名与证书机制(三):数字签名与证书
iOS的签名与证书机制(四):iOS的签名
在开始学习数字签名之前,我们来看一个例子:
四娃看了后还没面子,于是质问大娃:"你为什么发群里?"
大娃:"我不知道呀,不是我发的!"
四娃空口无凭,怎么才能确定大娃发的这条消息是被中间拦截后修改的呢?还是这条消息就是大娃发的呢?
四娃看了我的文章,灵机一动,有了,用数字签名来解决!
在数字签名中也有公钥与私钥的概念,大家还记得我们在第一章讲解公钥密码的时候,也使用到了公钥与私钥;
公钥密码是为了保证信息的安全性,消息发送者使用消息接收者的公钥加密信息,消息接收者使用自己的私钥解密信息;
数字签名是为了能够识别信息有没有被篡改,不是为了保证消息的安全,使用消息发送者的私钥进行签名,消息接收者使用消息发送者的公钥验证签名;
别慌,慢慢向下看.
不论对于公钥密码与数字签名,公钥是任何人都可以持有的,但是私钥只能自己持有;
我们来看看数字签名的一般流程:
从图中的流程可以了解:
- Alice用自己的私钥(签名密钥)对信息进行加密生成签名
- Alice发给Bob的信息有两部分:消息 + 签名
- Bob用Alice的公钥验证签名,然后与消息对比,如果一致,那么可以确认两件事情:这条消息就是Alice发的,这条消息没有被篡改过;
这就是数字签名的基本流程,但是还有些漏洞:
- 发送的内容因为有两部分:消息 + 签名,签名是对原有消息直接加密,这样的话,发送的内容很大.怎么办呢?这就用到我们上一章学到的单向散列函数,我们可以对消息的散列值进行签名,这样发送的内容就可以大大减少.消息接收者在接收到内容后,只需要比较解密后的散列值与消息的散列值即可;
- 要保证解密使用的公钥的确是Alice的,则需要使用证书,防止中间人攻击,这部分内容我们下面再说;
那么改进后的流程如下:
四娃学习到这里,底气十足,这次大娃再也不能耍赖了!
我敲了敲四娃的头:"小子,葫芦报仇,10年不晚!",因为虽然改进流程解决了发送内容尺寸的问题,但是,第二个漏洞,中间人攻击的问题还是没有解决,我们先来看看什么是中间人攻击;
在发送公钥的过程中,如果被人监听,那么就会出现下面的问题:
你看,这个中间人是不是很厉害?你以为跟你聊天的是美如花的小芳,却不知是抠脚的大壮;
那我怎么才能知道跟我聊天的是不是小芳的呢?这时候我们可以找德高望重的村长作证:"狗蛋啊,跟你聊天的确是小芳!"而CA(Certificate Authority),就是这样的存在;
CA是为了证明"公钥的确属于此人"的权威机构,怎么证明?通过它们发布的证书.
这个证书的全称为公钥证书(Public-key Certificate,PKC),既然是为了证明公钥属于某人,那么里面肯定包括了此人的公钥,以及此人的姓名,邮箱,公司地址等信息,然后CA通过The Public-Key Cryptography Standards (PKCS)协议对这些内容进行数字签名(对内容的散列值加密),生成的内容就是证书;
目前的CA机构有国际性的组织,通过认证服务盈利的企业,甚至个人也能设置认证机构;
到这里,我们明确了证书的作用就是检验公钥的合法性,这样消息发送者与消息接收者之间不直接发送公钥,而是通过CA机构验证,可以避免中间人的攻击:
通过CA机构的证书,数字签名就可以安全的使用了,迫不及待的四娃终于找到了背后凶手,原来是隐身的6娃!!
有了这些知识,最终章我们要开始讲解iOS的签名与证书机制;