none
C# 加密和数字签名的问题 RRS feed

  • 问题

  •     在一个项目中,要求的加密方式如下:

        对报文进行数字签名,采用W3C颁布的XML数字签名规范(即:W3C XML signature recommendation on 12 February 2002)进行加签处理,其中:采用C14N规范对报文进行规范化;签名类型为封外加签(Enveloping Signature),即:<Signature> 元素中包含了进行数字签名的元素,而被签名元素为 <Signature> 元素的子元素;签名证书遵循X.509 V3标准;摘要算法采用sha-1;签名算法采用RSA。

       请问该如何理解这句话呢?用什么来实现呢?





     
    2009年6月5日 0:54

答案

  • hi,
        我曾经有一篇文章介绍WSE3.0的安全实现机制和过程的。你可以参考一下。
    【2】.  安全基本概念

        介绍完WSE3.0的一些基本概念和特性。我们再来熟悉一下常见加密技术、密钥和证书。

        (1)加密技术,为什么要使用加密技术,主要是为了实现一下目的:

        a) 机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将明文转换为密文,并使用相应的解密算法将密文转换回明文。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。
        b)数据完整性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。
       c)身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。

       (2)密钥和证书:
        非对称加密使用公钥/私钥对。对于使用私钥加密的数据,只能使用相应的公钥进行解密,反之亦然。(参考MSDN)

       (3)简单介绍一下常见的加密手段如下:

       

    表 1: .NET Framework 为其提供现成实现类的算法。

    对称算法 非对称算法 哈希算法

    DES(数据加密标准)

    DSA(数字签名算法)

    HMAC SHA1(使用 SHA1 哈希算法且基于哈希的消息身份验证代码)

    TripleDES(三重数据加密标准)

    RSA

    MAC Triple DES(使用 Triple DES 的消息身份验证代码)

    Rijndael

     

    MD5

    RC2

     

    SHA1、SHA256、SHA384、SHA512(使用各种哈希大小的安全哈希算法)

        a。私钥加密算法:使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密并不能实现数据完整性,即防止数据被更改;也无法完成对身份的验证,即确保数据发自特定的一方。.NET 提供以下实现类以提供对称的密钥加密算法:

    DESCryptoServiceProvider

    RC2CryptoServiceProvider

    RijndaelManaged

    TripleDESCryptoServiceProvider

     


        b.共钥加密:公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证.NET 通过抽象基类 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非对称(公钥/私钥)加密算法:

    DSACryptoServiceProvider

    RSACryptoServiceProvider


       c.哈希值:哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。.NET Framework 提供以下实现数字签名算法的类:

    NET 提供了下列哈希算法:

    SHA1SHA256、SHA384、SHA512

    MD5

    HMACSHA(加密的哈希算法)

    MACTripleDES(加密的哈希算法


        d.数字签名:数字签名验证发送方的标识并保护数据的完整性。事实上数字签名是基于以上各种加密技术组合的解决方案。一个基本的数字签名方案可能有如下步骤:双方各自生成一个公钥/私钥对。双方交换他们的公钥。双方生成一个用于对称加密法的私钥,并使用该对称私钥加密要发送的消息。生成加密后消息的哈希值。用对方的共钥加密对称私钥和哈希值(组合密文即为签名),并将该签名附加在消息主体的密文后发送给对方。

       以上知识简单的加密算法的简单介绍,具体大家可以查看相关的安全和加密方面的书籍资料。这里简单介绍是为了更好第理解WSE3.0的安全机制的实现。

       文章链接是:
    WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发
    WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理
    WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发
       有参考代码,当时是为了WCF学习,准备的先遣文章,可能对你有参考价值吧。Sheng Jiang 蒋晟提供的参考资料很好.NET基本实现了目前主流的加密算法,你基本可以直接使用。不过PKI和证书管理机构都需要自己安装服务器或者利用第三方证书机构了。


    you have a dream,you gonna protect it! http://www.cnblogs.com/frank_xl
    • 已标记为答案 xinggg22 2009年6月5日 3:01
    2009年6月5日 2:25
    版主

全部回复

  • hi,
        我曾经有一篇文章介绍WSE3.0的安全实现机制和过程的。你可以参考一下。
    【2】.  安全基本概念

        介绍完WSE3.0的一些基本概念和特性。我们再来熟悉一下常见加密技术、密钥和证书。

        (1)加密技术,为什么要使用加密技术,主要是为了实现一下目的:

        a) 机密性。确保数据的保密性。机密性通常是使用加密实现的。可以使用加密算法(使用加密密钥)将明文转换为密文,并使用相应的解密算法将密文转换回明文。对称加密算法使用相同的密钥进行加密和解密,而非对称算法则使用公钥/私钥对。
        b)数据完整性。确保数据免受意外或者故意(恶意)的修改。完整性通常是由消息身份验证代码或哈希值提供的。哈希值是从数据序列导出的固定长度的数值。哈希值用于验证通过非安全通道传送的数据的完整性。可以将收到的数据的哈希值与传送时数据的哈希值进行比较,以确定数据是否被篡改。
       c)身份验证。保证数据来自某一方。数字证书用于提供身份验证。数字签名通常应用于哈希值,因为这些值比它们所代表的源数据小得多。

       (2)密钥和证书:
        非对称加密使用公钥/私钥对。对于使用私钥加密的数据,只能使用相应的公钥进行解密,反之亦然。(参考MSDN)

       (3)简单介绍一下常见的加密手段如下:

       

    表 1: .NET Framework 为其提供现成实现类的算法。

    对称算法 非对称算法 哈希算法

    DES(数据加密标准)

    DSA(数字签名算法)

    HMAC SHA1(使用 SHA1 哈希算法且基于哈希的消息身份验证代码)

    TripleDES(三重数据加密标准)

    RSA

    MAC Triple DES(使用 Triple DES 的消息身份验证代码)

    Rijndael

     

    MD5

    RC2

     

    SHA1、SHA256、SHA384、SHA512(使用各种哈希大小的安全哈希算法)

        a。私钥加密算法:使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密并不能实现数据完整性,即防止数据被更改;也无法完成对身份的验证,即确保数据发自特定的一方。.NET 提供以下实现类以提供对称的密钥加密算法:

    DESCryptoServiceProvider

    RC2CryptoServiceProvider

    RijndaelManaged

    TripleDESCryptoServiceProvider

     


        b.共钥加密:公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证.NET 通过抽象基类 (System.Security.Crytography.AsymmetricAlgorithm) 提供下列非对称(公钥/私钥)加密算法:

    DSACryptoServiceProvider

    RSACryptoServiceProvider


       c.哈希值:哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。.NET Framework 提供以下实现数字签名算法的类:

    NET 提供了下列哈希算法:

    SHA1SHA256、SHA384、SHA512

    MD5

    HMACSHA(加密的哈希算法)

    MACTripleDES(加密的哈希算法


        d.数字签名:数字签名验证发送方的标识并保护数据的完整性。事实上数字签名是基于以上各种加密技术组合的解决方案。一个基本的数字签名方案可能有如下步骤:双方各自生成一个公钥/私钥对。双方交换他们的公钥。双方生成一个用于对称加密法的私钥,并使用该对称私钥加密要发送的消息。生成加密后消息的哈希值。用对方的共钥加密对称私钥和哈希值(组合密文即为签名),并将该签名附加在消息主体的密文后发送给对方。

       以上知识简单的加密算法的简单介绍,具体大家可以查看相关的安全和加密方面的书籍资料。这里简单介绍是为了更好第理解WSE3.0的安全机制的实现。

       文章链接是:
    WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发
    WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理
    WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发
       有参考代码,当时是为了WCF学习,准备的先遣文章,可能对你有参考价值吧。Sheng Jiang 蒋晟提供的参考资料很好.NET基本实现了目前主流的加密算法,你基本可以直接使用。不过PKI和证书管理机构都需要自己安装服务器或者利用第三方证书机构了。


    you have a dream,you gonna protect it! http://www.cnblogs.com/frank_xl
    • 已标记为答案 xinggg22 2009年6月5日 3:01
    2009年6月5日 2:25
    版主
  •    谢谢你的回答。
       有些细节问题需要问你,不知道如何方便联系你?QQ/MSN?
    2009年6月5日 3:41
  •    hi,
      你可以加这个msn群:group535993@msnzone.cn。分布式技术爱好者同盟。有问题可以一起讨论~
    you have a dream,you gonna protect it! http://www.cnblogs.com/frank_xl
    2009年6月5日 4:54
    版主