ios加密机制是什么?为什么无法破解?( 四 )


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
1.苹果不是完全不能破解,这点大家要清楚,记得FBI那次和苹果纷争解密事件,最后FBI和一些安全组织测试5s以下版本是可以破解的 。这个估计是iOS软件层面上的漏洞,跟加密机制没鸡毛关系 。再根据iOS版本和手机发行对比,5s以下应该是包括iOS8和8以前的系统 。9-10是破不鸟得 。
2.回到问题根本,为什么苹果手机相对安全,记得是苹果手机,因为iOS闭合的,官方不开放API,也禁止任何APP调用官方私有API,被发现直接就会下架,360就干过这事,所以早期版本被下了,那版本各种逆向各种系统级别读取用户信息,苹果要求每个开发者申请证书,上架必须提交所有原始代码,不准APP热更新,得重新下新版本,这些点苹果从APP这点就能保证很大的安全给用户 。
还有就是iOS的BootLoader这个玩意和emcc读取权限是关闭的,所以经常有越狱失败变成白苹果甚至变砖,白苹果还有的救,只能更新或者刷最新系统,更新系统后也得用原来ID激活,不会因为刷机而没有ID保护了 。这个方面也保证了设备物理硬件上的安全 。
还有一个就是开机密码,这个和ID没毛关系的,开机密码也没用什么证书乱七八糟的,简单点估计就是类似于,我只是猜测,aes1024,aes2048这样的算法,加密了开机密码字符,而且输入次数过多还会锁定,这也是也没法破解苹果系统最重要的一点 。aes算发是Linux独有的机制,iOS是基于Linux开发的,相必应该用了甚至高于aes复杂机制的内部算法 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。