RFC4226将HOTP算法描述为“基于递增的计数器值和仅为令牌和验证服务所知的静态对称密钥”,具体如下:
HOTP(K,C) = Truncate(HMAC-SHA-1(K,C))假设每个用户都有自己的唯一计数器,那么如何存储计数器(即算法的C部分)?
发布于 2016-11-07 12:02:57
正如@Pascal所指出的,您应该加密密钥"K“。但是,您还需要考虑将加密密钥存储在何处。
在系统上使用加密密钥。加密密钥是硬盘上的一个文件。它用于加密数据库中的K。数据库可能位于另一台计算机上,由DBMS管理员管理。通过这种方式,您可以确保被盗的数据库不包含令牌的_K_s。
但是,如果您在同一台机器上运行,您可以窃取加密的K和加密密钥。
因此,您应该加强服务器并控制对它的访问。
如果您在同一台计算机上运行,则可以对加密密钥进行加密。使用密码加密加密密钥。启动服务时,您可以提供密码,从而在RAM中解密加密密钥,并可用于解密数据库中的_K_s。
使用硬件安全模块来存储加密密钥。在HSM里面解密K。你可以使用任何HSM。
使用一个通用的HSM,您可以编程来执行HOTP。这样,您就可以将所有的_K_s保存在高速机床内。他们根本不需要在真实生活中被解密。让HSM计算给定计数器的下一个OTP值。您可以使用自定义可编程HSM。
https://security.stackexchange.com/questions/141946
复制相似问题