之前面试了很多 iOS 开发工程师,项目做的还可以,但是当聊起证书和签名这些的时候,没有几个能说的头头是道。作为一个iOS 开发工程师,每当你配置各种证书忙的焦头烂额的时候,有没有想过这 TM 到底是为了啥?本文就告诉你这TM 的是为了啥!
Why ?
玩儿苹果的都知道,通常情况下我们喜欢的 APP 是从 AppStore 上下载的。但是,苹果希望在 iOS 平台对第三方 APP 有绝对的控制权,一定要保证每一个安装到 iOS 上的 APP 都是经过苹果官方允许的,怎样保证呢?就是通过签名机制。
非对称加密
通常我们说的签名就是数字签名,它是基于非对称加密算法实现的。对称加密是通过同一份密钥加密和解密数据,而非对称加密则有两份密钥,分别是公钥和私钥,用公钥加密的数据,要用私钥才能解密,用私钥加密的数据,要用公钥才能解密。
简单说一下常用的非对称加密算法 RSA 的数学原理,理解简单的数学原理,就可以理解非对称加密是怎么做到的,为什么会是安全的:
选两个质数p和q,相乘得出一个大整数n,例如 p=61,q=53,n=pq=3233
选 1-n 间的随便一个质数e,例如 e = 17
经过一系列数学公式,算出一个数字d,满足:
a. 通过n和e这两个数据一组数据进行数学运算后,可以通过 n 和 d 去反解运算,反过来也可以。
b. 如果只知道n和e,要推导出d,需要知道p和q,也就是要需要把 n 因数分解。
上述的(n,e)这两个数据在一起就是公钥,(n,d)这两个数据就是私钥,满足用私钥加密,公钥解密,或反过来公钥加密,私钥解密,也满足在只暴露公钥(只知道n和 e)的情况下,要推导出私钥(n,d),需要把大整数n因数分解。目前因数分解只能靠暴力穷举,而n数字越大,越难以用穷举计算出因数p和q,也就越安全,当n大到二进制 1024 位或 2048