Security 简单的rand函数能否作为OTP发送?这其中的弱点是什么?

Security 简单的rand函数能否作为OTP发送?这其中的弱点是什么?,security,password-protection,one-time-password,Security,Password Protection,One Time Password,我正在做一些研究,以决定如何生成一次性密码。根据我到目前为止遇到的材料,每个人都使用一些带有随机/伪随机密钥的散列和加密函数。为什么基本随机函数不能用作一次性密码?如果密码生成只需要在服务器上进行,并发送到客户端(通过文本),那么这种方法有什么缺点吗?我最近与安全专家就随机函数的使用进行了一次有趣的讨论。根据您使用的库的不同,随机性并不是那么随机的,理论上,它会让某人有可能预测随机性的结果,从而猜测密码。(例如,VBA中的随机函数不是随机函数。如果不初始化该函数,则在同一序列中始终会得到相同的随

我正在做一些研究,以决定如何生成一次性密码。根据我到目前为止遇到的材料,每个人都使用一些带有随机/伪随机密钥的散列和加密函数。为什么基本随机函数不能用作一次性密码?如果密码生成只需要在服务器上进行,并发送到客户端(通过文本),那么这种方法有什么缺点吗?

我最近与安全专家就随机函数的使用进行了一次有趣的讨论。根据您使用的库的不同,随机性并不是那么随机的,理论上,它会让某人有可能预测随机性的结果,从而猜测密码。(例如,VBA中的随机函数不是随机函数。如果不初始化该函数,则在同一序列中始终会得到相同的随机数)

这样说来,如果您没有使用“真实”随机生成函数,则根据您密码的预期寿命(因为它是一次性密码,我认为这相当短),可以进行某种“随机”,例如使用鼠标在给定窗口上的移动,或使用“计时器”在调用随机函数生成密码之前,如果适用


希望这有帮助

我最近与安全专家就随机函数的使用进行了一次有趣的讨论。根据您使用的库的不同,随机性并不是那么随机的,理论上,它会让某人有可能预测随机性的结果,从而猜测密码。(例如,VBA中的随机函数不是随机函数。如果不初始化该函数,则在同一序列中始终会得到相同的随机数)

这样说来,如果您没有使用“真实”随机生成函数,则根据您密码的预期寿命(因为它是一次性密码,我认为这相当短),可以进行某种“随机”,例如使用鼠标在给定窗口上的移动,或使用“计时器”在调用随机函数生成密码之前,如果适用


希望对您有所帮助

非加密PRNG的设计不安全。常见的弱点是:

  • 太小的种子。例如.net使用一个31位整数,它可以在几秒钟内枚举。攻击者观察一些输出并消除与预期不匹配的种子。一旦它们只剩下一粒种子,它们就可以预测未来的所有产出
  • 可预测的种子。e、 g.时间。这要么直接导致可预测的输出,要么至少缩小考虑种子的数量。例如,如果时间以毫秒为单位,并且攻击者知道何时将RNG初始化为20ms,则他们有1/20的机会猜测种子并预测输出
  • 如果有足够的输出,攻击者可以恢复PRNG的内部状态和/或预测未来的输出。这是类似的算法的情况

=>改用加密PRNG<在Linux上编码>/dev/uradom,在Windows上编码>/code>CryptGenRandom。如果您的语言为这些语言内置了包装器,请使用它们。在Java中,这是
SecureRandom
类。

非加密PRNG不是为了安全而设计的。常见的弱点是:

  • 太小的种子。例如.net使用一个31位整数,它可以在几秒钟内枚举。攻击者观察一些输出并消除与预期不匹配的种子。一旦它们只剩下一粒种子,它们就可以预测未来的所有产出
  • 可预测的种子。e、 g.时间。这要么直接导致可预测的输出,要么至少缩小考虑种子的数量。例如,如果时间以毫秒为单位,并且攻击者知道何时将RNG初始化为20ms,则他们有1/20的机会猜测种子并预测输出
  • 如果有足够的输出,攻击者可以恢复PRNG的内部状态和/或预测未来的输出。这是类似的算法的情况

=>改用加密PRNG<在Linux上编码>/dev/uradom,在Windows上编码>/code>CryptGenRandom。如果您的语言为这些语言内置了包装器,请使用它们。在Java中,这是
SecureRandom
类。

什么是“基本随机函数”?语言提供的内置随机函数:例如Java的Math.random()。如果使用随机值,如何让服务器和客户端生成相同的值?我希望通过第二个通道(文本消息)将OTP传输到客户端。因此,只有服务器才能产生价值。(让我将问题改写为包含该信息)如果一个随机数生成器在加密方面很强大,那么使用它就可以了,否则就不行了。什么是“基本随机函数”?语言提供的内置随机函数:例如Java的Math.random()。如果使用随机值,如何让服务器和客户端生成相同的值?我希望通过第二个通道(文本消息)将OTP传输到客户端。因此,只有服务器才能产生价值。(让我将问题改写为包含该信息)如果一个随机数生成器在加密方面很强大,那么使用它就可以了,否则就不行了。