前言
学习iOS签名机制,可参考如下学习路线:
加密解密(对称DES3DESAES、非对称RSA)--->单向散列函数(MD4、MD5、SHA1-3)--->数字签名--->证书--->签名机制
一、加密解密
1.1对称和非对称
为了避免传输信息被偷听,需求对传输信息进行加解密。依据密钥的运用办法,能够将暗码分为2种,即对称暗码和非对称暗码(也称公钥暗码)。对称暗码中运用的加密和解密密钥相同,非对称暗码中运用的密钥不同。
对称暗码算法有DES、3DES、AES等。DES是一种将64bit明文加密成64bit密文的对称暗码算法,密钥长度是56bit。由于DES每次只能加密64bit的数据,遇到比较大的数据,需求对DES加密进行迭代(反复),现在已经能够在短时间内被破解,所以不主张运用DES;3DES是将DES重复3次所得到的一种暗码算法,也叫做3重DES,现在还被一些银行等组织运用,但处理速度不高,安全性逐渐暴露出问题;AES的密钥长度有128、192、256bit三种,现在AES,已经逐步取代DES、3DES,成为首选的对称暗码算法。一般来说,我们也不应该去运用任何克己的暗码算法,而是应该运用AES,它经过了全世界暗码学家所进行的高品质验证工作。
非对称暗码算法中,现在运用最广泛的公钥暗码算法是RSA。
1.2如何传输密钥?
对称加密系统中,密钥不能直接传输,不然或许被截取,截获者也能破解密文。有以下几种密钥传输方法:
1、事先共享密钥:即经过非通讯手段,暗里直接给出密钥。
2、密钥分配中心:所有密钥有分配中心管理,分配中心经过特殊安全手段下发。
3、凭借非对称暗码系统:由音讯的接收者,生成一对公钥、私钥,将公钥对外公开发给音讯的发送者,音讯的发送者运用公钥加密音讯,接受者运用私钥解密。整个进程只要音讯接收者具有私钥,其他任何人没有私钥不具有解密能力。
1.3混合暗码系统(HybridCryptoSystem)
对称暗码不能很好地处理密钥配送问题,可是加解密速度快;非对称暗码加密解密速度比较慢,可是能很好的处理密钥配送问题。所以采纳对称暗码和公钥暗码的优势相结合的办法(即混合暗码系统),能够很好的处理对称暗码密钥配送问题以及加解密速度慢的问题。包括 https 中也是采用相似的混合暗码系统,https中的服务端相当于音讯接收者,客服端相当于音讯发送者。具体过程如下:
加密过程:
1、接收者生成私钥和公钥(非对称暗码系统),并将公钥发给音讯发送者;
2、发送者生成会话密钥(对称暗码系统),运用会话密钥加密音讯,运用公钥加密会话密钥;
3、发送者将加密音讯以及秘要会话密钥一并发给音讯接收者;
解密过程:
1、音讯接收者用私钥解密出会话密钥;
2、再用会话密钥解密出音讯;
二、单向散列函数
2.1单向散列函数特色
单向散列函数又被称为音讯摘要函数(哈希函数),具有以下特色:
能够依据依据音讯内容计算出固定长度散列值。散列值的长度和音讯的长度无关,不管音讯是1bit、10M、100G,单向散列函数都会计算出固定长度的散列值;
计算速度快,能快速计算出散列值,音讯不同,散列值也不同;
具有单向性,即能够依据音讯计算出散列值,可是依据散列值无法计算出音讯;
2.2常见单向散列函数
MD4、MD5:MD便是MessageDigest的缩写,发生128bit的散列值,现在已经不安全。Mac终端上默许能够运用md5文件名指令获取散列值。
SHA-1:发生160bit的散列值,现在已经不安全。
SHA-2:SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit。
SHA-3:全新标准,现在还在研制中。
2.3单向散列函数的使用场景
1、单向散列函数能够监测文件是否被篡改,文件被篡改后的散列值和篡改前的散列值假如不同,则阐明文件被篡改过。
2、用户暗码加密,一般不会将用户暗码明文传给服务器保存到服务器对应的数据库中,假如后端数据库被攻破,成千上百的用户账号信息直接将被走漏。所以一般做法是获取暗码散列值传给后端,这样服务端也不知道用户暗码是什么,所以一般用户忘记暗码后就无法找回,只能经过重置暗码处理。假如一个平台能够找回暗码,阐明该平台是不安全的。别的,为了避免用户暗码相同或过于简略,增加安全性能够采纳先加盐再获取散列值的策略。

用户暗码散列值
三、数字签名
3.1数字签名进程
音讯接收者能够凭借数字签名的方法来辨认音讯是否被篡改、保证音讯发送者无法抵赖音讯。数字签名,其实便是将公钥暗码反过来运用。在非对称暗码系统中,任何人都能够运用公钥进行加密,只要音讯接收者才拥有私钥解密音讯;在数字签名中,任何人都能够运用公钥验证签名,只要音讯发送者才干拥有私钥,并凭借私钥签名。

上图能够看出签名的制造进程,将音讯生成对应的散列值,然后音讯发送者运用私钥加密音讯散列值。发送者会将加密音讯和加密的签名一同发送个音讯接收者。音讯接收者接受到音讯后,凭借音讯发送者的公钥解密音讯散列值,一起再用自己的公钥解密音讯并生成另一个音讯散列值,比较两个散列值,若相同则阐明音讯没有被篡改,不然音讯阐明音讯被篡改。
3.2小结
数字签名的效果不是为了保证秘要性,只是是为了能够辨认内容有没有被篡改以及避免音讯发送人否认。数字签名其实便是将公钥暗码反过来运用。数字签名顶用私钥加密,公钥解密;非对称暗码顶用公钥加密,私钥解密。
四、证书
4.1证书的效果
假如出现中间人进犯,中间人冒充音讯接收者,中间人自己生成公钥和私钥,并将自己的公钥发给音讯接收者。所以假如想避免中间人进犯,音讯发送者必须保证拿到公钥的合法性。经过证书相关手段能够保证公钥的合法性,音讯发送者一般要经过权威组织获取公钥。
证书是由权威组织认证的。暗码学中的证书,全称叫公钥证书(Public-keyCertificate,PKC),和现实生活中的毕业证、驾驶证等相似,里边有个人信息、此人的公钥以及权威认证组织(CertificateAuthority,CA)对公钥施加的数字签名三个部分组成。CA是指能够认定“公钥的确归于此人”并能够生成数字签名的个人或者组织。
4.2证书的运用

从上图中能够看出音讯接收者需求生成密钥对,并将自己的公钥给权威认证组织,权威组织会用自己私钥对音讯接收者的公钥施加数字签名,制造成证书并保存在权威组织的仓库中。于此一起,音讯发送者能够经过正规渠道获取拿到权威组织公钥(一般是提早内置的,如iPhone设备中包括apple的公钥),并能下载证书,此刻能够用权威组织的公钥验证证书的合法性。映射的现实生活相当于:教育组织工作人员从教育组织获取到一个能够用于检测恣意学历证书(证书)真伪的东西(权威组织公钥)。
五、iOS签名机制
5.1iOS签名机制造用
iOS签名机制首要是保证安装到用户手机上的APP都是经过Apple官方允许的,假如篡改了App自身的源码或资源文件,签名值将无法对应上,便无法安装。实践开发进程中不管是真机调试,仍是发布APP,开发者都需求经过一系列复杂的过程,这些过程都是为了避免随意安装App。
运用签名机制,也能够在原有项目中完成App自签名功用代码,对资源文件、源码、证书签名,在App启动时做签名校验,当有人改动资源文件,签名校验就会失败,则直接调用exit 退出 App,为了避免逆向可将该功用相关代码经过C语言方式完成或者整个使用完成代码混淆。网上有不少介绍App自签名的完成代码,可是笔者以为自签名功用很鸡肋,由于逆向的本质是经过插件的方式更改内存中的代码,一般并非是直接更改源码或资源文件。
5.2iOS签名机制造流程
有了上述知识作为衬托,签名机制流程就很好理解了,如下图:

Mac设备具有生成公钥和私钥的能力,平常操作钥匙串东西钥匙串访问-->证书助理-->从证书颁发组织请求证书首要目的便是为了生成 Mac公私钥,之后再将公钥上传到苹果后台,用于制造证书。Apple自身能够以为是权威组织,Apple后台能够生成私钥,iOS设备中有公钥。
1、当运转CMD+R的时分,此刻会进行代码签名,即拿 Mac本地的私钥对使用签名生成ipa安装包,ipa安装包中首要包括使用、签名、资源文件等。
2、将Mac本地生成的公钥上传到Apple后台,Apple后台用自己的私钥生成证书文件,证书中包括Mac公钥以及签名。
3、挑选相应的证书、devices、appid、entitlements(权限),然后苹果后台用自己的私钥将这些内容签名,并生成描述文件。
4、iOS设备中包括苹果的公钥,运用公钥验证签名文件,假如验证经过则能够获取证书。于此一起,还会比对相应的devices、appid、entitlements(权限)是否一致。
5、运用iOS设备中的苹果公钥验证证书签名,假如签名验证成功则会获取到Mac公钥。
6、运用Mac公钥验证ipa安装包签名,假如验证成功则直接安转使用。
5.3线上App签名机制
假如 APP是从AppStore下载安装的,会发现里边是没有mobileprovision文件。线上app的验证流程简略很多,使用上传到Apple后台,Apple会用自己的私钥进行签名,下载使用的设备中包括Apple公钥,使用下载完成,直接能够用设备中的Apple公钥进行验证。流程如下:
