> ios超级签名 >

关于iOS数字签名、代码签名、双重签名详解

2020-04-21 阅读:

经常听到关于iOS的一些签名,什么数字签名,代码签名,双重签名等,那这些签名都是代表什么意思啦?我们在这里具体的说说签名那些事。

一、数字签名:

1.1数字签名的过程:

模拟下数据传递过程,客户端A传数据给服务端B:

a、如果直接明文传递,裸传,风险最大,例如http,很容易被抓包;

b、后面有专门的Hash算法(专门是用来识别信息的),如果加上Hash算法,将明文跟Hash值传过去,对方收到后可以拿出HASH值来进行验证。如果Hash算法泄漏了,同样不安全,也很容易被篡改。

c、所以这里我们要对数据进行加密.明文数据有时会比较大,不适合使用RSA非对称加密算法,那么数据的HASH值是比较小的。然后客户端A将签名后的数据跟明文一起传给服务端B,具体的过程如下:

签名过程

这就是整个数据签名的过程,总的来说,就是一句话:需要传输的数据,通过HASH算法,得到该数据的HASH值,该HASH值,在通过非对称加密RSA,对该数据的HASH值进行加密。加密完 ,在把该数据的原始数据和该数据的加密的HASH值一起传给对方。

1.2、数字签名的验证过程:

当对方拿到数据之后,如何进行验证呢?

a、服务端B收到原始的数据和数字签名后,先进行校验.拿到原始数据,通过同样的HASH算法得到数据的HASH值.

b、通过非对称加密,将数字签名中的校验HASH值解密出来.

c、对比两个HASH值是否一致.这样可以很好的判断数据是否被篡改,具体如下:


数字签名的验证过程

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用Hash函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。

2.代码签名

代码签名:
代码签名是对可执行文件或脚本进行数字签名,用来标识软件来源以及软件开发者的真实身份,确认软件在签名后未被修改或损坏的措施。和数字签名原来一样,只不过签名的数据是代码而已。

苹果也是通过代码签名来保证每一个安装到iOS上的APP都是经过苹果官方允许的,防止盗版软件、病毒入侵、静默安装等。如果想要实现验证,最简单的方式就是通过苹果官方生成非对称加密的一对公私钥,在iOS系统中内置一个与服务器对应的公钥,私钥由苹果后台来保存,我们传APP到App Store时,苹果后来用私钥对APP数据进行签名,iOS系统下载这个APP后,用公钥验证这个签名,如果签名正确则这个APP肯定是由苹果后台认证的,并且没有被修改或损坏。

整个过程很简单,这样就保证了苹果安装的每一个APP都是经过苹果官方允许的。对于大部分普通用户而言,这样一个数字签名就解决了安全隐患问题,但是实际上iOS设备安装APP并不是只有App Store这一个渠道,比如对于我们iOSer来说,我们在开发APP时还在真机调试,当然苹果还开放了企业内部分发的渠道,这时就无法通过简单的代码签名来满足这些需求了。

苹果为了实现这些需求,iOS签名的复杂度也就开始增加了,这样双层代码签名(双重签名)就出现了。

3.双重签名(双层代码签名)

双重签名过程:
我们知道,从事app开发的,如果要run到真机上,或者发不到appstore,或者通过蒲公英等其他分发网站,第一步都是需要去苹果官网申请证书,包括开发证书和发布证书。

在真机调试时候,都会有一个描述文件,描述文件就是在developer.apple.com创建的,在Xcode中填入AppID后会代办创建,Xcode运行时会打包进APP中。为了系统安全,苹果除了控制APP滥用问题还控制了推送、iCloud、调试器等附加这些权限,苹果把这些权限开关统一称为Entitlements(授权文件)。并将这个文件放在了一个叫做Provisioning Profile(描述文件)文件中,描述文件里面就包括权限、证书等配置相关文件。

请求证书
开发过程中,首先Mac电脑(比如Xcode)会自动生成一对公私钥

公私钥

图中的证书就是公钥M,专用密钥就是私钥M(也就是我们导出的P12文件)

用一个CSR文件(就是在钥匙串访问中,证书助理,从证书颁发机构中获取的)向苹果申请一个证书,这个CSR文件主要包含了一个公钥文件,还有一些信息,比如邮箱、名字、签名信息、Hash值等等,苹果收到请求后,会用私钥A将公钥M进行签名,以供苹果设备进行验证(用公钥A进行验证)。苹果服务器将公钥M和签名信息打包成证书,并把appID、证书、设备IDs、权限文件等放入描述文件一并返回给Mac电脑,以备Mac电脑用这个描述文件中的证书到iOS设备去验证。

生成IPA文件,发送到iOS设备上
iOS设备上的APP其实都是文件夹,最重要的是可执行文件MachO和framework,APP签名也就是对它俩进行签名,通过Mac电脑的私钥M对文件进行签名,把这个签名和从苹果申请的描述文件一并放入到APP中。当安装APP时,iOS设备用公钥A来解析描述文件中的证书进行验证证书的有效性,通过之后将证书中的公钥M拿出来,再去验证APP签名的有效性,这样就可以验证当前APP是否是苹果官方允许的。


双层代码签名

在开发阶段,我们需要频繁的改动程序跑真机,苹果不需要关心这些,所以iOS设备没有对APP的更改进行验证,只是验证证书(公钥M是不是合法的,APP签名的有效性)。这样解决了安装问题,但是如果这样的话,可以在任何一部iOS设备上安装APP,苹果防止开发者滥用,又加了两个限制:
要在苹果后台注册过的设备才可以安装
签名只能针对具体的某一个APP进行签名

最后关于APP签名:

在开发中,编译一个APP后,用本地的私钥M对APP进行签名,同时把从苹果服务器得到的Provisioning Profile文件打包进APP中,文件名为embedded.mobileprovision,把APP安装到iOS设备后,系统进行验证。

查看资源文件签名

查看APP的包内容,里面会有_CodeSignature文件夹(里面的就是资源文件的签名),还有个可执行文件,可以用MachO查看,里面的Code signature就是应用签名。

网站友情链接: 微信号购买平台 微信号出售 买微信号 刷票 微信刷票 微信投票 快手刷粉丝 微信号出售 微信号批发 微信号购买 王者荣耀代练 苹果超级签名 ios超级签名 超级签名 刷票 王者荣耀代练 ios企业签名