loading
立即发布信息
·贵阳 [切换]
    • 区域:南明
    • 信息详情
    1. 应用签名原理
    以前操作系统上是不需要签名的,软件下载下来就能用,盗版横行。苹果希望解决这样的问题,保证每一个安装到iOS系统上的软件都是经过苹果验证的。要怎么保证呢?就是通过签名机制。

    1.1 非对称加密(RSA)
    代码签名是对可执行文件或脚本进行数字签名,用来确认软件在签名后未被修改或损坏的措施。它是基于非对称加密算法实现的。对称加密是通过同一份密钥加密和解密数据,而非对称加密则有两份密钥,
    分别是公钥和私钥,用公钥加密的数据,要用私钥才能解密,用私钥加密的数据,要用公钥才能解密。

    简单说一下常用的非对称加密算法RSA的数学原理:

    选两个质数x和y相乘得出一个大整数n,例如 x=31,y=41,n=xy=1271
    选1-n间的随便一个质数z,例如 z=13
    经过一系列数学公式,算出一个数字p,满足:
    通过n和z这两个数据一组数据进行数学运算后,可以通过n和p去反解运算,反过来也可以。
    如果只知道n和z,要推导出p,需要知道x和y,也就是要需要把n因数分解。
    (n,z)两个数据在一起就是公钥,(n,p)两个数据就是私钥,满足用公钥加密,私钥解密,或反过来公钥加密,私钥解密,也满足在只暴露公钥的情况下,要推导出私钥(n,p),需要把大整数n因数分解。
    目前因数分解只能靠暴力穷举,而n数字越大,越难以用穷举计算出因数x和y,也就越安全,当n大到二进制1024位或2048位时,以目前技术要破解几乎不可能,所以非常安全。

    注意:生成密文的长度和明文长度无关,但明文长度不能超过密钥长度。

    1.2 数字签名
    数字签名是非对称密钥加密技术与数字摘要技术的应用。首先我们需要计算代码的摘要,再利用非对称加密进行加密处理。

    Mac钥匙串里面可以看到我们私钥长度是2048位=256字节,所以我们的摘要不能长于256字节。

    我们需要一种算法算出数据的摘要,满足:
    原始数据若发生任何变化,计算出的摘要值都会发生改变。
    计算出的摘要要足够短,不能长于256字节。最常用的算法就是MD5、SHA-1。
    生成一对RSA的公钥和私钥,自己拿着私钥,公钥可以发布出去。
    第一步计算出摘要后,用私钥对摘要进行加密,得到的加密数据就是原始数据的数字签名。把数据签名和原始数据一起发送给用户。
    用户拿到数据签名和原始数据后:
    同样的摘要算法对原始数据进行计算摘要值。
    再用公钥对数字签名进行解密,得到发送者算出的摘要值,判断两个摘要值是否相等。
    注意:若数据被篡改过,这个值会不一样,导致摘要值不等;若摘要值相等,则说明数据没有被串改。

    1.3 单向签名
    通过上面的介绍,苹果官方生成一对公钥和私钥,自己拿着私钥,所有的iOS设备内置公钥。苹果将我们上传App Store的App进行数字签名。用户从App Store下载App时,同时下发数字签名。
    iOS设备对下载的App进行摘要值计算,再用设备内置的公钥对数字签名解密得到摘要值。如果摘要值相同,则说明应用是官方认证且没有被篡改的。

    如果只能通过App Store进行下载安装,单向数据签名就可以解决问题,但是苹果还提供了多种App安装方式:

    Development:开发证书签名后,认证过的设备可以直接安装应用。
    In-House:企业证书签名后,企业内部分发安装使用。
    AD-Hoc:相当于企业分发的限制版,限制安装设备数量,较少用。
    上面的安装方式总结一下:

    开发阶段,安装包不需要上传到App Store就可以直接安装到设备上。
    既需要保证系统的安全性,又必须对安装的App有绝对的控制权:
    经过苹果允许才可以安装。
    不能被滥用,导致非开发App也能被安装。
    苹果这里给出的方案是双层签名。

    1.4 双向签名
    双向签名的过程如下:

    在Mac系统中生成一对公钥和私钥,这里称为公钥M和私钥M。(M=Mac)
    苹果自己有固定的一对公钥和私钥,跟之前App Store原理一样,私钥在苹果后台,公钥在每个iOS系统中。这里称为公钥A和私钥A。(A=Apple)
    把公钥M以及一些开发者的信息,传到苹果后台(这个就是CSR文件),用苹果后台里的私钥A去签名公钥M。 得到一份数据包含了公钥M以及其签名,把这份数据称为证书。
    在开发时,编译完一个App后,用本地的私钥M(P12)对这个App进行签名,同时把第三步得到的证书一起打包进App里,安装到手机上。
    安装时,iOS系统进行2次签名验证:
    通过系统内置的公钥A解密证书私钥A获取证书摘要,再验证证书是否被篡改。
    验证证书后确保了公钥M是苹果认证过的,再用公钥M去验证App的签名。
    无授权文件的双向签名
    有了上面的过程,已经可以保证开发者的认证,和程序的安全性了。 但是,iOS程序一般是通过App Store分发到用户设备的。如果只有上述的过程,那岂不是只要申请了一个证书,
    就可以安装到所有 iOS设备了?

    苹果这里给出的方案是授权文件。

    1.5 双向签名+授权文件
    苹果为了解决应用滥用的问题,又加上了一些限制:

    苹果后台注册过的设备才可以安装。
    签名只能针对某一个具体的App。
    苹果还想控制App里面的iCloud、Push、后台运行、调试器附加这些权限,所以苹果把这些权限开关统一称为Entitlements(授权文件)。将这个文件放在了一个叫做Provisioning Profile(描述文件)文件中,
    Xcode运行时会打包进入App内。
    在开发时,编译完一个 App后,用本地的私钥M对这个App进行签名,同时把从苹果服务器得到的描述文件打包进APP里,文件名为embedded.mobileprovision。App安装到手机上后,系统将完成验证工作。 联系我时,请说是在88同城分类信息网看到的,谢谢!

    首发网址:https://gy.88tie.com/wangzhanyouhua-SEO/27342.html
    查看全部贵阳网站优化/SEO信息
    发布一条贵阳网站优化/SEO信息

    • 您可能感兴趣
    • 贵阳新发布
    热门城市:
    北京信息港 上海信息港 天津信息港 重庆信息港 广州信息港 深圳信息港 杭州信息港 福州信息港 厦门信息港 石家庄信息港 郑州信息港 武汉信息港 长沙信息港 南京信息港 南昌信息港 西安信息港 成都信息港 太原信息港 济南信息港
    4008-234-101