SToken

SToken

SToken(stoken)是一款开源的软件令牌程序,可在 Linux、UNIX 等系统上生成与 RSA SecurID 128 位 AES 令牌兼容的一次性口令,用于替代厂商提供的专有软件认证器。它以命令行程序 stoken、图形界面 stoken-gui 和共享库 libstoken 等形态提供,核心功能是导入令牌种子并按其计算当次口令[1][2]。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

SToken 是一个软件形式的令牌程序,其作用是产生与 RSA SecurID 128 位 AES 令牌兼容的一次性口令,也就是通常所说的令牌码(tokencode)。在 Linux 和 UNIX 系统上,它被视作厂商专有 SecurID 软件认证器的自由软件替代方案[3]。

该程序由若干可独立使用的部分组成:1 个交互或批量使用的命令行工具 stoken、1 个基于 GTK+ 的图形界面 stoken-gui、1 个供其他程序调用的共享库 libstoken,另有兼容 Android 的 Java 接口[4][5]。项目代码以 GNU 宽通用公共许可证(LGPL)2.1 及以后版本发布,并被 Debian、Fedora、Ubuntu、FreeBSD 等多个发行版收录为软件包[6][7]。

原理

SecurID 体系属于基于共享秘密的对称认证方式,并不使用公钥密码。每枚令牌在生产时被写入一个随机秘密种子(seed),服务端同时保存该种子与令牌序号的对应记录[8][9]。口令通常以 60 秒为周期更新,算法以 AES-128 处理种子与当前时间等输入,再截取为若干位数字输出[8][10]。

SToken 说明文档描述的计算输入为解密后的种子数据、当前时刻以及可选的 PIN;若同一份种子被装入多台设备,它们在同一时段应得到完全相同的口令。图形界面显示的口令每分钟更换一次,并可把当前口令复制到剪贴板[1][11]。

认证服务器收到口令后,用同一算法针对自己掌握的时间窗口进行计算比对,并允许前后若干分钟的口令通过,以容纳时钟漂移;匹配成功后还会把偏移量记录下来供后续认证使用[8][12]。

发展历程

项目由凯文·切尔内基(Kevin Cernekee)发起和维护,早期以 SourceForge 为主页,后续开发代码转入 GitHub,第一版版本号为 v0.1,较新的稳定版本为 0.93[4][13][14]。

打包进发行版的节奏可以在仓库记录中看到:Ubuntu 档案中收录了 0.2 版(2013 年)、0.90 版(2015 年)、0.92 版(2017 年)和 0.93 版(2026 年)的源码包,Debian 的更新日志同样按 0.6、0.92、0.93 等版本记录变更[15][16]。

FreeBSD ports 于 2014 年 8 月收录该项目,说明其兼容范围已不限于 Linux[7]。

应用

最常见的用法是用导入命令把令牌数据写入用户主目录下的配置文件中,之后直接运行程序即可得到当前口令。可导入的数据形式包括纯数字的 81 位压缩令牌格式串、带连字符的同类串、面向 iPhone 与 Android 的定制链接,以及 sdtid 格式的 XML 文件[17][18]。

对需要绑定的令牌,导入前须提供设备标识;数字串和智能手机令牌中的种子往往用设备标识加密存放,而 sdtid 文件只要知道密码即可导入[19]。程序还提供查看、导出、生成新令牌、设置 PIN、用口令加密种子的子命令,便于在多台机器间迁移同一枚令牌[1]。

共享库的用途是让 VPN 客户端、浏览器等外部程序直接调用口令生成功能,使用者无需在程序之间手工复制口令[20]。SecurID 口令本身常用于把终端用户认证到受保护网络资源和 VPN 上,以克服静态口令易被攻击的弱点[21]。

局限

SToken 是爱好者项目,与 RSA 公司没有隶属关系,也未获得其认可,因此不提供厂商支持,也无法保证与厂商产品完全同步[2]。它的定位只是口令生成工具,不含认证服务器,也不处理令牌的签发与管理制度。

安全方面,软件令牌比硬件令牌更容易复制,存放种子的主机需要格外防范泄露;文档建议对便携设备使用全盘加密,并指出若主机已被入侵(例如植入键盘记录程序),其上的种子同样难以保全[1]。加密口令最长 40 个字符;在命令行直接输入口令或 PIN,在多用户系统上可能被其他用户通过进程列表看到,程序尝试锁定内存页以防换出,但不会清除进程内存中的秘密数据[1]。

在自动化场景中把 PIN 存入配置文件虽然方便脚本调用,但其风险需与便利一并权衡[1]。此外,口令依赖设备时钟,若同一种子在不同设备上算出的结果不一致,应先检查时区设置,并考虑用网络时间协议校准系统时间[1]。

参见

  • RSA SecurID —— SToken 所兼容的令牌体系,种子与时间共同决定一次性口令。

  • 一次性口令 —— SToken 生成的令牌码所属的认证技术类别。

  • 双因素认证 —— 在口令之外再增加令牌码的认证思路。

  • 高级加密标准 —— SecurID 128 位令牌所用的对称加密算法。

  • 网络时间协议 —— 用于校准设备时钟、避免口令不同步的协议。

  • 虚拟专用网 —— 常借助 SecurID 口令完成用户认证的接入方式。

参考资料

  1. stoken.1.en [引用日期2026-10-29]
  2. stoken-gui Subpackage of stoken [引用日期2026-10-29]
  3. stoken [引用日期2026-10-29]
  4. stoken Wiki [引用日期2026-10-29]
  5. ITP stoken 0.91 [引用日期2026-10-29]
  6. stoken-libs Subpackage of stoken [引用日期2026-10-29]
  7. Log of /head/security/stoken [引用日期2026-10-29]
  8. Understanding the security framework behind RSA SecurID [引用日期2026-10-29]
  9. RSA SecurID - Jump to content [引用日期2026-10-29]
  10. RSASecurIDiOSSDK250_devguide(PDF) [引用日期2026-10-29]
  11. stoken-gui.1.en [引用日期2026-10-29]
  12. rsa.com 上的网页 [引用日期2026-10-29]
  13. stoken [引用日期2026-10-29]
  14. stoken [引用日期2026-10-29]
  15. Index of /ubuntu/ubuntu/pool/universe/s/stoken [引用日期2026-10-29]
  16. Index of /changelogs/main/s/stoken [引用日期2026-10-29]
  17. stoken.1 [引用日期2026-10-29]
  18. One Time Password support [引用日期2026-10-29]
  19. stoken.1.en [引用日期2026-10-29]
  20. Binary package stoken/0.92-1 in amber @ pureos [引用日期2026-10-29]
词条评价
词条统计

浏览次数:0 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:49:53Z

历史版本

本条目引用的词条
RSA SecurID Linux 一次性口令 双因素认证 高级加密标准 网络时间协议 虚拟专用网