一次性密码(OTP)到期余地

时间:2014-08-28 10:44:22

标签: passwords one-time-password

如何为定时到期设置一个余地,以便产生误差,例如:1分钟?

目前这是我的粗略实现,如果服务器收到消息00:01:00并且客户端发送00:00:59,我必须在最后一刻添加另一个检查;

/**Client**/
int minutesNow = timeInSeconds()/60;
String mySignature = genAlgo(minutesNow, firstPassword);
sendToServer(mySignature);

/**Server**/
int minutesNow = timeInSeconds()/60;
String userPassword = getUserPassword();
boolean result = verifySig(mySignature, userPassword, minutesNow);
if(!result)
{
   result = verifySig(mySignature, userPassword, --minutesNow);
}

这个问题是一个详细说明 Password Reset Link Expiry ...我需要更多细节时间+/-

1 个答案:

答案 0 :(得分:1)

您需要在服务器端进行多次检查:对于当前的分钟,分钟前和分钟。

看起来像这样:

/**Server**/
int validationWindow = 1; // in minutes
int minutesNow = timeInSeconds()/60;
String userPassword = getUserPassword();

int timeToCheck = minutesNow - validationWindow; 
boolean result = verifySig(mySignature, userPassword, timeToCheck);
while (!result && timeToCheck <= minutesNow + validationWinwow) {
    result = verifySig(mySignature, userPassword, ++timeToCheck);
}