IOS的签名机制
前言
了解IOS的数字签名机制之前我们需要掌握以下几个知识:
- 加密解密(对称加密(DES 3DES AES),非对称加密(RSA))
- 单向散列函数(MD4,MD5,SHA-1,SHA-2,SHA-3)
- 数字签名
- 证书
一、加密解密
1.对称加密(DES 3DES AES)
对称加密就是,加密和解密用的密钥是一样的, DES是用一个56bit的密钥对64bit的数据进行加密生成64bit的密文.解密既反向.
3DES大概是先进行一次的DES加密(密钥1),然后进行解密(密钥2),然后进行加密(密钥3),得到密文.解密既反向.
- 注:DES 3DES 已不再安全
2.非对称加密(RSA算法)
非对称加密,加密和解密用的密钥是一不样的.非对称加密,有一对密钥,成对生成,分为公钥和私钥.通过公钥加密的数据,通过私钥可以解开.通过私钥加密的数据,通过公钥可以解开.
3.对称加密的存在的问题
存在问题: 密钥配送问题.
我们可以通过以下手段解决密钥的配送问题:
1、事先共享密钥(不适用于互联网通讯)
2、密钥分配中心
3、Diffie-Hellman密钥交换
4、公钥密码(非对称加密)
4.非对称加密的存在的问题
存在问题: 加密解密速度慢.
解决密钥配送问题:由消息的接送者生成一对公钥,私钥.将公钥发送给消息的发送者,自己保留私钥.消息的发送者使用公钥加密要配送的密钥,接收者用私钥解密.
5.混合密码系统
混合密码系统是将对称密码和非对称密码的优势相结合解决了对称密码密钥配送问题,和非对称密码加密速度慢问题.
二、单向散列函数(MD4,MD5,SHA-1,SHA-2,SHA-3)
单向散列函数(MD4,MD5,SHA-1,SHA-2,SHA-3),的作用是根据你传入的内容生成一个散列值.散列值的长度和内容的长度是没有关系的,计算出固定长多的散列值.
MD4,MD5 为128bit (不安全了)
SHA-1 为160bit(20字节)(不安全了)
SHA-2 (SHA-256,SHA-384,SHA-512)
SHA-3 全新标准
单向散列函数.png
三、数字签名
数字签名主要是为了验证数据没有被篡改过.具体流程为:
A要向B发送消息时,A------->B,如果有中间人把消息改改了,AB都不会察觉到.这时就用到了数字签名.
- A生成一对
公钥和私钥
,私钥
自己保留公钥
发送给B
- A生成一对
- 2.A用私钥对
消息
进行加密生成签名
,把[消息,签名
]一起发送给B - 3.B收到[
消息,签名
],用公钥
对签名
进行解密和收到的消息
进行对比,来确认数据没有被篡改
以上过程存在两个问题:
- 1.签名速度太慢:
消息通过非对称加密,由于有时候消息很大,速度很慢,这里就用到了单向散列函数,具体是怎么用的呢.
在上面的第2步,A首先对消息用单向散列函数生成一个散列值,然后用私钥对散列值进行加密生成签名,把[消息,签名
]一起发送给B
在上面的第3步,.B收到[消息,签名],首先用公钥对签名进行解密得到散列值,然后用相同的单向散列函数对消息
生成一个散列值.对比两个散列值,来进行签名的认证 - 上面的第1步,A把
公钥
发送给B时也会遭遇中间人篡改,把自己的公钥
发给B,这样就能冒充A了,为了解决这个问题,就用到了证书
.
- 上面的第1步,A把
四、证书(Certificate)
证书
也叫公钥证书
,主要是为了解决公钥发送问题.主要由认证机构(Certificate Authority, CA)
施加数字签名.
CA就是能够认定公钥确实属于此人
并能够用生成数字签名的组织或者个人.
流程大概如下:
- A生成一对
公钥和私钥
,A在认证机构CA注册自己的公钥,认证机构用自己的私钥对A的公钥进行数字签名,[A的公钥,数字签名]
既为证书.
- A生成一对
- 2.B去认证机构下载A注册的公钥证书
[A的公钥,数字签名]
,B使用认证机构的公钥验证证书的签名,验证成功说明A的公钥的确是A生成的,这样就得到了A的公钥.
五、IOS签名机制
IOS签名机制.jpg-
1.我们创建证书时,苹果会让我们提供一个
Mac公钥.jpeg. certSigningRequest
文件,其实这个文件就是我们Mac电脑的公钥如下图:
-
2.上面文件创建步骤如下图,这个操作就是在我们电脑生成一对
颁发证书.jpeg公钥和私钥
,私钥保存在我们的电脑,公钥生成. certSigningRequest
文件.
-
3.苹果得到我们的Mac公钥之后,用苹果的私钥对公钥进行签名,生成开发或者发布证书
发布证书.jpeg
WechatIMG340.jpeg!
- 4.然后苹果会对证书进行二次签名,
[Mac公钥, 签名] +[devices appid, entitlements]
,用苹果的私钥进行签名生成一个文件,.mobileprovision
也就是我们平时所说的描述文件.
-
5.
.mobileprovision
文件会放到Xcode指定目录里面,当我们打包时,首先编译生成二进制数据包
,然后用Mac私钥对其加密生成签名,加上.mobileprovision文件生成我们的ipa包. -
6.我们每个人的iPhone手机都内置了
苹果的公钥
,当App安装时,首先用苹果的公钥对.mobileprovision文件
进行两次认证,得到Mac的公钥
,最后用Mac公钥验证第三个签名,如果成功则安装程序.