需要掌握预备知识的原因
这篇文章目的是总结ios 中"证书" 的作用,预备知识如下:
- 单向散列函数
- 公钥加密
- 中间人攻击
- 数字签名
- 证书
上述5个知识点按顺序都明白以后,就知道为什么要使用证书了 下面举例中: 发送者 张三 接受者 李四 中间人攻击 老黑
单向散列函数
把一堆数据,经过一定运算变成:固定长度,唯一性,不可逆的数据. 固定长度: 比如一个文件有1000多个字节,或者有100M字节.但是通过单向散列函数运算的结果都是固定长度的. 唯一性:同样长度比如123,和124,长度都是3,但是生成的散列值却不一样,例如下面用md5运算得到的散列值 123 的32位md5值是202cb962ac59075b964b07152d234b70 124 的32位md5值是c8ffe9a587b126f152ed3d89a146b445 不可逆:指的是通过结果不能推导出明文,虽然md5现在已经可以逆向推导出简单的了.但是复杂的长一点的明文,就很难解密出明文.比如一个1000字节的明文,用md5加密后,就没法解密出明文.因为明文长度比md5值还长.
公钥加密(非对称密钥加密)
公钥加密特点:2个秘钥,一个公钥一个私钥,公钥加密后的密文,可以用私钥解密. 同事私钥也可以加密,用私钥加密后的密文,可以用公钥解密.2个秘钥都可以加密和解密. 公钥加密的作用是,把明文,比如1000个字节的字符串,用公钥加密以后,得到的密文,不能再用公钥解密,解密必须要用私钥,公钥和私钥不一样. 例如公钥加密的RSA算法 举RSA算法的例子: 比如公钥是:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtquqAm04xYs8JKm36HIa
R0ybqdd2xptCwO+ggs5Q8m0QruD6829JkhIeINEnmWPM/aMTkhZ19I1bIj/6Kv1H
LPVHVkEWfEiwCnU+EaB91zL/BhXxJLCkA8u4nsCFH0jtcAd2NT1kCixEWr0lWPvE
1JYOadpN1hcSm/XvhEXXOqdQ+VnNNm57yJXzsGKZ8zVUH6bLJBITIZafka6oVgaB
GR5p1oZHnvFgzCM2lmNme3y/ae/A5GsP0mp1ycj7h/KJfYfXQaJeRAn7+9BmG6kS
GHYb9MV3Z9z5qtWfj+8EPLf9+IekrW4zFmLLCJ6rgMPRDMb0BDzmdLXPB3KNa3QX
swIDAQAB
-----END PUBLIC KEY-----
私钥是:
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC2q6oCbTjFizwk
qbfochpHTJup13bGm0LA76CCzlDybRCu4Przb0mSEh4g0SeZY8z9oxOSFnX0jVsi
P/oq/Ucs9UdWQRZ8SLAKdT4RoH3XMv8GFfEksKQDy7iewIUfSO1wB3Y1PWQKLERa
vSVY+8TUlg5p2k3WFxKb9e+ERdc6p1D5Wc02bnvIlfOwYpnzNVQfpsskEhMhlp+R
rqhWBoEZHmnWhkee8WDMIzaWY2Z7fL9p78Dkaw/SanXJyPuH8ol9h9dBol5ECfv7
0GYbqRIYdhv0xXdn3Pmq1Z+P7wQ8t/34h6StbjMWYssInquAw9EMxvQEPOZ0tc8H
co1rdBezAgMBAAECggEAb+JzLitR44UloFsnnsMMn3Enwv6K7Ji6aUwcZyIRaHsv
Bb4dVy9pw4M/WuBgvc3oB85ztT32n4RZNoAzLVOW3c2aFRWmvRcUZENtcgR4L3A3
zbVwzwU2YHDOMsY+g2v6qmyXlYJ1nNmCQIWrs3X6GC+UwncIx8G4DziyrLTOYEiE
DwLyODHIq0xeHk8VPASjONoGyHG9snocekqVp9WUr8SIBSy0lqdcf1oNawk7YpPr
zWIb0/GcskyZiAdlnwV5MRlzlHiMrnaS8pZHacwt/qXBfE4MXMQ6sP0P4OQnx7OC
7Qyowz1RnUNUBf4eJuXghiU3arVmKIxRTAKSve1eiQKBgQDdmAocP/eQe9+PtJAJ
a007sBw5Q+bKQLcCWUYzHS7jtTJyZ+ipfIrISV5thNHvt0Isht72+XJGkDWiYFxJ
p+u4WkJyTsA0K1+IW1XBvSQApBdRXx7rYfb+MILiGiA4yO86VbzoFFnwq+J1+lwe
PCa7d76JuCPND1saYgduOLovnwKBgQDTCH3WZ35HmDc2uxontzjlp5+kuyGo/HoD
oMNTO8skuBP+QgacwSm9kOd2IoJXE+080GSMu0pqEX4zRK8k+VG7eD20gJ98i3qK
hwtIwXNSJJHppio5yT6QKxWHjSL0XxF1IaZaqllUMv+EbQXK0uByhYfhDbOaEa9C
gW/zg+yPbQKBgDT/OdvLyK+7kJpT+ublzNDrq7RecwIIPDzJkSqEXkSDf48xHsn6
SU7hjT3wOC12zNLNZuH2gsgxkUJGfYv4Jz4uCBpCj2Fqxixce8QcMlIc7J6/eyuc
gHAGtibRTMeH9v8ipk1zIJeY5E6HFCT/CdxoJR/W9GkEtSs4KsLHum/NAoGAZd+C
h778KemkNcqKrMN5Nvv9SBOCA0amTBwOTp7dyQMHu8T51jA1SyqpYdD05L5c1u+u
qnU7TgrVxkAQ4KNuvjYka39v/jqC1F6uptekKPI4cfdiCPVKO2RhB0etqRQ/pDCz
Uq9LYicgTDgpBKlZ6k7lslHf8q840L0VYxO7Xd0CgYEAwLWgwxla98zp7ozMOrQx
iqWlZFYHLJT57ApjcmwfZY6xqa3pK1O4Cw0WJJR1gbD3bnhlfoftpG8y4UvD9o8g
bgXOoqVCNMVmzEX+8FOAOPA+PrBO4IltKlsSTnQUtJxCkRVQ02khghkzbOSRTJ70
M3IaiaZqf5WiiQy1jQKHpYM=
-----END PRIVATE KEY-----
使用上述公钥加密字符串:123456 得到的密文是:
SYLkGqLkpXheazaKZFzQ8BUFI04Dj2oVROyDIdHcXPLgQJU38vtqPH90svxVoxqojKJBmltl9d8VKWVp8qyyg+2yqyIfhuF0gXXnvHSNtWhKOxbXmvyknN0avPi55dKH5Mp9Kq8xCFk1rsnEChPkUEf7loSvSkIA9LAQ9yPvsIigOMopEDtR1RM9ETaYv0AcsPfMBI2HyiMasCLWMag2vGKHGflShugtHSosQ64qgzUrTT1AOFrK5R+5/7bd5g6SjYCb3b87BTQJrkPHFS9Rc8Y2OjynrhGPWRhIro+PxROY0naYWbLhiCLJDeVPNUy/HL6+/fiFCJO5173JD4Jm9A==
使用私钥解密上面的密文得到结果是:
123456
公钥加密的好处:例如发送人张三要发送文件明文是123456给李四 他要做的是,提前把公钥给李四,然后用自己的私钥把明文加密成密文,然后把密文发送给李四.李四用张三的公钥解密密文,得到明文123456.
如果使用对称加密的缺点:
- 如果是用对称加密的话,张三给李四密文的时候还要给他密钥,但是对称加密的密钥可以加密文件,这样.李四就可以伪造张三来加密文件,然后发送给其他人,这样张三就被李四冒充了.
- 如果张三把用对称加密的密文和秘钥都发送给李四的时候,遭到中间人攻击,中间人劫持了文件,就可以用密钥解密密文,得到明文.而且,还能用密钥加密自己写的假的内容,例如用密钥加密654321.然后发送给李四,这样李四得到了信息是假的.
中间人攻击
在发送者张三和接受者李四之间,劫持了信息的人.通过劫持信息,并且修改信息,让接收人得到错误的信息.例如:老黑劫持了张三发送的文件,然后用密钥解密密文,然后知道里里面的内容,并且发送假的密文给李四.
数字签名
数字签名目的是为了验证发送的消息是没有被改的. 过程是张三发送明文+密文 都给李四.这样例如发送100M的红楼梦,那么发送过去就是100M明文+100M密文.总共大小200M,太大了.所以这种方法不使用. 实际使用方法:发送明文+明文散列值再用私钥加密.这样长度就是明文+散列值加密的长度,这样长度非常小 例如中间人劫持了张三发的信息,然后随便改了一个假的文件发给李四.这样李四接收到文件,解密以后,发现是错误的信息,李四无法验证接到的信息是否被修改.解决方法是用数字签名. 数字签名的运行原理: 把发送者张三,先把明文,用单向散列函数把一个100M的红楼梦明文加密成了一个1024字节的散列值.然后用私钥加密这个1024字节的散列值.然后把100M字节的密文红楼梦,和这个1024字节的加密后的值一起发给李四 李四收到以后总共大小是100M+1024字节. 然后李四用公钥解密100M的密文,得到100M的红楼梦明文.再用公钥解密1024字节的密文,得到1024字节红楼梦明文的散列值. 然后用红楼梦100M的明文自己用单向散列函数计算,得到1024字节的散列值,再用这个散列值跟刚才解密后的1024字节散列值对比.如果相等,说明中间数据没被篡改. 好处: 总大小是密文100M+散列值密文的大小.1024 . 而不是明文+密文 = 200M
证书
CA机构是公认的认证机构.发送者张三在CA网站注册用户,然后上传自己的公钥.CA把张三的公钥用CA自己的私钥加密,得到加密后的张三公钥. 这个就是证书.然后张三把这个证书发送给李四,李四用CA官网的公钥,对证书解密,如果解密成功,就得到张三的公钥,证明是张三本人通过注册CA网站上传的公钥,然后用这个张三的公钥对,张三发的密文进行解密 证书的好处: 认证是发送者本人的公钥,而不是中间人攻击发送的假公钥.做到身份认证 例如如果没有CA,中间人老黑拦截信息,把中间人的假公钥和假密文都发送给接受者李四.李四用假的公钥解密了假的密文,得到了假的公文,李四无法知道这是中间人发的假的密文和假公钥. 但是有了CA之后,李四去CA官网下载CA的公钥,然后用这个公钥解密张三发过来的证书,得到张三的公钥.中间人老黑就算拦截了张三发的证书,因为中间人
|