微软消息队列加密

shoushii 2008-12-15 09:14:07
哪位达人能够提供一套微软消息队列安全传输的解决方案:

保密性:帮助保护用户的标识或数据不被读取。

数据完整性:帮助保护数据不被更改。

身份验证:确保数据发自特定的一方。公钥加密还可以提供不可否认性。


至少要包括加密的方式和配置。
...全文
197 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingying729 2011-05-27
  • 打赏
  • 举报
回复
顶,不错
shoushii 2008-12-16
  • 打赏
  • 举报
回复
为了能返还50分,没选择“无满意结贴”。
自己去研究了。
angelzqchen 2008-12-15
  • 打赏
  • 举报
回复

http://www.cnblogs.com/beniao/archive/2008/07/04/1234352.html

这里是原创的地址,在他这三篇文章中没有提到任何与加密相关的信息。
若干天前,我已经向该博主请教。
shoushii 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyq11 的回复:]
参考
http://www.cnblogs.com/dabing/archive/2008/10/30/1322942.html
[/Quote]

http://www.cnblogs.com/beniao/archive/2008/07/04/1234352.html

这里是原创的地址,在他这三篇文章中没有提到任何与加密相关的信息。
若干天前,我已经向该博主请教。
angelzqchen 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 shoushii 的回复:]
引用 7 楼 qwertxp 的回复:
这不就是在说RSA吗?

RSA仅仅是非对称加密中的一种,针对使用对称加密还是非对称加密,应该根据数据大小而言。现在没有确切的证据表明,RSA能否满足4M以上的加密工作,在良好的性能下。

我更想了解的是,数字签名和哈希值在加密中的作用。
也就是我提出的三点应该满足,而不是简单的不顾一切的加密。--这里有稍高的要求。
[/Quote]
UP
shoushii 2008-12-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qwertxp 的回复:]
这不就是在说RSA吗?
[/Quote]
RSA仅仅是非对称加密中的一种,针对使用对称加密还是非对称加密,应该根据数据大小而言。现在没有确切的证据表明,RSA能否满足4M以上的加密工作,在良好的性能下。

我更想了解的是,数字签名和哈希值在加密中的作用。
也就是我提出的三点应该满足,而不是简单的不顾一切的加密。--这里有稍高的要求。
wuyq11 2008-12-15
  • 打赏
  • 举报
回复
参考
http://www.cnblogs.com/dabing/archive/2008/10/30/1322942.html
mengxj85 2008-12-15
  • 打赏
  • 举报
回复
好帖,关注
qwertxp 2008-12-15
  • 打赏
  • 举报
回复
这不就是在说RSA吗?
kingcsx666 2008-12-15
  • 打赏
  • 举报
回复
帮顶
shoushii 2008-12-15
  • 打赏
  • 举报
回复
使用公钥加密还是死要加密就是一个问题,等待达人中……
zhnzzy 2008-12-15
  • 打赏
  • 举报
回复
没有,帮顶,以前只是写过简单的MESSAGEQUEUE
wanghao3616 2008-12-15
  • 打赏
  • 举报
回复
顶 我也想知道
amanizty 2008-12-15
  • 打赏
  • 举报
回复
up~
ws_hgo 2008-12-15
  • 打赏
  • 举报
回复
关注
bjwtufv 2008-12-15
  • 打赏
  • 举报
回复
顶下
shoushii 2008-12-15
  • 打赏
  • 举报
回复
等待高人。。。
shoushii 2008-12-15
  • 打赏
  • 举报
回复
继续潜水研究中……
gang027 2008-12-15
  • 打赏
  • 举报
回复
没有,帮顶
shoushii 2008-12-15
  • 打赏
  • 举报
回复
同志们,给点建议吧。

密有助于防止他人查看数据,它提供了检测数据是否已被修改的方式,同时有助于在非安全信道上提供安全的通信方式。例如,可以使用加密算法对数据进行加密,在加密状态下传输数据,然后由预定的接收方对数据进行解密。如果第三方截获了加密的数据,解密数据是很困难的。

本概述简要介绍了 .NET Framework 支持的加密方法和惯例,其中包括 .NET Framework 3.5 版提供的 ClickOnce 清单、Suite B 以及下一代加密技术 (CNG) 支持。本概述包含以下几节:

加密基元

私钥加密

公钥加密

数字签名

哈希值

随机数生成

ClickOnce 清单

Suite B 支持

下一代加密技术 (CNG) 类

有关加密以及可用于向应用程序添加加密安全性的 Microsoft 服务、组件和工具的信息,请参见本文档“安全性”一节的“Win32 和 COM 开发”。

加密基元
在使用加密的典型场合中,双方(小红和小明)在不安全的信道上通信。小红和小明想要确保任何可能正在侦听的人无法理解他们之间的通信。而且,由于小红和小明相距遥远,因此小红必须确保她从小明处收到的信息没有在传输期间被任何人修改。此外,她必须确保信息确实是来自小明,而不是来自模仿小明的人。

加密用于达到以下目的:

保密性:帮助保护用户的标识或数据不被读取。

数据完整性:帮助保护数据不被更改。

身份验证:确保数据发自特定的一方。公钥加密还可以提供不可否认性。

为了达到这些目的,您可以使用算法和惯例的组合(称作加密基元)来创建加密方案。下表列出了加密基元及它们的用法。

加密基元
用法

私钥加密(对称加密)
对数据执行转换,使第三方无法读取该数据。此类型的加密使用单个共享的机密密钥来加密和解密数据。

公钥加密(不对称加密)
对数据执行转换,使第三方无法读取该数据。此类加密使用公钥/私钥对来加密和解密数据。

加密签名
通过创建对特定方唯一的数字签名来帮助验证数据是否发自特定方。此过程还使用哈希函数。

加密哈希
将数据从任意长度映射为定长字节序列。哈希在统计上是唯一的;不同的双字节序列不会哈希为同一个值。


私钥加密
私钥加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密您的数据,或加密他们自己的数据并声称该数据源自您,因此必须保护密钥不被未经授权的代理得到。

私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法的速度非常快(与公钥算法相比),它特别适用于对较大的数据流执行加密转换。从数学角度而言,非对称加密算法(例如 RSA)在可加密的数据量方面存在限制。对称加密算法一般则没有这些问题。

有一种私钥算法称为块密码,它用于一次加密一个数据块。块密码(例如数据加密标准 (DES)、TripleDES 和高级加密标准 (AES))可将 n 字节的输入块通过加密转换为由加密字节构成的输出块。如果要加密或解密字节序列,必须逐块进行。由于 n 很小(DES 和 TripleDES 为 8 字节;AES 为 16 字节 [默认值]、24 字节或 32 字节),因此如果数据值大于 n,则必须一次加密一个块。如果数据值小于 n,则必须将其扩展为 n 才能进行处理。

有一种简单的块密码称为电子密码本 (ECB) 模式。一般认为,ECB 模式并不安全,因为它并不使用初始化向量初始化第一个纯文本块。对于给定的私钥 k,一个不使用初始化向量的简单块密码会将相同的纯文本输入块加密为相同的密码文本输出块。因此,如果输入纯文本流中存在重复的块,则输出密码文本流中也将存在重复的块。这些重复的输出块会使未经授权的用户察觉数据可能采用了不可靠的加密算法,进而想出可能的攻击模式。因此,ECB 密码模式十分易于分析,因此最终会被他人发现密钥。

基类库中提供的块密码类使用一种称为密码块链 (CBC) 的默认链模式,但您可以根据需要更改此默认设置。

通过使用初始化向量 (IV) 加密第一个纯文本块,CBC 密码克服了与 ECB 密码关联的问题。每个后续纯文本块都会在加密前与前一个密码文本块进行按位“异或”(XOR) 运算。因此,每个密码文本块都依赖于它前面的所有块。采用这种系统时,即使未经授权的用户可能已知道公共消息头,也无法将其用于对密钥进行反向工程。

使用 CBC 密码加密数据时,危及数据安全的一种做法是对每个可能的密钥执行穷举搜索。根据执行加密时使用的密钥大小,即便使用最快的计算机,这种搜索也可能极为耗时,因而此做法并不可行。使用较大的密钥大小将使解密更加困难。从理论上说,加密并不能防止对手检索到加密的数据,但它确实增加了这样做的成本。如果执行穷举搜索需要三个月才能检索到只在几天内有意义的数据,那么穷举搜索方法就并不实用。

私钥加密的缺点是它假定双方已就密钥和 IV 达成协议,并且互相传达了密钥和 IV 的值。一般认为,IV 并不安全,且可以在消息的纯文本中传输。但是,密钥必须对未经授权的用户保密。由于存在这些问题,因此通常将私钥加密与公钥加密配合使用,以秘密地传达密钥和 IV 的值。

假定小红和小明是希望在非安全信道上通信的双方,他们可以按如下方式使用私钥加密:小红和小明都同意对特定的密钥和 IV 应用一种特定的算法(例如 AES)。小红撰写一条消息并创建要在其上发送该消息的网络流。接下来,她使用该密钥和 IV 加密文本,并通过 Internet 发送该文本。她不能向小明发送密钥,但可以发送 IV。小明在收到该加密文本后,可使用预先商定的密钥和 IV 对它进行解密。即使传输的内容被人截获,截获者也无法恢复原始消息,因为他并不知道密钥。在这个方案中,密钥必须保密,但 IV 不需要保密。在一个实际方案中,将由小红或小明生成私钥并使用公钥(不对称)加密将私钥(对称)传递给对方。有关公钥加密的更多信息,请参见下一节。

.NET Framework 提供了以下类来实现私钥加密算法:

AesManaged(在 .NET Framework 3.5 版中引入)。

DESCryptoServiceProvider。

HMACSHA1(从技术上讲,这是一种私钥算法,因为它表示结合使用加密哈希函数和私钥计算的消息身份验证代码。请参见本主题后面的哈希值。)

RC2CryptoServiceProvider。

RijndaelManaged。

TripleDESCryptoServiceProvider。

公钥加密
公钥加密使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥在数学上是关联在一起的;用公钥加密的数据只能用私钥解密,而用私钥签名的数据只能用公钥验证。公钥可以提供给任何人;公钥用于对要发送到私钥持有者的数据进行加密。公钥加密算法又称为非对称算法,原因是需要用一个密钥加密数据,而用另一个密钥来解密数据。对于每个通信会话,这两个密钥应该都是唯一的。不过,尽管非对称算法具有此项要求,但在实践中,非对称密钥通常却有较长的生存期。

双方(小红和小明)可以按照下列方式使用公钥加密: 首先,小红生成一个公钥/私钥对。如果小明想要给小红发送一条加密的消息,他将向她索要她的公钥。小红通过非安全网络将她的公钥发送给小明,小明接着使用该密钥加密消息。小明将加密的消息发送给小红,而小红使用她的私钥解密该消息。如果小明通过非安全信道(例如公共网络)接收小红的密钥,则小明可能会受到“中间人”攻击。因此,小明必须与小红验证他收到的公钥副本是否正确。

但是,在传输小红的公钥期间,未经授权的代理可能会截获该密钥。而且,同一代理可能截获来自小明的加密消息。但是,该代理无法用公钥解密该消息。该消息只能用小红的私钥解密,而该私钥并没有被传输。小红不使用她的私钥加密给小明的答复消息,原因是任何具有公钥的人都可以解密该消息。如果小红想要将消息发送回小明,她将向小明索要他的公钥并使用该公钥加密她的消息。然后,小明使用与他相关联的私钥来解密该消息。

在此方案中,小红和小明使用公钥(非对称)加密来传输私钥(对称),并对其会话的其余部分使用私钥加密。

公钥加密算法使用固定的缓冲区大小,而私钥加密算法则使用长度可变的缓冲区。公钥算法无法像私钥算法那样将数据链接成流,原因是它只能加密少量数据。因此,不对称操作不使用与对称操作相同的流模型。

公钥加密具有更大的密钥空间(或可能值范围),因此不太容易受到对每个可能密钥都进行尝试的穷举攻击。由于公钥不需要保密,因此分发起来十分容易,但条件是可通过某种其他方式来验证发送方的身份。某些公钥算法(例如 RSA 和 DSA,但 Diffie-Hellman 除外)可用于创建数字签名,以此来验证数据发送方的身份。但是,公钥算法的速度很慢(与私钥算法相比),不适合用来加密大量数据。公钥算法仅对传输很少量的数据有用。公钥加密通常用于加密一个私钥算法将要使用的密钥和 IV。在传输密钥和 IV 后,将对会话的其余部分应用私钥加密。

.NET Framework 提供了以下类来实现公钥加密算法:

DSACryptoServiceProvider

RSACryptoServiceProvider

ECDiffieHellman(基类)

ECDiffieHellmanCng

ECDiffieHellmanCngPublicKey(基类)

ECDiffieHellmanKeyDerivationFunction(基类)

ECDsaCng

RSA 允许同时进行加密和签名,但 DSA 只能用于签名,Diffie-Hellman 只能用于生成密钥。通常情况下,公钥算法比私钥算法具有更多的使用限制。

数字签名
公钥算法还可用于构成数字签名。数字签名验证发送方的身份(如果您信任发送方的公钥)并帮助保护数据的完整性。使用由小红生成的公钥,小红的数据的接收者可以通过将数字签名与小红的数据和小红的公钥进行比较来验证是否是小红发送了该数据。

为了使用公钥加密对消息进行数字签名,小红首先将哈希算法应用于该消息以创建消息摘要。该消息摘要是数据的紧凑且唯一的表示形式。然后,小红用她的私钥加密该消息摘要以创建她的个人签名。在收到消息和签名时,小明使用小红的公钥解密签名以恢复消息摘要,并使用与小红所使用的相同的哈希算法来散列消息。如果小明计算的消息摘要与从小红那里收到的消息摘要完全一致,小明就可以确定该消息来自私钥的持有人,并且数据未被修改过。如果小明相信小红是私钥的持有人,则他将知道该消息来自小红。

注意:
由于发送方的公钥为大家所共知,并且它通常包含在数字签名格式中,因此任何人都可以验证签名。此方法不保守消息的机密;若要使消息保密,还必须对消息进行加密。


.NET Framework 提供了以下类来实现数字签名算法:

DSACryptoServiceProvider

RSACryptoServiceProvider

ECDsa(基类)

ECDsaCng

哈希值
哈希算法可将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值就称为哈希值。哈希值是一段数据的数值表示形式。散列一段纯文本时,即使只更改段落中的一个字母,随后的散列计算都会产生不同的值。如果哈希已进行强加密,其值将发生显著更改。例如,如果更改了消息的一个位,强哈希函数就可能生成相差 50% 的输出。很多输入值可能会散列为相同的输出值。但是,要找到散列为同一个值的两个不同的输入,在计算上是不可行的。

双方(小红和小明)可按以下方式使用哈希函数,以确保数据完整性:小红撰写要发送给小明的消息,并创建该消息的哈希。随后,小明可以散列该消息,并将得到的哈希与原始哈希进行比较。如果这两个哈希值相同,则说明消息未被更改。如若不同,则说明该消息在由小红撰写后已被他人更改。为了使此系统发挥作用,小红必须对除小明外的所有人保密原始的哈希值。此外,也可以公开该哈希值,但条件是没有人能够对它进行修改。

.NET Framework 提供了以下类来实现数字签名算法:

HMACSHA1。

MACTripleDES。

MD5CryptoServiceProvider。

RIPEMD160。

SHA1Managed。

SHA256Managed。

SHA384Managed。

SHA512Managed。

所有安全哈希算法 (SHA)、消息摘要 5 (MD5) 和 RIPEMD-160 算法的 HMAC 变体。

所有 SHA 算法的 CryptoServiceProvider 实现(托管代码包装)。

所有 MD5 和 SHA 算法的下一代加密技术 (CNG) 实现。

注意:
1966 年,人们发现了 MD5 的设计缺陷,并建议改用 SHA-1。2004 年,人们又发现了 MD5 的其他缺陷,因此认为这种算法已不再安全。另外,SHA-1 算法也暴露出不安全的方面,现在已建议改用 SHA-2。


随机数生成
随机数生成是许多加密操作不可分割的组成部分。例如,加密密钥需要尽可能地随机,以便使生成的密钥很难再现。加密随机数生成器所生成的输出的可推算概率不得高于 p < .05;即,任何推算下一个输出位的方法均不得比随即猜测具有更高的成功概率。.NET Framework 中的类使用随机数生成器生成加密密钥。

RNGCryptoServiceProvider 类是随机数生成器算法的一个实现。

ClickOnce 清单
在 .NET Framework 3.5 中,使用下列加密类可以获取并验证用 ClickOnce 技术部署的应用程序的清单签名信息:

使用 ManifestSignatureInformation 类的 VerifySignature 方法重载时,该类会获取有关清单签名的信息。

使用 ManifestKinds 枚举可以指定要验证的清单。验证的结果为 SignatureVerificationResult 枚举值之一。

ManifestSignatureInformationCollection 类提供已验证签名的 ManifestSignatureInformation 对象的只读集合。

此外,下面的类还提供特定的签名信息:

StrongNameSignatureInformation 保存清单的强名称签名信息。

AuthenticodeSignatureInformation 表示清单的 Authenticode 签名信息。

TimestampInformation 包含有关 Authenticode 签名上的时间戳的信息。

TrustStatus 提供了一种简单的方法来检查 Authenticode 签名是否可信。

Suite B 支持
.NET Framework 3.5 支持由美国国家安全机构 (NSA) 发布的 Suite B 加密算法集。有关 Suite B 的更多信息,请参见 NSA Suite B Cryptography Fact Sheet(NSA Suite B 加密一览表)。

其中包括以下算法:

使用 128 位、192 位和 256 位的密钥大小进行加密的高级加密标准 (AES) 算法。

用于散列的安全哈希算法 SHA-1、SHA-256、SHA-384 和 SHA-512 (最后三种算法通常归为一组,称为 SHA-2)。

使用 256 位、384 位和 521 位素模曲线进行签名的椭圆曲线数字签名算法 (ECDSA)。NSA 文档对这些曲线进行专门定义,并将它们称为 P-256、P-384 和 P-521。此算法由 ECDsaCng 类提供。利用此算法,可以使用私钥进行签名并使用共钥验证签名。

使用 256 位、384 位和 521 位素模曲线的椭圆曲线 Diffie-Hellman (ECDH) 算法,用于密钥交换/机密协议。此算法由 ECDiffieHellmanCng 类提供。

新的 AesCryptoServiceProvider、SHA256CryptoServiceProvider、SHA384CryptoServiceProvider 和 SHA512CryptoServiceProvider 类为 AES、SHA-256、SHA-384 和 SHA-512 实现的美国联邦信息处理标准 (FIPS) 认证实现提供了托管代码包装。

下一代加密技术 (CNG) 类
下一代加密技术 (CNG) 类为本机 CNG 函数提供了托管包装 (CNG 是 CryptoAPI 的替代物)。这些类的名称中都包含“Cng”。CNG 包装类的核心是 CngKey 密钥容器类,此类为 CNG 密钥的存储和使用提供了抽象。利用此类,可以安全地存储密钥对或公钥,并使用简单的字符串名称对其进行引用。基于椭圆曲线的签名类 ECDsaCng 和 ECDiffieHellmanCng 使用 CngKey 对象。

CngKey 类可用于执行很多其他操作,包括打开、创建、删除和导出密钥。它还提供对直接调用本机函数时要使用的基础密钥句柄的访问。

此外,.NET Framework 3.5 还包括很多支持 CNG 的类,例如:

CngProvider 用于维护密钥存储提供程序。

CngAlgorithm 用于维护 CNG 算法。

CngProperty 用于维护常用的密钥属性。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧