5

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

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

有什么好的理由选择一个而不是另一个……或者一个都不选?

谢谢,

4

6 回答 6

2

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

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

于 2010-01-19T20:47:56.563 回答
2

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

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

于 2010-01-19T20:49:23.390 回答
2

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

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

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

于 2010-01-19T20:55:27.197 回答
2

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

最近利用 MD5 的弱点对 SSL 证书颁发者进行的攻击(由 Alex Sotirov 等人发起)实际上通过使用反式序列号变得更加容易。随机序列号没有受到攻击。这并不意味着可预测的序列号是不好的安全性,它只是意味着对于这个应用程序随机序列号可以帮助掩盖 MD5 中的弱点。根本问题仍然是 MD5。

于 2010-01-20T00:52:27.063 回答
0

我认为,如果我们检查 Serial 这个词,答案是隐含的……Serial、series、progression 等

于 2010-01-20T12:17:11.620 回答
0

刚才偶然碰到这个问题,你会从答案中想到,可预测的序列号不是安全问题。我会说这一个问题,随机序列号更安全。参照。例如,此处的火焰攻击等,或此处有关可预测序列号攻击”的维基百科文章。

于 2014-05-23T18:41:44.097 回答