ios加密机制是什么?为什么无法破解?
数字签名基于非对称算法实现所谓的对称算法就是加密和解密都用一份秘钥而非对称算法使用的是一对公钥和私钥公钥加密的数据只有私钥才能解密 而私钥加密的数据也只有公钥才能解密2.所谓的数字签名 就是签名者对原始数据的摘要(例如MD5特征值)用私钥进行加密后得到的文件用户拥有签名者公布的公钥 在用户接收到签名和原始数据之后 用公钥解密签名 可以得到签名者的摘要再对传过来的原始数据用相同的算法(例如MD5特征值)得到摘要 将两个摘要对比即可知道这份传过来的数据是否被篡改过3.最简单的签名方式就是讲app当做原始数据 苹果公司将公钥内置于iOS系统然后对appStore上的所有app用公司内部的私钥进行加密(签名)但是实际上 iOS设备安装app的方式除了appStore 还有从xcode上安装 in-house企业内部分发等方式所以这种简单的方式就行不通了4.从xcode安装的app不需要上传到apple服务器而且苹果对这里的安装也需要有控制权 包括只有经过苹果允许的app才能安装 非开发app不能安装为此苹果提供了一种双层签名的机制5.iOS中所谓的证书其实是对MAC开发机的【公钥】进行签名后得到的文件我们将MAC开发机生成的密钥对成为私钥L 公钥L (L = Local)而由苹果掌控的密钥对称为 私钥A 公钥A (A = Apple)6.首先将公钥L上传到苹果服务器 苹果用私钥A对公钥L签名 得到证书在编译app的时候 用私钥L对app进行签名将证书和签名后的app打包安装到iOS设备中此时 iOS先用私钥A对证书(也就是公钥L的签名)进行解密 我们知道签名可以保证被签名数据的可靠性 所以这里保证公钥L是可靠的再用这个可靠的公钥L对app签名进行解密 以此保证app是可靠的通过这一系列流程 我们保证了app可以直接通过xcode安装 也保证了app没有经过篡改但是还没有解决安装的控制权的问题7.我们在实际打包应用的时候 有一个Provisioning Profile这个文件除了包含上面提到的证书外 苹果还加入了一些其他用于控制安装权的东西比如说appID 设备IDs Entitlements权限控制等由于这些打包进去的文件是在苹果后台进行的 也就是说是经过苹果允许的这样也就保证了苹果对于安装的控制权不过为了区分起见 证书和 appId 设备ID entitlements是分开签名的 他们打包在一起才叫做Provisioning Profile签名后的Provisioning Profile称为embedded.mobileprovision在iOS设备中用公钥A解密后 iOS就会用里面的设备IDs等进行验证 保证安装的控制8.如果我们想别的电脑也能编译我的app代码怎么办按照上述流程 别的电脑需要下载Provisioning Profile 并且需要拥有私钥L对app进行签名才行所以需要原来的电脑那边导出私钥L 给别的电脑用这个私钥L 导出后是.p12文件9.总结下专有名词之间的对应关系:证书:内容是公钥或私钥,由其他机构对其签名组成的数据包。
Entitlements:包含了 App 权限开关列表。
CertificateSigningRequest:本地公钥。
p12:本地私钥,可以导入到其他电脑。
Provisioning Profile:包含了 证书 / Entitlements 等数据,并由苹果后台私钥签名的数据包。
两对钥匙对:MAC生成的公私钥L 苹果的公私钥A各自的作用:①MAC的私钥L:加密app ②MAC的公钥L:用来解密app③苹果的私钥A:加密MAC的公钥L(和其他相关文件) 加密后的公钥L称为证书 他和其他同样用私钥A加密后的文件一起构成Provisioning Profile④苹果的公钥A:解密Provisioning Profile --> 解密得到的公钥L用来继续解密app