你建议写什么教学玩具程序来理解证书?

时间:2009-11-10 06:18:57

标签: c# .net security certificate

当我为手头的问题的孤立方面编写玩具程序时,我更了解一些概念。例如,对于加密,您可以编写一个程序来加密然后解密一个字符串..并看到您获得了初始字符串。

您建议我写什么玩具程序来了解证书? (服务器/客户端交互,ssl通信,签名等)和/或我应该探索哪些.NET命名空间?

(对问题不重要,但我使用c#)

2 个答案:

答案 0 :(得分:3)

  • 创建对称密钥并使用它加密/解密。修改加密的byte []并尝试解密它。使用不同的填充和模式播放并重复几次。
  • 创建/保存/加载证书和私钥。
  • 验证您找到的任何证书的证书链,以查看最常见的错误类型。
  • 创建对称密钥,使用一个证书(“客户端”)的公钥和另一个证书(“服务器”)的私钥对其进行加密。
  • 创建一条消息,发送上面用“服务器”私钥加密的密钥,然后是一些加密文本并对整个内容进行签名。然后使用“server”公钥和“client”私钥解码并验证这一点。

命名空间?

  • System.Security.Cryptography
  • System.Security.Cryptography.Authentication
  • System.Security.Cryptography.X509Certificates

一些有趣的类型:

  • 的RSACryptoServiceProvider
  • SymmetricAlgorithm
  • RijndaelManaged的
  • ICryptoTransform的
  • X509Chain

答案 1 :(得分:2)

我不同意给出的答案。为了理解证书,您必须了解其背后的基础结构(称为PKI,公钥基础结构)。这意味着你必须阅读一些关于第一个

的材料
  • 公钥加密如何工作(一般而言)
  • 为什么需要PKI
  • 什么是证书,为什么我们需要它
如果你不了解它背后的概念,那么编程这些东西是没有意义的。

您将其与加密/解密进行比较。两者都是黑盒子,用户需要知道 它是如何工作的(内部)才能使用它。

但是,证书和PKI是不同的。为了能够以实用且最安全的方式使用它们,您需要首先掌握这些概念(通过阅读,但不要害怕阅读一些维基页面,并在此处提出一些问题,这将使您获得超过一半)你可以编程。

评论后修改 是的,玩具程序总是很好地掌握实践中的概念。我想到了什么:

  • 执行公钥加密/解密(基本)
  • 签名/​​签名签名(我知道它与前一个签名相同,但主要不同)(基本)
  • 尝试连接服务器并自行进行SSL握手(高级)
  • 尝试连接服务器,获取证书并通过整个证书链检查有效性(中等)
  • 尝试创建自己的自签名证书(中等)
  • 尝试使用除RSA之外的其他加密算法,尝试DSA,El-Gamal,Elliptic Curves Crypto(中等)
  • 实现diffie-hellman keyexchange算法(高级)

一旦你完成了这些,我想你会对整个事情有一个合理的理解。 如果你仍然很好奇,你可以随时深入了解数学等更先进的东西,比如你的作弊方式,算法正确性证明等。

Btw,我刚刚发现了最近关于SSL / TLS的发现,既然你正在研究这个问题,也许你会想读这篇小文章:

http://blog.ivanristic.com/2009/11/ssl-and-tls-authentication-gap-vulnerability-discovered.html