iOS逆向基础04-密码学
一. 加密常识
1.1 对称加密和非对称加密
对称加密
- DES:加密标准
- 3DES:加强版DES
- AES:现在的加密标准
iOS系统的加密方式
非对称加密
- ECC(椭圆加密算法,Elliptic Curve Cryptography)推荐
- RSA
- Elgamal
1.2 密钥配送问题
- 事先共享密钥
- 公钥密码(rsa等非对称加密)
1.3 加密方式
- ECB:将每一个数据块单独加密
- CBC:加密每一个数据块,都会与上一个数据块之间有联系.能够保证密文的完整性,任何一个数据块改变了,都会对后面的数据造成破坏.(推荐)
1.4 单向散列函数(hash函数)
- MD5 ---------- 128bit,不安全
- SHA-1---------160bit,不安全
- SHA-2
- SHA-256 -------256bit,安全推荐
- SHA-384 ,,,,,,SHA-512
- 在具体算法的选取上,你只需要记住:对称加密用 AES-CTR、非对称加密用 ECC、散列算法用 SHA256 加盐。这些算法就能够满足大部分的使用场景了,并且在未来很长一段时间内,都可以保持一个较高的安全强度。
二. 证书
- CA机构 : 证书授权中心,是电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
- 证书 : 是CA机构用自己的私钥将用户的公钥进行签名,保证用户的公钥不被篡改.
- CA的数字签名,主要是为了证明你拿到的CA证书确实是CA机构颁发的.
- 服务器申请一个CA证书.
- CA机构拿到服务器的公钥、信息,用hash算法得到一个
信息摘要
并用自己的私钥进行签名.然后把服务器的公钥、信息和签名组合成一个证书给服务器. - 客户端发送请求到服务器,服务器会将自己的公钥、信息返回给客户端,客户端拿到服务器的公钥、信息,用hash算法得到一个
信息摘要
;
然后在CA机构拿到公钥解密CA的证书可以拿到CA认证的服务器的公钥、信息进行hash算法也会得到一个信息摘要
. - 如果两个
信息摘要
是一样的,就说明信息却是来自于真正的服务器,没有中间人攻击.
三. SSL/TLS
3.1 SSL(Secure Sockets Layer 安全套接字协议)的作用
- 机密性:SSL协议使用密钥加密通信数据。
- 可靠性:服务器和客户都会被认证,客户的认证是可选的。
- 完整性:SSL协议会对传送的数据进行完整性检查。
3.2 SSL 基本原理
- 客户端向服务器发送Client Hello 消息,包含随机数、加密方法等参数
- 服务端收到ClientHello消息后,再发送ServerHello消息回应客户端
- 服务器将公钥发送给客户端,客户端通过证书验证服务器的真假性
单向认证完成
- (可选):服务器如果开启了双向认证,那么就需要客户端将自己的证书发送给服务器
- 两端使用协商好的加密算法进行通讯
四. HTTPS
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,https的安全基础是SSL,因此加密的详细内容请看SSL。
五. 中间人攻击
5.1 公钥私钥问题
私钥只有自己知道,公钥可以分发给其他人
- 公钥加密,私钥解密,可以用来传递消息(加密).(任何人都可以用公钥加密东西发给alice,因为只有alice有私钥,所以只有alice能解密)
- 私钥加密,公钥解密,可以用来验证(签名).(alice用私钥加密东西,有alice公钥的就可以解密.如果bob想冒充alice,因为bob不知道alice的私钥,那么bob只能用自己的私钥进行加密,但是别人还是用alice的公钥进行解密,就会出错)
- 传递消息 和 验证签名 是相反的.
5.2 安全隐患
alice要给bob发消息.
需要拿到bob的公钥,加密消息然后发给bob.
bob再用自己的私钥进行解密.
-----warning------
如果alice拿到的公钥不是bob的,而是中间人的呢?
所以,确定拿到的公钥必须是bob的,才是安全的.
这时候就需要CA机构的证书来做安全保障.
六.charles
平时我们总会用charles抓包,只要给手机设置了代理,就能在电脑端看到charles拦击的app和服务器的通讯包,下面就围绕charles来看看iOS逆向相关的东西.
charles官网介绍:
Charles can be used as a man-in-the-middle HTTPS proxy, enabling you to view in plain text the communication between web browser and SSL web server.Charles does this by becoming a man-in-the-middle. Instead of your browser seeing the server’s certificate, Charles dynamically generates a certificate for the server and signs it with its own root certificate (the Charles CA Certificate). Charles receives the server’s certificate, while your browser receives Charles’s certificate. Therefore you will see a security warning, indicating that the root authority is not trusted. If you add the Charles CA Certificate to your trusted certificates you will no longer see any warnings – see below for how to do this.
6.1 charles的使用
- mac端下载一个charles作为手机的代理使用
- 选择安装一个手机或者远端浏览器的证书
安装证书.png
- 手机和电脑连接同一个wifi,点击该wift的设置,配置代理,服务器为电脑的IP地址,端口号为8888
设置代理
- 打开safari输入
chls.pro/ssl
下载charles的证书,打开设置,安装该证书. - 打开charles,就可以看到你app的所有网络请求了.
6.2 charles的原理
为啥charels能拦截app的网络请求呢?
很多人听说https是安全的,自己公司用了https后为啥还能被charles拦截明文请求呢?
- 😂其实是概念用混了.
- https确实是安全的,app和charles通信是安全的,charles和服务器通讯也是安全的.
- 但是app到服务器不是安全的,因为有了
man-in-the-middle
身份的charles这个代理.
简单看下charles的工作过程吧.
- 客户端向服务器发起
HELLO WORLD
的HTTPS请求,客户端使用charles的公钥加密HELLO WORLD
- 因为客户端设置了代理,所以charles接收到请求
- charles使用自己的私钥解密
HELLO WORLD
- 如果服务器没有对客户端做双向认证,那么charles就可以拿着客户端的请求向服务器发送请求
- 服务器将公钥发送给charles
- charles作为中间人,解密服务器的数据然后用自己的私钥加密发送给客户端,客户端使用charles的公钥进行解密.
N. 答疑
- MD5绝对安全吗?
答案是NO,md5为32位,也就是说它能表示的最多的可能为36(26个字母加10个数字)的32次方,而地球上有那么多的东西可以加密.所以有可能不同的东西的MD5值是一样的
- base64是加密方式吗?
base64只是对二进制进行编码解码的方式,不能用来加密. base64依次截取6bit然后用64种字符表示,如果最后为000 000,那么用=表示. 所以base64其实共有65种字符.
- 使用https就安全了吗
https本身是安全的,因为https内置了SSL协议,可以使得两端通讯完全使用的是密文传输.
但是https只是整个通讯环节的一部分,如果没有设置好可能会受到中间人攻击,所以还需要进行单向认证或者双向认证设置,才能更为安全.1.如果客户端没有做认证
黑客可以直接抓包,可以修改通信内容2.如果客户端做了单向认证
黑客可以逆向客户端,并修改客户端的认证方式,然后就可以进行上步的操作所以为了更加的安全,我们可以给传输的数据自己加一次密.这样的话就算有中间人攻击,拿到的却是我们加密过的东西,那么中间人还得再破解一次,相当难了.
- 我们在使用md5的时候,可以自己加盐.(通过服务器下发不同的盐,不同的用户不同的盐)
- hmac: MD5升级版,通过加盐来增强密码强度,盐在用户注册的时候下发,并把每个用户不同的盐存在服务器.(加时间戳,服务器向前验证1分钟,这样黑客破解就只有1分钟)
- 为了防止加密方式被破解,服务器可以用当前时间往前推1分钟然后在本地MD5,判断是否和客户端传过来的一样?如果一样则说明是客户端传过来的值,而不是中间人.