传输过程

- 使用Hash函数对消息求摘要,记为H(M);
- 对消息摘要进行签名,记为sig(H(M));
- 将该摘要和原消息连接作为发送的消息,记为sig(H(M))∣∣M;
- 对该发送的消息进行压缩,记为Z(sig(H(M))∣∣M);
- 对该压缩消息用会话**Ks进行加密,记为ECKs(Z(sig(H(M))∣∣M));
- 将该会话**用公钥KUb进行加密,记为EPKUb(Ks);
- 将加密后的会话**与加密后的压缩消息连接,并发送给Bob,记为EPKUb(Ks)∣∣ECKs(Z(sig(H(M))∣∣M))。
解密验证过程
- 分离出EPKUb(Ks)和ECKs(Z(sig(H(M))∣∣M));
- 用公钥对应的私钥KUa对EPKUb(Ks)进行解密,得到会话**Ks;
- 利用该会话**Ks对ECKs(Z(sig(H(M))∣∣M))进行解密,得到压缩后的Z(sig(H(M))∣∣M);
- 对压缩的消息进行解压,得到sig(H(M))∣∣M;
- 分离出签名sig(H(M))和消息M;
- 对签名进行验证:直接利用签名验证算法进行验证;或对于RSA,根据签名求出H(M)后与通过M求出的H(M)进行比较以完成验证。
一些问题
Q:为何先压缩再加密?
由于压缩的实质就是将有序的消息进行无序化处理,而加密的过程也是将消息进行无序化处理。因此,先加密再压缩是在无序的基础上变更无序,没有什么实质性作用,可能原来10G的文件,还是10G。但是若先压缩再加密,就可能使得原来10G的文件变为5G,因此传输的消息将变少。
Q:为何签名的验证有两种方式?
对于一般的签名过程,如ElGmal、DSA模式等,直接使用既定的签名验证步骤即可,因为传输的是不直接包含H(M)的(γ,δ),验证的也是与H(M)无关的γ,因此不需要求H(M)来进行对比。而对于RSA的签名验证,验证的对象就是签名的本身即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