作者:Edison Z
链接:https://www.zhihu.com/question/22153061/answer/26238013
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在公钥密码体制里面,密钥被分为了私钥和公钥两个部分,最出名的是RSA所形成的PKCS标准,由于密钥不对称,在原本可以支持加密的基础上,又支持了一种认证的方式,就是签名。
其实签名就是加密的逆过程,加密是用公钥加密,私钥解密,这样就只有私钥拥有者才可以查看明文,其他人都可以给私钥拥有者发信息。一般来说,密钥对是由私钥拥有者产生的,自己保留私钥,公钥公开出来。
如果反过来,用私钥进行加密,那么公钥也可以解密,这个就叫签名。因为私钥只有私钥拥有者一个人知道(不泄露的前提下),但是公钥是可以公开出来的,大家可以验证是不是由正确私钥加密的(这里可以简单的考虑为固定了一个明文签名,这样只有私钥拥有者的签名大家才可以正确解密得到这个明文,其他人是无法伪造的)。至于怎么签名,是对整个程序签名还是片段签名,这个就是基于实际的 考虑。
在实际中应用,由于还要考虑到重放攻击等,一般来说是有一个完整的证书体制,比较出名的就是rsa基础上建立的PKCS。证书本身的构成是比较复杂的,而且需要一个大家公认的第三方来维护证书,当然,在苹果的体制下,自然这个第三方就是苹果公司,他为每一个开发者维护了每个开放者的证书(当然包括身份信息,密钥对等等很多信息),也为自己维护了一个机构证书。
如果按我判断,上传的时候利用开发者的证书对程序签名上传,apple验证签名的有效性,如果有效,apple用机构证书再次对程序签名。
用户下载的时候,会验证是否是apple签名的。至于如何签名,这个很难说,很可能是对每一个程序页都签名了,这样可以保证程序完全无法被修改