【问题标题】:What instructional toy programs do you suggest writing to understand certificates?您建议编写哪些教学玩具程序来理解证书?
【发布时间】:2010-12-14 22:13:39
【问题描述】:

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

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

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

【问题讨论】:

  • 你打算写什么应用程序?如果它将是 ASP.NET 应用程序,那么您可以编写一个“Hello, ” ASP.NET 页面,并替换从证书属性之一获取的用户。在实际应用中,您可以使用证书序列号之类的东西作为数据库条目的密钥。
  • 我发现了这个:example-code.com/csharp/certs.asp

标签: c# .net security certificate


【解决方案1】:
  • 创建一个对称密钥并用它加密/解密一些东西。修改加密字节[]并尝试解密。使用不同的填充和模式并重复几次。
  • 创建/保存/加载证书和私钥。
  • 验证您发现的任何证书的证书链,以查看最常见的错误类型。
  • 创建一个对称密钥,使用一个证书(“客户端”)的公钥和另一个证书(“服务器”)的私钥对其进行加密。
  • 创建一条消息,发送用“服务器”私钥加密的上述密钥,然后是一些加密文本并签署整个事情。然后使用“服务器”公钥和“客户端”私钥对此进行解码和验证。

命名空间?

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

一些有趣的类型:

  • RSACryptoServiceProvider
  • 对称算法
  • Rijndael 托管
  • ICryptoTransform
  • X509链

【讨论】:

  • 我还不知道那是什么,但我会做一些谷歌研究。这些是该领域的初学者、中级还是高级主题?
  • 顺序是从易到“难”。每个步骤都可以帮助您进入下一个步骤(链验证除外)。
  • Gonzaloooo!哈……没想到会在这里找到你。那太棒了!我会做功课,然后去波士顿评分:-)
【解决方案2】:

我不同意给出的答案。为了理解证书,你必须了解它背后的基础设施(称为 PKI,Public Key Infrastructure)。这意味着您必须首先阅读一些有关的材料

  • 公钥加密如何工作(一般)
  • 为什么需要 PKI
  • 什么是证书以及我们为什么需要它

如果您不了解其背后的概念,那么对这些东西进行编程是没有意义的。

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

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

评论后编辑: 是的,玩具程序在实践中总是很容易掌握这个概念。想到什么:

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

一旦你完成了这些,我想你会对整个事情有一个相当合理的理解。 如果您仍然好奇,您可以随时深入研究更高级的东西,例如数学,例如您如何作弊、算法正确性证明等。

顺便说一句,我刚刚偶然发现了有关 SSL/TLS 的最新发现,由于您正在研究该主题,也许您会喜欢阅读这篇小文章:

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

【讨论】:

  • 好的.. 在我阅读了这些概念(我已经有了)之后,你会编写玩具程序来巩固你的知识吗?如果是,是哪些?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多