RSA加密,数字签名和HAS算法结合例子

情境概述

  • Alice 和 Bob 是通信双方。
  • 目标:确保消息 ( M ) 的机密性、完整性和来源可验证。
  • 使用的技术:RSA 加密、数字签名和 Hash 算法。

双方应持有的密钥

  1. Alice:
    • 私钥\(( d_{A})\) :用来签名消息。
    • 公钥 \((e_{A})\):用来加密消息(如果 Alice 要接收加密消息)。
  2. Bob:
    • 私钥 \(( d_{B})\) :用来解密消息。
    • 公钥 \((e_{B})\):用来加密消息(如果 Bob 要接收加密消息)。

注意:双方的公钥是公开的,任何人都可以获取,而私钥则是保密的,只能由对应的密钥持有者使用。

已知信息

  • Alice 和 Bob 都知道对方的 公钥。即:
    • Alice 知道 Bob 的公钥 \((e_{B})\)
    • Bob 知道 Alice 的公钥 \((e_{A})\)

过程说明

1. Alice 准备消息

  • Alice 要向 Bob 发送一条消息 ( M ),比如: \[ M = \text{"Hello, Bob!"} \]

2. Alice 对消息进行 RSA 加密

  • Alice 使用 Bob 的公钥 \((e_{B})\) 对消息 ( M ) 进行加密,得到密文 ( C ): \[ C = M^{e_{B}} \mod n_{B} \]

    这里,\(( n_{B} )\) 是 Bob 公钥的一个组成部分。

  • 密文 ( C ) 是加密后的消息,只有拥有 Bob 私钥 \(( d_{B})\) 的 Bob 才能解密。

3. Alice 计算消息的 Hash 值并生成数字签名

  • 为了确保消息的完整性和来源,Alice 使用 Hash 算法(如 SHA-256)计算消息 ( M ) 的 Hash 值 ( H (M) ): \[ H(M) = \text{SHA-256}(M) \]

  • 然后,Alice 使用 自己的私钥\(( d_{A})\) 对 Hash 值 ( H (M) ) 进行签名,生成数字签名 ( S ): \[ S = H(M)^{d_{A}} \mod n_{A} \]

    这里,\(( n_{A} )\) 是 Alice 私钥的一个组成部分。

4. Alice 发送加密消息和签名

  • Alice 将加密后的消息 ( C ) 和数字签名 ( S ) 一同发送给 Bob。 \[ \text{发送数据} = (C, S) \]

5. Bob 接收消息和签名

  • Bob 收到 Alice 发送的加密消息 ( C ) 和签名 ( S )。

6. Bob 使用私钥解密消息

  • Bob 使用 自己的私钥 \(( d_{B})\) 解密密文 ( C ),得到原始消息 ( M ): \[ M = C^{d_{B}} \mod n_{B} \]

  • 解密后,Bob 得到原始的消息 \(( M = \text{"Hello, Bob!"} )\)

7. Bob 使用 Alice 公钥验证签名

  • Bob 使用 Alice 的公钥 \((e_{A})\) 对签名 ( S ) 进行验证: \[ H'(M) = S^{e_{A}} \mod n_{A} \]

    这里,( H' (M) ) 是通过公钥解密签名后得到的 Hash 值。

  • 然后,Bob 对收到的消息 ( M ) 使用相同的 Hash 算法计算 Hash 值 ( H (M) ),即: \[ H(M) = \text{SHA-256}(M) \]

8. Bob 验证签名的有效性

  • 如果计算得到的 Hash 值 ( H (M) ) 与通过公钥解密得到的 Hash 值 ( H' (M) ) 相同: \[ H(M) = H'(M) \]

    那么消息 ( M ) 没有被篡改,且确实是由 Alice 发送的,签名有效。

  • 如果 \(( H (M) \neq H' (M) )\),则说明消息可能已被篡改,或者签名无效。

9. Bob 进一步处理消息

  • 如果签名验证成功,Bob 知道消息完整且真实,接下来可以继续处理消息内容(比如显示消息:“Hello, Bob!”)。

总结

在这个过程中,RSA 加密和数字签名共同作用:

  1. RSA 加密:保护消息的机密性,确保只有 Bob(拥有私钥)才能解密消息。
  2. 数字签名:确保消息的完整性和来源,只有 Alice(拥有私钥)才能生成有效的签名,Bob 可以用 Alice 的公钥验证签名。

双方持有的密钥

  • Alice
    • 私钥\(( d_{A})\)
    • 公钥 \((e_{A})\)
  • Bob
    • 私钥 \(( d_{B})\) ,
    • 公钥 \(( e_{B} )\)

双方应知的内容

  • Alice 知道:Bob 的公钥 \((e_{B})\)(用于加密消息)
  • Bob 知道:Alice 的公钥 \((e_{A})\)(用于验证签名)

通过这种方式,RSA 加密保证了消息的机密性,数字签名确保了消息的完整性和来源的真实性。


RSA加密,数字签名和HAS算法结合例子
http://example.com/2024/11/18/RSA加密-数字签名和HAS算法结合例子/
作者
JunBin Liang
发布于
2024年11月18日
许可协议