Java me OTP S/密钥-种子是如何生成的,每次都是随机的吗?

Java me OTP S/密钥-种子是如何生成的,每次都是随机的吗?,java-me,one-time-password,Java Me,One Time Password,我正在考虑开发一个一次性密码认证系统(j2me用于电话,php用于服务器端) 我正试图了解这个过程,以下是我的理解 用户>将随机密码输入哈希n次 用户>将S^n提交到服务器 服务器>保存n和S^n 用户>生成(S^n)-1并提交到服务器 服务器>接受用户输入并再次应用哈希函数1,并对照以前存储的哈希进行检查 现在,从读取RFC2289(S/Key)开始,有一个种子被发送到客户端,当用户输入唯一标识符时,该种子与用户的秘密连接在一起(在步骤4)。该种子是如何创建的,是随机的,是存储的。在密码序列初

我正在考虑开发一个一次性密码认证系统(j2me用于电话,php用于服务器端)

我正试图了解这个过程,以下是我的理解

  • 用户>将随机密码输入哈希n次
  • 用户>将S^n提交到服务器
  • 服务器>保存n和S^n
  • 用户>生成(S^n)-1并提交到服务器
  • 服务器>接受用户输入并再次应用哈希函数1,并对照以前存储的哈希进行检查

  • 现在,从读取RFC2289(S/Key)开始,有一个种子被发送到客户端,当用户输入唯一标识符时,该种子与用户的秘密连接在一起(在步骤4)。该种子是如何创建的,是随机的,是存储的。

    在密码序列初始化期间,服务器和客户端同意该种子。因此,在使用OTP进行身份验证之前,只需执行一次。种子应该是随机的,但客户应该能够选择它。换句话说,服务器可能会建议一个随机种子,但客户端应该有一个选择来提出自己的(随机)种子。然后,该种子应由服务器存储。服务器在身份验证期间实际上不使用它。它存储它只是为了在身份验证期间将其与序列号一起呈现给用户。种子和序列号都不是秘密的