数字签名及证书

1. 加密:

对称加密:
用对称密钥及算法进行加密。对称密钥,加解密使用相同的密钥。

非对称加密:
用非对称密钥及算法进行加密。非对称密钥,加解密使用不同的密钥。

2. MD5:

(Message Digest Algorithm)消息摘要加密算法,即将原始数据运算为固定长度的值。

作用:确保信息传输过程中完整一致。

特点:压缩性,任意长度的数据,算出的MD5值长度都是固定的;容易计算,从原始数据计算出MD5值很容易;抗修改性,对原始数据做任何修改,计算的MD5值都是不一样的;强抗碰撞,已知原始数据和MD5值,找出具有相同MD5值的数据是很困难的。

3. 数字签名:

首先,生成一对非对称密钥(公私钥),私钥自己保留,公钥公布出去;

计算出原始数据的MD5值(摘要),然后利用私钥对MD5进行签名(加密),然后将原始数据和签名一起发送给用户;

用户用公钥对签名进行解密得到摘要,然后再计算原始数据MD5值并与解密得到的摘要进行比较,得到原始数据是否被修改;

数字签名及证书_第1张图片
sign0.png

4. iOS 数字签名及证书:

主要有两对非对称密钥,Mac本地一对(local),Apple自己有一对(apple);Mac本地一对是通过keychain.app "从证书颁发机构获取证书" 获得的,私钥保存在本地 keychain.app 中,公钥为 certificateSigningRequest。

将certificateSigningRequest文件(公钥local)上传给apple后台,会用apple私钥对其进行签名,签名和公钥local组成证书,下载到本地,就会与本地私钥local关联起来,在Xcode中选中证书,就会用私钥local对App进行签名。

Apple后台会利用私钥apple对上述生成的证书及device IDs、AppID、entitlement组成的数据进行签名,然后与数据组成provisioning prpfile文件,下载到本地。

编译完app,会用私钥local对app进行签名,然后将provisioning profile打包到app中,在iOS设备中安装时,就会用iOS设备中的公钥apple对provisioning profile文件中的两个私钥apple的签名进行验证,如果验证通过就从provisioning profile取出AppID等信息进行验证,如果都通过,就可以安装了。

数字签名及证书_第2张图片
sign1.png

5. 涉及的相关概念:

证书:包含公钥或者私钥及其他机构对其的签名。

Entitlements:App的权限列表(推送、内购、后台运行等)。

CertificateSigningRequest:本地公钥。

p12文件:本地私钥。可以导入其他电脑对App进行签名。

Provisioning profile:包含证书、Entitlements等数据及苹果私钥签名的数据包。

6. iOS 生成证书、签名整个流程:

  1. 在 Mac 上通过 keychain.app 生成一对公私钥: Local_Public、Local_Private,保存的 CertificateSigningRequest 文件就是公钥,私钥自动保存在 keychain.app 中;
  2. 将 Local_Public 上传到苹果后台,苹果利用 Apple_Private 对其进行签名,然后签名和 Local_Public 组成证书 cer,下载到本地,双击安装就会 cer 与 Local_Private 关联起来;
  3. 创建 Provisioning Profile,在苹果后台利用 Apple_Private 私钥对 AppId、DeviceIds、第2步创建的证书 cer 和 Entitlements(在 Apple 后台创建 AppId 指定的)等信息进行数字签名,然后签名与上述信息组成 Provisioning Profile 文件,下载到本地,双击安装,与证书进行关联;
  4. 在 Xcode 中设置打包证书,编译完后,会用证书对应的 Local_Private 私钥对 App 进行签名,并将证书对应的 Provisioning Profile 一起打入包中;
  5. 在 iOS 设备中安装 App,每一个 iOS 设备中都内置了一个 Apple_Public 公钥,使用 Apple_Public 公钥进行验证即可;

参考

你可能感兴趣的:(数字签名及证书)