我的银行帐户中设置了2FA。登录后,我会在手机上收到一个六位数的代码作为IM,并输入网站。这些代码似乎总是有一种模式。像111xxx,123321,xx1212之类的东西。

我认为这些代码一目了然,易于记住。是否有通用的业务惯例/最佳实践来规定这些代码具有使他们更容易记住的模式?

评论

我使用了很多2FA代码,但从未听说过这种模式。当然,有时候会有重复的数字,但是似乎它们出现的频率不足以表明发生了奇怪的事情。累积一百左右左右的时间后,跟踪代码并对数字进行统计分析可能会很有帮助。

我同时使用文本2FA和身份验证器应用程序代码,虽然我发现身份验证器应用程序代码中没有任何模式,但我发现发短信到手机中的代码通常很容易记住。

附带说明(这是infosec堆栈),作为SMS消息发送的因素不被视为安全的第二因素。许多系统没有提供更好的服务,但是如果您确实可以选择使用身份验证器应用程序或需要设备注册的服务,那就更好了。关于该主题的一个示例文章:techcrunch.com/2016/07/25/…

如果您想到一种模式,则它可能不适用于您的代码,但是如果您想到了一种代码,则该代码可能具有某种模式。一次,我必须为妈妈生成一个随机的Wi-Fi密码;我一直生成它们,直到发现我认为没有可评论的模式。然后她说:“您之所以选择它,是因为它有您的姓名缩写?”

@TobySmith我发现应用程序中的模式比SMS中的模式更频繁!

#1 楼

我也注意到了这一点,我认为这是人脑倾向于将模式应用于随机噪声的结果。当专门尝试记住一串数字时,这似乎更常见。

评论


我会说就是这样。这些OTP通常是随机生成的代码,它们试图尽可能地安全,在其创建过程中引入模式肯定会带来安全漏洞。另外,请注意这些数字有多短,再加上@ScarySpider提及的内容,就很容易记住它们。

–r41n
17/12/12在15:54

并且,一旦您开始注意到模式,确认偏差就会接管。

–麋鹿男孩
17年12月12日在20:10

#2 楼

六位数随机数中大约有85%将至少具有一个重复数位,而40%将会具有一个重复的连续数位。 (我很高兴在数学上得到纠正。)

这些密钥是使用标准TOTP算法生成的。本文总结了此实现,表明没有任何努力来生成令人难忘的号码:


根据RFC 6238,参考实现如下:

同意T0,Unix时间开始计算时间步长,以及间隔TI ,该值将用于计算计数器C的值(默认为Unix时期为T0,30秒为TI)
同意密码哈希方法(默认为SHA-1)
令牌长度N(默认值为6)

尽管RFC 6238允许使用不同的参数,但身份验证器应用程序的Google
实现不支持T0,TI
值,哈希方法和令牌长度与默认值不同。它还希望根据RFC 3548以base-32编码输入(或以QR码提供)K密钥。

一旦参数达成一致,令牌生成如下:


计算C为TI在T0之后经过的次数。
计算HMAC哈希H,其中C为消息,K为密钥(在上一节中定义了HMAC算法,但是大多数密码库也支持它)。 K应该按原样传递,C应该作为原始64位无符号整数传递。
取H的至少4个有效位并将其用作偏移量O。 H从O字节MSB开始,丢弃最高有效位,并将其余存储为32位(无符号)整数I。
令牌是基数10中I的最低N位数字。如果结果位数少于N,则用左侧的零填充它。

服务器和客户端均计算
令牌,然后服务器检查客户端提供的令牌是否与本地生成的令牌匹配。某些服务器允许在当前时间之前或之后生成的代码
,以解决轻微的时钟偏斜,网络延迟和用户延迟。


评论


IM交付的OTP没有理由使用这种算法。最有可能只是/ dev / random中的六个随机数字。

–Sneftel
17年12月11日在22:37

@Sneftel的确具有服务器不必存储OTP的优点。它只是在输入一个时计算它。它还处理这样的事实:该代码仅对短窗口有效。如果使用随机数,则必须存储生成的内容及其到期日期。显然,在没有第二个因素的情况下,任何一个都能同样有效地工作。

–克里斯·海斯(Chris Hayes)
17年12月12日在0:02

您可能无法知道未命名的van是否使用TOTP,所以我将对冲该声明。但是+1是做数学的。

–安德斯
17年12月12日在8:45

@Sneftel虽然“即时消息传递的OTP”不必使用上述算法是100%正确的,但是通常当人们引用2FA和OTP时,会实现并使用上述算法。这是一个非常安全的假设。但是,是的,如果您必须对此感兴趣,那么没错,它不必指的是RFC6238。那么,给我们留下的就是数字似乎有某种模式的原因,对此我表示同意,两种解释(RFC 6239或/ dev / random),以及当前接受的答案。

–RobIII
17-12-12在13:44



如果有的话,使用HOTP生成IME文本代码的可能性要大于使用TOTP生成的代码。很难知道代码将在多久之前到达并必须被接受。您也不希望在同一时间段内的两个请求生成相同的代码。

–otus
17年12月13日在6:26

#3 楼

在我的手机上,我收到了来自各个公司的大约90个验证码。其中的62位数字为6位数字。这是每个数字的位数:




可能略微偏向1,8和9吗?几乎可以肯定的是,数据中只有噪声(62是一个小样本)。

两位数怎么办?


第一个图形只是上面的两位数2位数字的边界(即AABBCC)-因此,我们希望每对在186个可能的数字位置中出现1.86次。第二个是任何展示位置(即XXX99X算作两位数)。我们希望在310个展示位置中每对大约有3.1次。

似乎没有明显的偏斜,双位数比非双位数多得多-橙色以两位数表示。在后面的数据中,我们期望大约31位双位数,而我们得到27位。这似乎是合理的。

当然,这并不排除其他“非随机”模式-但老实说人类可能正在寻找模式-查看这些数字,这些数字全部来自我的2FA应用:365 595、111216、566 272、468 694、191 574、833043。

评论


由于我喜欢图表而被投票。

–烧烤
17年12月14日在17:58

#4 楼

我希望这只是您的随机机会。如果存在模式,则将削弱拥有第二个代码的整个目的。

不,他们不是故意要容易记住的,并且没有通用的业务案例,除非他们收到用户输入6个数字有困难的反馈。那时有人可能做了一些愚蠢的事,但我真的希望不会。

#5 楼

这也与人类倾向于思考随机性的方式有关。在真正的随机性中,重复的数字和重复的模式比我们期望的要频繁得多。当要求人们创建“看似”随机的数字序列时,他们倾向于避免重复图案或数字(以及其他怪癖,例如过度使用“ 7”,未充分使用“ 0”和“ 2”等等)。如果您要求某人在1到100之间选择一个“随机”数字,则该数字通常会包含7,并且通常为37(或17)。您可以研究人们手动选择的彩票号码,因为人们通常会尝试挑选具有随机外观的东西(错误地认为,具有随机外观的号码更有​​可能赢得随机抽奖)。

如果人类尝试模拟随机抛硬币,则他们在头和尾之间的交替要比重复最后的结果多得多,从而可以相当确定地预测其下一个值(下一个值的可能性大于50%)

重复的数字或两位数序列在真正的随机6位数字中非常普遍(例如,连续重复数的〜41%,〜85)任意位置重复数字的百分比),而在“随机”的6位数字中却很少见,您要求人类提出。

评论


在彩票中选择一个真正的随机数是一种合理的策略,因为您不太可能与很多其他人分享奖金。当然,由于大多数彩票都有“给我真正的随机数”选项,因此手动进行尝试会有点愚蠢

–Richard Tingle
17年12月11日在23:58

这是正确的,不要与“看似随机的”(对人类)数字相混淆,这对彩票来说是不利的。在彩票进入者中,迷信起着重要作用,人们拥有“幸运”数字,等等。

–胸骨
17年12月12日在0:29

@fjw好吧,但是您怎么知道人们选择随机数,因为他们错误地认为随机数更有可能获胜,而不是根据合理的信念(随机数会最大化他们的收益)来选择随机数(再加上我们无法选择真正的随机数)? (在任何情况下,答案均为+1)

–放松
17年12月14日在17:09

“默认”不是选择您自己的数字,而是随机生成它们。始终要相信自己可以以某种方式胜过随机数生成器,而无论是最大化收益还是获胜的概率,来具体选择自己的数字。如果您认为可以让他们获得更多的“随机数”,或者可以选择比自动生成的数字更好的“随机数”,那是错误的。迷信起着很大的作用,也许还有一些偏执:自动生成的数字以某种方式对您不利。

–胸骨
17/12/14在22:43