我正在用java为uni类编写一个证书颁发机构,现在我不知道证书序列号的最佳选择是什么。

  • 从 0 到veryBigNumber 的简单静态计数器
  • 一些巨大的 BigInt 随机数

有什么充分的理由选择其中一个而不是另一个......或者他们都没有?

谢谢,

有帮助吗?

解决方案

我建议您使用随机数,但在数据库中保留这些颁发的序列号的列表。这将允许两件事。

  1. 您永远不会重新签发相同的序列号。
  2. 您可以从证书的序列号判断它是否远程有效。

当然,#1 要求您在生成时检查已知列表,并在发生冲突时生成新的随机数,而#2 在安全性或验证方面并没有多大意义,但仍然是一个有趣的前景。

其他提示

从技术上讲,从 0 到 veryBigNumber 的计数器比 bigRandomNumber 更容易实现 - 因为序列号必须不同。

但是,如果您想让人们知道您颁发了多少证书,您可能不想使用简单的计数器。

这取决于您使用序列号的目的。如果您是一家小公司,并且计划为每个客户提供一张证书,那么您的序列号将显示您拥有多少客户。

除此之外,我看不出有任何理由说明序列号不应该是序列号。有些人认为使用序列号会将一些信息(下一个序列号)泄露给潜在的攻击者,但我认为这不是一个大问题。

主要要求是一对 (Issuer distinguished name, serial number) 在宇宙中应该是独一无二的。因此,不应使用随机数,除非它太大以至于重复的概率可以忽略不计。20 字节的随机数应该足够了。如果您不介意其他人知道您颁发了多少证书,那么一个简单的计数器就完全可以了。

最近针对 SSL 证书颁发者的攻击(Alex Sotirov 等人)al) 利用 MD5 的弱点实际上通过使用计数器类型的序列号变得更加容易。随机序列号没有受到攻击。这并不意味着可预测的序列号安全性较差,只是意味着对于此应用程序,随机序列号可以帮助掩盖 MD5 的弱点。根本问题仍然是MD5。

我认为如果我们检查“串行”这个词,答案是隐含的......串行、系列、进展等

我刚才偶然遇到了这个问题,从答案中你会认为可预测的序列号并不是安全问题。我会说它 一个问题,随机序列号更安全。比照。火焰攻击等 这里 例如,或者 这里 或维基百科文章“可预测的序列号攻击."

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top