iOS逆向-iOS签名机制

请注意,本文编写于 371 天前,最后修改于 191 天前,其中某些信息可能已经过时。

加密解密算法

对称密码

在对称密码中加密和解密使用的是同一个密钥。常见的对称加密算法有:DES、3DES、AES。

  • DES

    • DES是一种将64bit的明文数据加密成64bit密文的算法,它所使用的密钥也是64位(实际用到了56位,第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)。
    • 由于DES只能加密64bit的数据,遇到比较大的数据的时候,需要反复进行DES加密。
    • 目前来说DES可以在短时间内被破解。

DES算法加密解密
DES算法加密解密

  • 3DS

    • 3DES(或称为Triple DES)是三重数据加密算法块密码的通称。它相当于是对每个数据块应用三次DES加密算法。
    • 随着计算机计算速度的提升,3DES算法加密的数据也可以被破解。
    • 如果三次算法使用的密钥是同一个,那么三次加密的结果等同于一次DES算法加密。
    • 如果三次算法第一次和第三次密钥相同,第二次密钥不同,那么称之为DES-EDE2 (E表示加密,D表示解密)
    • 如果三次算法使用的密钥都不同那么称之为DES-EDE3

3DES算法加密解密
3DES算法加密解密

  • AES

    • 高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
    • AES密钥长度则可以是128,192或256bit。

对称密码有一个缺点:由于加密解密使用的是同一串密钥,那么接收者想要读取接收到的密文的时候就必须使用发送者所用的加密密钥对密文进行解密,而接受者获取密钥的过程中就有可能被人恶意劫持,劫持者获取到密钥之后就可以查看或者篡改发送者加密的密文,进行重加密,再进行传递。

公钥密码(非对称密码)

公钥密码有两个密钥,分别为:加密密钥、解密密钥。加密密钥一般是公开的称为公钥。解密密钥由消息接受者保存,称之为私钥。公钥和私钥是成对的,一一对应的,不能单独生成。用公钥加密的密文,必须使用与公钥对应的私钥进行解密。用私钥加密的密文,必须使用与私钥对应的公钥进行解密。

公钥是公开的任何人都可以使用公钥加密数据发送给接收者,而私钥只有接受者自己保存,这样就解决了密钥配送过程中被劫持的问题。

目前使用最为广泛公钥密码算法的是RSA。

混合密码

由于对称密码不能很好的解决密钥配送问题,而公钥密码加密和解密花费时间长、速度慢,它不适合于对文件加密而只适用于对少量数据进行加密。

混合密码在通信的时候会随机生成一个会话密钥,使用会话密钥对数据进行对称密码算法加密,然后使用公钥对会话密钥进行公钥密码算法加密,将加密之后的会话密钥和用会话密钥加密的数据组合在一起发送给接收者。接收者用自己的私钥对会话密钥进行解密操作,获得会话密钥之后再利用会话密钥对数据进行解密。

混合密码
混合密码

单向散列函数

单向散列函数可以根据消息内容计算出散列值。散列值的长度和消息的长度无关。
单向散列函数计算速度快,能够快速计算出散列值。不同的消息计算出的散列值不同,单向散列函数具有单向性,即可以通过消息获取散列值,不能通过散列值获得原消息。

通常使用单向散列函数来查看数据是否被篡改。

数字签名

为了解决接收者对接收的消息的真实性,是否被篡改、伪装和否认的判断引入了数字签名的概念。

数字签名是发送者使用自己的私钥对消息进行签名,然后将数字签名和消息发送给接收者,接收者利用发送者的公钥对包含数字签名的消息进行解密,然后对比含有数字签名的消息和直接接受消息的一致性判断接受到的消息的真实性。

数字签名
数字签名

上述情况发送了两次消息,在数据传输上存在改进的空间。单向散列函数可以标志一段数据的唯一性,于是可以在数字签名时利用发送者私钥对数据的散列值进行签名,然后接收者只需要对比消息的散列值即可。

数字签名-改进
数字签名-改进

要正确使用数字签名的一个重要的前提是:用于验证数字签名的公钥必须属于真正的数据发送者。加入在传输过程中遭受到主动攻击,拦截了公钥和消息,攻击者完全可以接收发送者的公钥并且向接收者传递自己的公钥,拦截发送者的消息,并且使用自己的数字签名向接收者发送任何消息。

拦截公钥发送篡改的消息
拦截公钥发送篡改的消息

所以在验证签名之前需要验证公钥的合法性。

证书

证书全称为公钥证书(Public-key Certificate,PKC),是由CA进行数字签名的。CA就是能够认定 “公钥确实属于此人”的机构或者个人。

公钥注册者将自己的公钥上传给CA,CA利用自己的私钥对注册者的公钥进行数字签名,生成一个包含CA数字签名和注册者公钥的证书文件,放在CA的服务器上,消息发送者(公钥使用者)通过下载证书,并且利用CA的公钥解密得到接收者(公钥注册者)的公钥,然后利用接收者的公钥加密消息发送给接收者。

证书的使用
证书的使用

这样攻击者即使在第2步或者第4步进行拦截篡改,那么Bob收到的消息将不能使用其私钥进行解密,无法到达篡改的目的。

iOS签名机制

iOS签名机制的作用就是保证安装到手机的App都是经过Apple官方认证的。

iOS签名机制
iOS签名机制

我们用来Mac来打包的iOS程序

首先会利用Mac的私钥对程序代码进行签名。

生成Mac公钥
生成Mac公钥

然后通过钥匙串生成Mac公钥,上传至Apple开发者中心申请证书,就是将Mac的公钥交给Apple,Apple在后台使用Apple的私钥对Mac的公钥进行数字签名,生成.cer证书。证书存放在.mobileprovision文件中,此外还包含设备信息,appid和权限信息等。再通过Apple的私钥进行签名,将签名信息也存放在.mobileprovision文件中。

上传给Apple的时候Apple会通过Apple的公钥验证.mobileprovision中的数字签名,然后利用Apple的公钥验证解密证书获取Mac的公钥,利用Mac的公钥验证程序代码。

Apple的公钥从刚出厂就存放在每一台iPhone或者iPad的设备中。

我们从App Store中下载app通常没用.mobileprovision文件,是因为App Store中下载的app已经经过Apple验证了,就不需要在重复验证.mobileprovision了。

笔记来自 www.520it.com 小码哥iOS逆向

Comments

添加新评论