关于公钥私钥是否可以互相加解密的理解(附苹果开发者证书配置时非对称加密算法的应用)

查资料的时候发现很多人有疑惑,公钥和私钥到底哪个是用来加密,哪个是用来解密的,是否可以公钥加密私钥解密,同时也可以私钥加密公钥解密呢?针对这一问题,说下自己的理解。

首先要明确两个问题:

(1)既可以公钥加密私钥解密,也可以私钥加密公钥解密;

(2)加密解密和签名验证是两个不同的概念。

 

(一)先来说加密解密:需要同时使用公钥和私钥的加密算法是非对称加密,最常见的便是RSA。

举例说明非对称加密:如果A想要给B秘密的发一条信息,只需要B创建一套公钥(盒子)和私钥(钥匙),盒子可以随意分发,但是钥匙只能B自己所有,当A想要给B发信息时,只需要把信息(纸条)通过B的公钥加密(放入盒子里锁上),再由B用私钥(钥匙)进行解密(打开盒子),即可获取A发送的信息。此时如果C想要截取信息,但是由于没有B的私钥,C即使拿到了信息也无法解密(只有盒子没有钥匙),从而保证了数据的安全性。

那么B是否可以通过私钥加密信息,然后由A使用公钥解密信息呢?从原理上讲,是可以的。 非对称密钥是可以用于双向加解密的。但是我们为什么不这么用呢,很好理解,因为所谓公钥,是公开的,不只A一个人拥有,因此虽然A能够正常读取到信息,但是其他人也可以解密该条信息,从而无法保证信息的安全性。但是签名验证就不同了。

 

(二)签名验证:用私钥进行签名,用公钥进行验证,从而保证信息来源是私钥拥有者。

举例说明:A想要让B确认某条信息是由自己发出的,先将自己的公钥发送给B,然后用自己的私钥对信息进行签名并发送给B(比如将字符串X用A的私钥加密生成Y,将X和Y以及信息都发送给B),B收到信息后用A的公钥对签名进行验证,用A的公钥解密Y得到Z,如果Z=X,则验证成功,说明信息是由A发布的。

 

(三)最后借用百度百科的例子来说明加密和签名的结合应用:

 

假如现在 Alice 向 Bob 传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为:

1.Alice 准备好要传送的数字信息(明文);

2.Alice 对数字信息进行哈希运算,得到一个信息摘要;

3.Alice 用自己的私钥对信息摘要进行加密得到 Alice 的数字签名,并将其附在数字信息上;

4.Alice 随机产生一个加密密钥,并用此密码对要发送的信息进行加密,形成密文;

5.Alice 用 Bob 的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES 密钥连同密文一起传送给Bob;

6.Bob 收到 Alice 传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 Alice随机产生的加密密钥;

7.Bob 然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃;

8.Bob 用 Alice 的公钥对 Alice 的数字签名进行解密,得到信息摘要;

9.Bob 用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要;

10.Bob 将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。

 

(四)苹果开发者证书配置时非对称加密算法的应用

我们在进行IOS开发时,配置证书的过程其实也是使用了非对称加密算法:

  1. 我们在配置证书前,需要先在MAC上通过keychain生成CSR(Certificate Signing Requese)文件,该文件包含开发者身份信息和开发者电脑的公钥,而私钥始终保存在MAC中,用于签名本机对外发布的APP
  2. 接下来将该CSR文件上传至APPLE DEVELOPER网站,苹果会用苹果的私钥对其进行签名(授权),从而生成证书
  3. 我们在进行APP打包时,会使用开发者的私钥对应用进行签名
  4. 同时被苹果签名的证书(经过苹果私钥签名、并含有开发者公钥)会包含在描述文件(Provisioning File)中,并在应用被安装时拷贝到IOS设备中
  5. IOS设备中含有苹果的公钥,可以对证书进行验证,证明该应用得到了苹果的授权
  6. 接下来IOS设备会通过证书中开发者的公钥对APP的签名进行验证

 

但是我认为苹果对于APP的签名和验证不止于此,因为我们之前的APP存在着一台电脑打包的IPA在另一台电脑使用同样证书发布过IPA后就不能使用的情况。如果对签名的验证都是在IOS设备本地执行的,即使APPLE DEVELOPER上的证书发生了变化,也不应该影响到APP的使用。因此我认为苹果还会在打开APP时将本地的签名使用网站证书中的公钥进行验证,如果失败则会闪退。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值