我正在尝试开发一个网站和一个相应的帮助程序(安装在用户计算机上)。网站和程序会相互通信(主要是AJAX),但是如果任何其他网页都可以向程序发送请求,这将是一个很大的安全风险。我想提出一个解决方案,使向我的程序(安装在用户计算机上)注入欺诈请求变得非常困难。我的想法即将使用一次性密码,但我的安全知识有限,因此请您提供想法。
我想出了这个一次性密码算法(伪):
function otp(seed, counter, unix_timestamp, action)
{
for(i = 0; i < counter; ++i)
{
seed = sha256(seed + i);
}
str = seed;
str = sha256(str + unix_timestamp/60);
str = sha256(str + action);
otp = substr(str,0,4); //Convert the first for bytes to an int.
return (int)otp;
}
它应该具有以下属性:
- 只能使用一次,(在每一代 otp 上都会增加“计数器”=> 新种子)
- 将每分钟更改一次(取决于时间)。
- 绑定到一个动作(登录,...),它取决于一个特定的动作。
- 可以很容易地单独生成,然后再同步。
如果每个请求都包含 OTP 代码和计数器值,这是否安全?如果不是,您有什么技巧来实现这一目标?我真的想要我上面提到的所有这些属性。
提前致谢。