传输过程

PGP安全协议

  • 使用Hash函数对消息求摘要,记为H(M)H(M)
  • 对消息摘要进行签名,记为sig(H(M))sig(H(M))
  • 将该摘要和原消息连接作为发送的消息,记为sig(H(M))Msig(H(M)) || M
  • 对该发送的消息进行压缩,记为Z(sig(H(M))M)Z(sig(H(M)) || M)
  • 对该压缩消息用会话**KsK_s进行加密,记为ECKs(Z(sig(H(M))M))EC_{K_s}(Z(sig(H(M)) || M))
  • 将该会话**用公钥KUbKU_b进行加密,记为EPKUb(Ks)EP_{KU_b}(K_s)
  • 将加密后的会话**与加密后的压缩消息连接,并发送给Bob,记为EPKUb(Ks)ECKs(Z(sig(H(M))M))EP_{KU_b}(K_s) || EC_{K_s}(Z(sig(H(M)) || M))

解密验证过程

  • 分离出EPKUb(Ks)EP_{KU_b}(K_s)ECKs(Z(sig(H(M))M))EC_{K_s}(Z(sig(H(M)) || M))
  • 用公钥对应的私钥KUaKU_aEPKUb(Ks)EP_{KU_b}(K_s)进行解密,得到会话**KsK_s
  • 利用该会话**KsK_sECKs(Z(sig(H(M))M))EC_{K_s}(Z(sig(H(M)) || M))进行解密,得到压缩后的Z(sig(H(M))M)Z(sig(H(M)) || M)
  • 对压缩的消息进行解压,得到sig(H(M))Msig(H(M)) || M
  • 分离出签名sig(H(M))sig(H(M))和消息MM
  • 对签名进行验证:直接利用签名验证算法进行验证;或对于RSA,根据签名求出H(M)H(M)后与通过MM求出的H(M)H(M)进行比较以完成验证。

一些问题

Q:为何先压缩再加密?
  由于压缩的实质就是将有序的消息进行无序化处理,而加密的过程也是将消息进行无序化处理。因此,先加密再压缩是在无序的基础上变更无序,没有什么实质性作用,可能原来10G的文件,还是10G。但是若先压缩再加密,就可能使得原来10G的文件变为5G,因此传输的消息将变少。
Q:为何签名的验证有两种方式?
  对于一般的签名过程,如ElGmalDSAElGmal、DSA模式等,直接使用既定的签名验证步骤即可,因为传输的是不直接包含H(M)H(M)(γ,δ)(\gamma,\delta),验证的也是与H(M)H(M)无关的γ\gamma,因此不需要求H(M)H(M)来进行对比。而对于RSA的签名验证,验证的对象就是签名的本身即H(M)H(M),因此需要求出H(M)H(M)后进行对比完成验证。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-12
  • 2021-08-24
  • 2021-09-26
  • 2021-08-11
  • 2021-09-21
猜你喜欢
  • 2022-12-23
  • 2021-07-04
  • 2021-09-08
  • 2021-08-03
  • 2021-05-17
  • 2022-01-13
  • 2021-04-20
相关资源
相似解决方案