iOS逆向-签名机制

学习路线

学前须知

image.png
如何防止被窃听?
image.png
如何加解密
image.png

密码的类型

根据秘钥的使用方法,可以将密码分为了两类

对称密码

对称密码中,加解密使用的秘钥是相同的


image.png
非对称加密(公钥密码)
image.png

对称密码

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


image.png

DES

image.png

*DES是一种将64bit明文加密成64bit密文的对称密码算法,密钥长度是56bit
*规格上来说,密钥长度是64bit,但每隔7bit会设置一个用于错误检查的bit,因此,密钥长度实质上是56bit
*由于DES每次只能加密64bit的数据,遇到比较大的数据,需要对DES加密进行反复迭代
*目前已经可以被短时间内破解,不建议使用

3DES

*3DES,将DES重复3次所得到的一种密码算法,也叫做3重DES
*目前还是被一些银行机构使用,但是处理速度不高,安全性逐渐暴露问题


image.png

三个密钥都不同的,俗称DES-EDE3
如果所有的密钥都是用同一个,则结果与普通的DES是等价的
如果密钥中两个相同,称为DES-EDE2


image.png

AES

*取代DES成为新标准的一种对称密码算法
*AES的密钥长度有128、192、256bit三种
*目前AES,已经逐步取代DES、3DES,成为首选的对称密码算法
*一般来说,我们也不应该去使用任何自制的密码算法,而是应该使用AES,它经过了全世界密码学家所进行的高品质验证工作

密钥配送问题

*在使用对称密码时候,会遇到密钥配送问题
*假设,A将使用对称密码加密过的消息发给B,只有将密钥也给B,B才能完成解密,在发送密钥的过程中,可能会被E窃听,最后E也能完成解密


image.png
如何解决密钥配送问题
  • 事先共享密钥
  • 密钥分配中心
    *Diffie-Hellman密钥交换
    *公钥密码

公钥密码(非对称加密)

公钥密码中,密钥分为加密密钥、解密密钥两种,他们并不是同一密钥
1、加密密钥,一般是公开的,因此该密钥称为公钥(public key)
2、解密密钥,由消息接受者自己保管的,不能公开,因此也称为私钥(peivate key)
3、公钥和私钥是一一对应的,不能单独生成的,一对公钥和密钥统称为密钥对(key pair)
4、由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
5、由私钥加密的密文,必须使用与该私钥对应的公钥才能解密


image.png

解决密钥配送问题

*由消息的接受者,生成一堆公钥、私钥
*将公钥发送给消息的发送者
*消息的发送者使用公钥加密消息


image.png

RSA

*目前使用最广泛的公钥密码算法是RSA
*RSA的名字,是由它的3位开发者的姓氏首字母组成

混合密码系统(Hyrid Cryptosystem)

对称密码的缺点:不能很好的解决密钥配送问题
公钥密码的缺点:加解密速度比较慢
混合密码系统,是将对称密码和公钥密码的优势相结合的方法
*解决了公钥密码速度的问题
*通过公钥密码解决了对称密码的密钥配送问题
网络上的密码通信所用的SSL/TLS都运用了混合密码系统

混合密码-加密

会话密钥(session key)

*为本次通信随机生成的临时密钥
*作为对称密码的密钥,用于加密消息,提升速度

加密步骤(发送消息)

1、首先,消息发送者要拥有消息发送者的公钥
2、会话生成密钥,作为对称密码的密钥,加密消息
3、用消息接受者的公钥,加密会话密钥
4、将前2步生成的加密结果,一并发给消息接受者
#######发出去的内容包括
*用会话密钥加密的消息(对称密码)
*用公钥加密的会话密钥(公钥密码)


image.png

混合密码-解密

解密步骤(收到消息)

*消息接受者用自己的私钥解密出会话密钥
*再用第一步解密出来的会话密钥,解密消息


image.png

混合密码-加解密流程

A>>>>>>>>>B

发送过程,加密过程

*B先生成一对公钥、私钥
*B把公钥共享给A
*A随机生成一个会话密钥(临时密钥)
*A用会话密钥加密需要发送的消息(使用的是对称密码加密)
*A用B的公钥加密会话密钥(使用的是公钥密码加密,也就是非对称密码加密)
*A把第4、5步的加密结果,一并发送给B

接受过程,解密过程

*B利用自己的私钥解密会话密钥(使用的是公钥密码解密,也就是非对称密码解密)
*B利用会话密钥解密发送过来的消息(使用的是对称密码解密)

单项散列函数

单项散列函数,可以根据消息内容计算出散列值
散列值的长度和消息的长度无关,无论消息是1bit、10M、100G,单项散列函数都会计算出固定长度的散列值


image.png

image.png

单项散列函数特点

*根据任意长度的消息,计算出固定长度的散列值
*计算速度快,能快速计算出散列值
*消息不同,散列值也不同
*具备单向性


image.png

image.png

单项散列函数,又称为消息摘要函数,哈希函数
输出的散列值,也称为消息摘要、指纹

常见的几种单项散列函数

MD4/MD5
*产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全
*Mac终端上默认可以使用md5命令
SHA-1
*产生160bit的散列值,目前已经不安全
SHA-2
*SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit
SHA-3
*全新标准

如何防止数据被篡改

image.png

image.png

单向散列函数的应用 – 防止数据被篡改

https://www.realvnc.com/en/connect/download/vnc/

image.png

image.png

单向散列函数的应用 – 口令加密
image.png

数字签名

想想一下


image.png

A发的内容有可能是被篡改的,或者有人伪装成A发消息,或者就是A发的,但她可以否认
问题来了:B如何确定这段消息的真实性?如何识别篡改、伪装、否认?
解决方案
数字签名


在数字签名技术中,有以下2种行为
*生成签名:由消息的发送者完成,通过“签名密钥”生成
*验证签名:由消息的接收者完成,通过“验证密钥”验证


image.png

在公钥密码中,任何人都可以使用公钥进行加密
思考
如何能保证这个签名是消息发送者自己签的?
答案
用消息发送者的私钥进行签名


image.png

在数字签名中,任何人都可以使用公钥验证签名
数字签名和公钥密码

数字签名,其实就是将公钥密码反过来使用


image.png
数字签名的过程
image.png
数字签名的过程-改进
image.png
数字签名-疑惑

思考一下
如果有人篡改了文件内容或者签名内容,会是什么结果?
结果是:签名验证失败,证明内容会篡改

数字签名不能保证机密性?
数字签名的作用不是为了保证机密性,仅仅是为了能够识别内容有没有被篡改

数字签名的作用
确认消息的完整性
识别消息是否被篡改
防止消息发送人否认

数字签名无法解决的问题

要正确使用签名,前提是
用于验证签名的公钥必须属于真正的发送者

如果遭遇了中间人攻击,那么
公钥将是伪造的
数字签名将失效

所以在验证签名之前,首先得先验证公钥的合法性

如何验证公钥的合法性?
证书


image.png

证书(Certificate)

证书,联想的是驾驶证、毕业证、英语四六级证等等,都是由权威机构认证的

密码学中的证书,全称叫公钥证书(Public-key Certificate,PKC),跟驾驶证类似
里面有姓名、邮箱等个人信息,以及此人的公钥
并由认证机构(Certificate Authority,CA)施加数字签名

CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织
有国际性组织、政府设立的组织
有通过提供认证服务来盈利的企业
个人也可以成立认证机构

证书的利用

image.png

证书的注册和下载

image.png

总结

加密解密算法

对称加密

  • 加解密用同一个密钥
  • 加解密速度快
  • 无法解决密钥配送问题

公钥密码

  • 加解密是不同的密钥
  • 加密速度慢
  • 解决密钥配送问题

单向散列函数

  • 根据消息生成固定的长度的散列值
  • 防止消息被篡改

数字签名

  • 用私钥加密消息的散列值,生成密文

证书

  • 利用CA的私钥对其他人的公钥生成数字签名

iOS签名机制

OS签名机制的作用
保证安装到用户手机上的APP都是经过Apple官方允许的

不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤
生成CertificateSigningRequest.certSigningRequest文件
获得ios_development.cer\ios_distribution.cer证书文件
注册device、添加App ID
获得*.mobileprovision文件

对于真机调试,现在的Xcode已经自动帮开发者做了以上操作

思考
每一步的作用是什么?
.certSigningRequest、.cer、.mobileprovision文件究竟里面包含了什么?有何用处?

iOS签名机制-流程图

image.png

iOS签名机制 – 生成Mac设备的公私钥

image.png

image.png

CertificateSigningRequest.certSigningRequest文件
就是Mac设备的公钥

iOS签名机制 – 获得证书

image.png

image.png

image.png

image.png

image.png

image.png

ios_development.cer、ios_distribution.cer文件
利用Apple后台的私钥,对Mac设备的公钥进行签名后的证书文件

iOS签名机制 – 生成mobileprovision

image.png

image.png

image.png

image.png

image.png

image.png
  • CertificateSigningRequest.certSigningRequest文件
    就是Mac设备的公钥
  • .cer文件 证书是苹果私钥,对Mac公钥进行数字签名
  • . mobileprovision 利用苹果私钥,对[.cer证书+devices+AppId+entitlement权限],进行数字签名

iOS签名机制 – 安全检测

image.png

iOS签名机制 - AppStore

image.png

重签名

如果希望将破坏了签名的安装包,安装到非越狱手机上,需要对安装包进行重签名的操作
注意:
安装包中的可执行文件必须经过脱壳,重签名才会有效
.app包内部的所有动态库(.framework、.dylib)、AappExtension(Plugins文件夹,拓展名是appex)、WatchApp(Watch文件夹)都需要重新签名
重签名打包后,安装到设备的过程中,可能需要经常查看设备的日志信息
*程序运行过程中:Window->Devices and Simulators ->View Device Logs
*程序安装过程中:Window->Devices and Simulators ->Open Console

重签名步骤

准备一个embedded.mobileprovision(必须是付费证书产生的,appid、device一定要匹配),并放入.app包中
*可以通过Xcode自动生成,然后再编译后的APP包中找到
*可以去开发者证书网站生成下载

从embedded.mobileprovision文件中提取出entitlements.plist权限文件
*security cms -D -i embedded.mobileprovision > temp.plist
*/usr/libexec/PlistBuddy -x -c 'Print :Entilements' temp.plist > entilements.plist
查看可用证书
*security find-identity -v -p codesigning
对.app内部的动态库、AppExtension等进行签名
*codesign -fs 证书ID xxx.dylib
对.app包进行签名
*codesign -fs 证书ID --entitlements entitlements.plist xxx.app

重签名GUI工具

1、iOS App Signer
https://github.com/DanTheMan827/ios-app-signer
可以对.app重签名打包成ipa
需要再.app包中提供对应的embedded.mobileprovision文件
2、iReSign
https://github.com/maciekish.iResign
可以对ipa进行重签名
需要提供entitlements.plist、embedded.mobileprovision文件的路径

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容