粗略地说,您能做的最好的事情就是强化服务器,使其尽可能地抵抗妥协。
理想情况下,您会将种子存储在硬件安全模块(HSM;又名加密协处理器)中。您要确保种子永远不会离开 HSM,即在 HSM 中进行所有加密计算。这提供了更好的保护,尽管它确实更昂贵。
但是,正如您正确指出的那样,您不能以散列形式存储种子。种子必须以明文形式存储,因此如果该服务器 遭到入侵,您就有 大 麻烦了。这意味着尽可能地保护该服务器是绝对重要的。
OTP 种子与密码不同。人们倾向于在多个站点上使用相同的密码;OTP 种子不会发生这种情况。散列密码部分用于保护用户的密码,因此如果站点 X 的数据库被破坏,那么 X 在其他站点上的用户帐户不会受到损害。这种威胁根本不适用于 OTP 种子。
此外,使用密码,您可以散列密码。如果可以,你也可以,因为它确实有助于减轻一些风险。(而且密码被广泛使用,并且被非安全专家的开发人员使用,以至于许多使用密码的网站在某些时候都会遇到安全漏洞。)由于你不能散列 OTP 种子,所以这缓解措施根本不适用于 OTP 种子——因此您必须使用其他方法来保护您的 OTP 种子。幸运的是,只有非常具有安全意识的站点才应该存储自己的 OTP 种子,因此如果一个人持乐观态度,可能会希望他们能够更好地应用其他防御措施。
无论如何,由于 OTP 种子与密码具有不同的特征,因此您不应假设密码的每个缓解措施都必然会转移到 OTP 种子。