银行的动态口令令牌是什么原理

有网银的少年们一般都收到过银行给的这样一个令牌,俗称动态口令,在支付的时候输入自己的密码和动态口令上的动态密码,就能完成验证,银行就相信你不是坏人了,今天我们来简述一下这个动态口令令牌是个什么原理。

PS:本篇阅读可能需要读者有一些密码学基础,预警一下。

SID700.jpg

RSA SecurID SID700

如图的RSA SecurID SID700是当前市面上流行使用的动态口令令牌,在笔者准备资料的过程中发现国内描写动态口令的野生博客有不少谬误,其中大多是对银行这一套认证机制结构的不了解,所以首先要强调的是:

在大众用户手中的动态口令令牌,并不使用任何对称或者非对称加密的算法,在整个银行的认证体系中,动态口令令牌只是一个一次性口令的产生器,在其中运行的主要计算仅包括时间因子的计算和散列值的计算。

动态口令算法又叫一次性口令算法,英文写作OTP(One-Time Password Algorithm), 动态口令令牌使用的算法是OTP中的一类,TOTP(Time-Based One-Time Password Algorithm) — 时间同步型动态口令。

时间同步型动态口令产生口令的时候和时间有关系,我们可以通过其工作的原理图来看一下:

Screen Shot 2016-02-08 at 5.06.00 PM.png

图示给出了动态口令的工作原理,突出了整个认证机制中的动态口令部分,我们可以清楚看到在最左边和最右边有完全相同的两个流程,这里分别代表了用户的令牌卡和银行服务器的验证机器做的工作。本文的重点就在这两个完全相同的流程上。

在用户从银行手中拿到动态口令令牌卡的时候,在令牌卡的内部已经存储了一份种子文件(即图中钥匙所代表的seed),这份种子文件在银行的服务器里保存的完全一样的一份,所以对于动态口令令牌来说,这种方式是 share secret的。另外在令牌硬件上的设置中,假使有人打开了这个令牌卡,种子文件将会从令牌卡的内存上擦除(待考证)。

令牌卡中有了种子文件,并实现了 TOTP 算法,在预先设置的间隔时间里它就能不断产生不同的动态口令,并显示到屏幕上,而银行服务器上跟随时间做同样的计算,也会得到和令牌卡同样的口令,用作认证。

那么 TOTP 算法具体做了什么操作呢?在 RFC6238 中有详细的算法描述,这里也会做简单的叙述。

TOTP 是来自 HOTP [RFC4226] 的变形,从统筹上看,他们都是将数据文件进行散列计算,只是HOTP的因子是事件因子,TOTP将因子换成了时间因子,具体的TOTP计算公式(其中的HMAC-SHA-256 也可能是 HMAC-SHA-512):

TOTP = Truncate(HMAC-SHA-256(K,T))

其中: K 为这里的种子文件内容; T 为计算出来的时间因子

公式中的 HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。而公式中给出的哈希算法是 SHA-256,这种哈希算法目前并没有好的破解办法。

令牌卡中预先设置了要显示的口令长度,TOTP 中的 Truncate 操作剪切获得口令。

以上就是动态口令令牌卡的内部原理。

几点补充:

1.  时间同步型动态口令对令牌卡和服务器的时间同步要求很高,时间误差会造成整个令牌的失灵,所以每一次用户成功使用令牌认证,服务器都会做相应的时间误差矫正。

2. 种子文件的产生使用了一种AES-128 变形而来的算法, AES-128 也是目前顶尖级的对称加密技术。

3. 目前从加密技术上以及数学理论上整个银行机制的认证系统基本无解。

4. 欢迎勘误。

参考链接:

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

4 14 收藏 8 评论

关于作者:v7

微博:@_v7__ 个人主页 · 我的文章 · 17 ·   

相关文章

可能感兴趣的话题



直接登录
最新评论
  • 真壮汉   2016/02/16

    补充中的第一点:“服务器都会做相应的时间误差矫正” 这个矫正是如何做的?有相应的参考文档么?

    • 6v   2016/02/17

      在我理解是这样,令牌卡根据当前时间计算口令并发送,服务器会根据当前时间前后的数个时间点分别计算口令,其中有某一个匹配就可以认为是认证成功,并将误差值进行记录。以后服务器端就可以直接将当前时间加上误差值去计算口令了。

      • v7   2016/02/18

        实际上在TOTP的RFC中也仅仅推荐了时间矫正的一种方式,具体在口令制作厂商内部是否取用了这个方式,或者在没在这个方式上加上更安全的机制我们也不知道。
        而RFC中提到的时间矫正 如同@6v所讲 是给出一个时间误差范围 在范围内都会认做合法

  • BETA君   2016/02/17

    时间同步型的话,动态口令令牌的时间是从电脑上取的吗?
    如果是这样,是否可以理解为电脑的时区不是北京时间的话,口令就会失灵?

  • anders_zy   2016/02/22

    动态令牌的电池能用多久?

跳到底部
返回顶部