ios 签名原理

## RSA

### 获取公私密钥

1. 生成公私密钥 pub和priv

    >>> import rsa

    >>> (pubkey, privkey) = rsa.newkeys(512)

2. 读入公私密钥文件

    >>> import rsa

    >>> with open('private.pem', mode='rb') as privatefile:

    ...    keydata = privatefile.read()

    >>> privkey = rsa.PrivateKey.load_pkcs1(keydata)

### 加密和解密

    # 公钥加密,私钥解密

    >>> import rsa

    >>> (bob_pub, bob_priv) = rsa.newkeys(512)

    >>> message = 'hello Bob!'.encode('utf8')

    >>> crypto = rsa.encrypt(message, bob_pub)

    >>> message = rsa.decrypt(crypto, bob_priv)

    >>> print(message.decode('utf8'))

    hello Bob!

### 签名和验证

    # 私钥签名,公钥验证

    >>> (pubkey, privkey) = rsa.newkeys(512)

    >>> message = 'Go left at the blue tree'

    >>> signature = rsa.sign(message, privkey, 'SHA-1')

    >>> rsa.verify(message, signature, pubkey)

    True

## ios 签名

1. mac电脑本地生成公私密钥 mac_priv_l, mac_pub_l

2. 苹果公司有一对公私密钥 apple_priv, apple_pub。私钥保存在苹果服务器,公钥保存在ios手机上

3. 申请证书:把公钥 mac_pub_l 传到苹果后台,用苹果后台里的私钥 apple_priv 去签名公钥 mac_pub_l。得到一份数据包含了公钥 mac_pub_l 以及其签名,把这份数据称为证书。

4. ipa签名:在开发时,编译完一个 APP 后,用本地的私钥 mac_priv_l 对这个 APP 进行签名,同时把第三步得到的证书一起打包进 APP 里,安装到手机上。

5. 安装ipa:在安装时,iOS 系统取得证书,通过系统内置的公钥 apple_pub,去验证证书的数字签名是否正确。

6. 安装ipa:验证证书后确保了公钥 mac_pub_l 是苹果认证过的,再用公钥 mac_pub_l 去验证 APP 的签名,这里就间接验证了这个 APP 安装行为是否经过苹果官方允许。

这里只验证安装行为,不验证APP 是否被改动,因为开发阶段 APP 内容总是不断变化的,苹果不需要管。

这一步保证了:

1. mac_pub_l 是经过苹果认证的,合法开发者所拥有的公钥

2. 安装到手机上的ipa包,经过了开发者的公私钥验证,是完整的安装包

3. 安装包不需要传到苹果服务器,可以直接安装到手机上

你可能感兴趣的:(ios 签名原理)