首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用6位数字设计安全令牌认证协议?

如何使用6位数字设计安全令牌认证协议?
EN

Stack Overflow用户
提问于 2010-03-29 12:02:31
回答 2查看 1.6K关注 0票数 3

我有一个安全号码发生器设备,小到足以进行一个钥匙环,其中有一个六位数字液晶显示器和一个按钮。在网上表单上输入帐户名称和密码后,按下安全设备上的按钮,输入显示的安全代码号。

每次我按下按钮时,我都会得到一个不同的号码,而号码生成器的背面有一个序列号,在建立帐户的过程中,我必须输入序列号。

我想在我的网站中加入类似的功能。据我所知,这些都是主要的组成部分:

  1. 在注册过程中生成唯一的N位数字序列,并分配给用户(永久)。
  2. 允许用户生成N(或M?)数字数字序列-现在,我不关心硬件方面,我只想知道如何选择一个合适的算法,让用户生成一个N(或M?)long aplha--数字序列--想必使用他唯一的ID作为种子
  3. 从步骤2中生成的数字中识别用户(哪种解密方法是最可靠的?)

我有以下问题:

  • 我是否确定了这样一个认证系统所需的所有步骤?如果没有,请指出我错过了什么以及为什么它是重要的。
  • 对于步骤1到3(最好使用64位),我可以使用的最健壮的加密/解密算法是什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-02 04:30:43

您的服务器有一个客户端ID和密钥表。每个客户端也知道自己的密钥。

服务器还为每个客户端维护一个计数器,初始化为零。每个客户端维护一个计数器,也初始化为零。

当按下客户端上的按钮时,它会使用其键作为HMAC键,生成当前计数器值的HMAC。它从HMAC输出生成字母数字代码,并将其显示给用户(发送到服务器)。客户端增加其计数器值。

当服务器接收到身份验证请求时,它会使用该客户端的存储密钥和计数器重复与客户端相同的操作。它将它生成的字母数字代码与从客户端接收的字母数字代码进行比较--如果它们匹配,则对客户端进行身份验证。如果它们不匹配,服务器将为该客户端增加其计数器,并重复该进程,只需少量重复(例如,~10)。如果客户端计数器在没有与服务器联系的情况下增加,则允许服务器“追赶”。

如果计数器转到零,则在向服务器发出新密钥之前,服务器不应接受对该客户端ID的任何身份验证请求。

这个基本协议有一些扩展:例如,您可以在服务器和客户端上使用同步时钟而不是计数器(值每N秒而不是按下每个按钮)。

票数 2
EN

Stack Overflow用户

发布于 2011-08-15 01:18:48

您所描述的是一个HOTP,或基于HMAC的一次性密码.实现是用这个RFC描述的,除非您有令人信服的理由不这样做,否则我强烈建议按原样实现它,因为它已经被加密人员审查过,并且被认为是安全的。使用它还可以使您与现有系统兼容--您应该能够找到与HOTP兼容的令牌和软件应用程序,比如用于Android的Google身份验证程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2537652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档