文章目录
想要了解iOS的签名机制,需要先对 加密解密有个简单的了解,再是 单向散列函数,然后是 数字签名,再是 证书,最后就是 iOS签名机制了
加密解密
加密主要分为:
1.对称加密:加密用的密钥和解密用的密钥是相同的
2.非对称加密:也叫公钥加密,加密用的密钥和解密用的密钥是不同的
常见对称加密
1.DES
DES是一种将64bit明文加密成64bit密文的对称密码算法,密钥长度是56bit,规格上来说,密钥长度是64bit,但每隔7bit会设置有个用于错误检查的bit,因此密钥长度实质上是56bit
缺点:由于DES每次只能加密64bit的数据,遇到比较大的数据,需要对DES加密进行迭代,目前已经可以在短时间内破解,所以不建议使用
3DES
3DES就是对明文执行3次DES加密,对密文3次DES解密
AES
取代DES成为新标准的一种对称加密算法,在2000年选择Rijindael算法作为AES的实现,目前AES已经逐步取代DES、3DES成为首选的对称密码算法
非对称加密(公钥加密)
公钥加密中密钥分为加密密钥和解密密钥2中,它们并不是同一种密钥,公钥密码也被称为非对称密码
1.加密密钥:一般是公开的,因此称为公钥
2.解密密钥:由消息接收者自己保管,不能公开,因此称为私钥
公钥和私钥是一一对应的,是不能单独生成的,一对公钥和私钥称为密码对
由公钥加密的密文,必须使用与该公钥对应的私钥才能解密
RSA
目前使用最广泛的公钥密码
由于对称密码加密解密都只有一个,所以给出去的密码也可以用来加密和解密,如果密码在发送给目标的时候,被第三方截获,那麻烦就大了,所以对于对称密码来说,密钥的配送是个大问题,但是他加密速度比公钥加密快
而公钥加密可以把公钥发给公众, 因为私钥只在自己手里,不会造成第三方假冒你发送给目标假的内容
混合密码
将对称密码和公钥密码的优势相结合
网络上的密码通道所有的SSL/TLS都运用了混合密码系统
会话密钥
.为本次通信随机生成的临时密钥
.作为对称密码的密钥,用于加密消息提高速度
加密步骤(发送消息)
1.首先,消息发送者要拥有消息接收者的公钥
2.生成会话密钥,作为对称密码的密码,加密消息
3.用消息接受者的公钥,加密会话密码
4.把2、3生成的结果一并发给接受者
加密步骤
单向散列函数(哈希函数)
1.可以根据消息内容计算出散列值
2.根据任意长度的消息计算出固定长度的散列值
3.计算速度快,能快速计算出散列值
4.消息不同,散列值不同
5.具有单向性(不可逆)
作用:
1.防止数据被篡改(有一点不同的内容生成的散列值都会不同)
常见的哈希函数
1.MD4、MD5(产生128bit的散列值,已经不安全)
2.SHA-1(产生160bit的散列值,已经不安全)
3.SHA-2(SHA-256、SHA-384、SHA-512散列长度分别是256bit、384bit、512bit)
4.SHA-3(全新标准)
数字签名
数字签名就是公钥加密反着来,非对称加密一般是公钥加密、私钥解密,数字签名就是用私钥加密、公钥解密
项目 | 私钥 | 公钥 |
---|---|---|
公钥密码 | 接收者解密时候使用 | 发送者发送时使用 |
数字签名 | 签名者生成签名时使用 | 验证者验证签名时使用 |
谁持有密码 | 个人持有 | 任何人都可以持有 |
由于用上面说的混合密码加密,可能存在第三方拿到会话密钥,把会话密钥加密后的内容解密后,再进行篡改,再用会话密码加密发给接收者,这样接收者拿到的数据就是一个假数据
所以用数字签名和单向散列函数配合使用可以验证发送的内容是否被篡改过
数字签名使用
用这种方式虽然可以验证数据是否被篡改过,但是仍然没有解决中间人攻击问题
证书
防止中间人攻击,证书里有姓名、邮箱等个人信息,以及此人的公钥,并由认证机构(CA)施加数字签名
1.Bob生成密钥对
2.Bob在认证机构注册自己的公钥
3.认证机构用自己的私钥对Bob的公钥进行签名,这就是证书
4.Alice得到带有认证机构的数字签名的Bob的公钥
5.Alice用认证机构的公钥验证数字签名、确认Bob的公钥的合法性
6.Alice用公钥加密消息并发给Bob
7.Bob用自己的私钥解密秘闻得到消息
这样子中间人就无法将Bob的公钥换成自己的公钥已达到变成隐藏中间人获取它们之间信息的目的
iOS签名机制
mac设备上有mac私钥和mac公钥
Apple服务器上有Apple的私钥
ios设备上有Apple的公钥
iOS签名机制过程
生成mac设备的公私钥:mac电脑->钥匙串访问->证书助理->从证书颁发机构请求证书。。
生成.certSigingRequest文件,该文件就是mac设备的公钥
获得证书: Apple开发者网站->Certificates下的All->点击±>choseFile上传mac公钥选择证书类型(开发者证书、发布证书)->创建证书->创建成功(.cer就是证书)
.cer就是利用Apple后台的私钥对mac设备的公钥进行签名后的证书文件
生成moblieProvision:Apple开发者网站->previsioning Profile下的All->iOS App Development -> AppStore -> 选择AppId -> 选择devices -> 选择证书 -> 生成成功(.moblieprovision)
从appStore下载的app验证流程会简单一些:如下