哈希和数字签名(Windows 应用商店应用)

哈希

加密哈希函数获取任意长度的数据块并返回固定大小的位字符串。哈希函数通常在对数据进行签名时使用。由于大多数公钥签名操作是计算密集型的操作,因此对消息哈希进行签名(加密)比对原始消息进行签名通常更高效。以下过程显示了一个常用的简化方案:

  • Alice 使用受信任的证书颁发机构创建一个密钥对、保留她的私钥并发布她的公钥。
  • Alice 创建一个消息、对该消息进行哈希处理、使用她的私钥对哈希进行签名,然后将该(未加密)消息和签名发送给 Bob。
  • Bob 检索 Alice 的公钥并解密签名以检索 Alice 的哈希。
  • Bob 对他从 Alice 收到的消息进行哈希处理并将他计算的哈希与解密的哈希进行比较。如果哈希相同,则 Bob 更加清楚地确定来自 Alice 的消息未被改变。

请注意,Alice 发送了一个未加密的消息。只对哈希进行加密。该过程只能确保原始消息未经修改,以及消息哈希是由对 Alice 的私钥(推测是 Alice)具有访问权限的人进行的签名,后者是通过使用通过使用 Alice 的公钥来实现的。

你可以使用 HashAlgorithmProvider 类枚举可用的哈希算法并创建一个 CryptographicHash 值。

数字签名为等同于私钥消息验证代码 (MAC) 的公钥。但是 MAC 使用私钥使消息接受者能够验证消息在传输期间是否尚未改变,签名使用私钥/公钥对。

数字签名

数字签名为等同于私钥消息验证代码 (MAC) 的公钥。但是 MAC 使用私钥使消息接受者能够验证消息在传输期间是否尚未改变,签名使用私钥/公钥对。

由于大多数公钥签名操作是计算密集型的操作,因此对消息哈希进行签名(加密)比对原始消息进行签名通常更高效。发送者创建消息哈希,并且发送签名和(未加密)消息。接收者计算该消息上的哈希,解密签名并将解密的签名计算为哈希值。如果两者匹配,则接收者可以更加清楚地确定该消息确实来自发送者并且传输期间并未改变。

签名通过发送者的公钥只能确保原始消息未被改变以及消息哈希是由对私钥有访问权限的某个人进行的签名。

你可以使用 AsymmetricKeyAlgorithmProvider 对象枚举可用的签名算法以及生成或导入密钥对。你可以在 CryptographicHash 类上使用静态方法对消息进行签名或验证签名。

相关主题

MAC、哈希以及签名

采用 C# 或 Visual Basic 的 Windows 应用商店应用的路线图