基于散列消息验证码的一次性密码算法

✍ dations ◷ 2025-05-18 21:43:52 #计算机访问控制协议,密码算法,网际协议

基于HMAC的一次性密码算法(英语:HMAC-based One-time Password algorithm,HOTP)是一种基于散列消息验证码(HMAC)的一次性密码(OTP)算法,同时也是开放验证提案的基础(OATH)。

HOTP在2005年由IETF发布在RFC 4226标准文档中,定义了算法的同时附带有一例基于Java的实现。自此之后,世界上许多公司接纳了HOTP算法,它也成为了可以自由使用的开源标准。

HOTP算法在验证时使用对称生成的人类可读密码(算法中也称为“运算值”),每个密码仅在一次验证中有效。这种一次性属性直接来自于计数器数值的单次使用。

任何有意愿使用HOTP的一方都必须定义一系列对于验证器而言已明确的参数,无论是否这些参数是否可以被验证器接受,都可能包含:

HOTP 验证中的双方都会运算最终数值,验证器会将本地运算结果与被验证方提供的结果进行比对。

由于验证双方都分别各自自增计数器数值,验证器的计数器可能落后于被验证方,因此定义用于重新同步的协议是意义的。RFC 4226标准中给出了相关建议,但并不做强制要求。为解决可能的不同步,验证器会使用当前计数器值起尝试用连续多个值(称为窗口)进行运算,如果验证成功,则验证器将对应的计数器值更新为当前值,无需被验证方做任何操作。窗口大小由参数指定。:7,8

上述建议是出于避免HOTP 数值验证过程中出现卡死,但是同时也使得数值相对偏小,暴力破解攻击也因此变得容易。有一个建议是在验证失败几次之后就锁定验证过程,或者每次验证失败时都(以线性方式)延长下次操作时间。

专有的硬件密钥通常会提供六位验证码,也就是的默认值。密钥截留最长长度为31位,由于公式中 log 10 ( 2 31 ) {\textstyle \log _{10}\left(2^{31}\right)} 的最大值取10,因此第十位数值可能的取值也就更少,为0、1或者2(也就对应多出的0.3这个小数数值)。

在验证之后,验证器可以通过运算得出下一个HOTP 数值来执行验算,得出返回的数值之后,接受验证的一方将计算HOTP 数值进行验证。值得注意的是,这一过程中的计数器数值需要保证同步。

HOTP 运算值设计上是人类可读的,它是一个位数为d的十进制数字(开头的0不可忽略):

上述公式也说明运算值是最小位数为d的十进制数值。

HOTP本质上是散列消息验证码(HMAC)的计数器截留,计数器数值记为(服务器分发密钥记为,散列函数记为)。

截取首先是位于最小的四位数值当中,截得之后用于作为回调数值,记为。

引索数值用于从当中选中31位数,起始点为。

注意,获取的31位数长度仅有单位值的4字节,可以容纳于4字节短语意味着没有标记位。这是出于避免负数的模数运算,但是这也有许多不同的定义与实现。

已有许多供应商(参考下面的列举)提供软件以及硬件密钥。实现开放验证提案的HOTP硬件密钥实现往往比使用专有算法的同类产品便宜许多。 截止至2010年,这些硬件密钥的价格已经很低。 有些产品也可以同时用于生成强密码。

软件密钥在(几乎)所有主要移动平台或智能手机均有提供(如J2ME, Android, iPhone, BlackBerry, Maemo, macOS, 以及Windows Mobile)。

尽管许多计算机媒体在2004-05年持负面态度,自从IETF在2005年十二月将HOTP接纳为RFC 4226标准之后,许多提供商开始生产兼容HOTP的密钥,甚至是基于此的整套验证解决方案。

2010年伯顿集团(英语:Burton Group)(高德纳咨询公司的下辖部门)发表文章,表示“高德纳咨询公司预期基于硬件的一次性密码封装的市场会有一定程度的增长,对于智能手机来说,一次性密码将会成为默认硬件平台的一部分”。

相关

  • 弗里茨·泽尔尼克弗里茨·塞尔尼克(荷兰语:Frits Zernike,1888年7月16日-1966年3月10日),荷兰物理学家,1953年因相衬显微技术而获诺贝尔物理学奖。1901年:伦琴 / 1902年:洛伦兹、塞曼 / 1903年:贝克
  • 提毗提毗(天城文梵语:देवी,转写:Devī),梵语即为“女神”之意,象征了神圣的女性面,印度教的性力派认为提毗与提婆——男神是相互不可或缺的对存在。婆罗门教奉行一元论,认为提毗是所
  • 哈灵根哈灵根(Harlingen /ˈhɑːrlᵻndʒᵻn/ HAR-lin-jin)是美国的一座城市。位于德克萨斯州南部,里奥格兰德谷地。距墨西哥湾海岸有约30英里(48公里)。全市面积超过34平方公里,是卡梅
  • 甘尼森国家森林甘尼森国家森林(英语:Gunnison National Forest)是美国的一座国家森林,面积6,766平方公里,坐落于美国西部科罗拉多州的德尔塔县、甘尼森县、欣斯代尔县、萨沃奇县和蒙特罗斯县五
  • 瓦西里四世瓦西里·伊万诺维奇·叔伊斯基(俄语:Васи́лий Иванович Шу́йский, 1552年-1612年9月22日),通称瓦西里四世,是1606年-1610年在位的俄国沙皇。他是俄国历史上
  • 亚历克·吉尼斯亚历克·吉尼斯爵士,CH,CBE(Sir Alec Guinness,1914年4月2日-2000年8月5日)是一位英国演员。他出演过伊灵制片厂的数部喜剧,包括《仁心与冠冕》,片中他分饰八个角色。之后因1957年的
  • 齐鲲齐鲲(1776年-1820年),字澄瀛,号北瀛。福建侯官(今福州)人。住玉尺山房。乾隆五十七年(1792年)举人第二名,嘉庆六年(1801年)进士,选庶吉士,授翰林院编修,嘉庆十二年(1807年)出使琉球,充任册封琉
  • 林德拉尔叙尔茨河坐标:51°0′27″N 7°16′57.6″E / 51.00750°N 7.282667°E / 51.00750; 7.282667林德拉尔叙尔茨河(德语:Lindlarer Sülz),是德国的河流,位于该国西部,处于北莱茵-威斯特法伦州
  • 汤姆·考特尼托马斯·威廉·“汤姆”·考特尼(英语:Thomas "Tom" William Courtney,1933年8月17日-),美国前男子田径运动员,主攻中跑。他曾在1956年夏季奥运会田径比赛中获得男子800米和4×400
  • 有苏氏有苏氏,夏、商、周时期古老的诸侯国,国君为己姓其地约在今河南省武陟县东。据《左传》记载,帝辛发兵征服了有苏氏,有苏氏献出牛羊、马匹、美女,还有自己的女儿妲己,妲己被认为是中