阅读有关使用智能手机作为一次性代码生成器的基于 TOTP 的身份验证系统的信息,我似乎了解共享密钥通常由“服务器”(用户必须对其进行身份验证的系统)自动生成,然后以 Base32 或其他仅产生“人类可读”字符的编码,然后用户在他/她的智能手机应用程序中输入该秘密,该应用程序将用于生成一次性代码。通常,服务器生成的秘密被编码成二维码,以便用手机扫描,以使用户更容易将秘密输入到应用程序中。
假设上面确实是一个典型的配置(我不确定),我想知道让用户选择共享秘密并将其传达给要存储的服务器的缺点是什么,而不是另一种方式。
也就是说,用户将创建共享秘密并将其保存到他/她的智能手机应用程序和服务器中,并且服务器将按原样使用这样的秘密(我的意思是不将其视为已编码)。或者,用户将创建秘密并将其编码为 Base32,然后将其保存到服务器中,服务器将认为它已编码。
由于在我的理解中,这两种情况都不是典型的 TOTP 系统的工作原理,因此我确信没有让用户选择共享密钥的原因是有的,我想知道它们。
补充:我在这里得到了很多信息,澄清了我的很多疑问。但我仍有疑问。据我了解,两因素身份验证的主要目的是将您知道的东西(您的常规密码)和您拥有的东西(代码生成设备)结合起来,但该设备可以是普通的智能手机,它变成了代码-生成设备仅归功于用户将秘密输入其中(无论如何,二维码或键盘或其他方式,它仍然是用户需要知道的一条信息,仅此而已)。我不知道该怎么回复声称“秘密是你知道的东西,或者和密码一样多”的人。
换句话说,我确实理解银行提供给用户登录的代码生成设备是用户拥有的东西,而不是用户知道的东西,那是因为该设备在提供给用户之前已经设置了秘密。用户,所以用户不知道秘密,所以如果用户成功验证,则意味着它实际上是实际拥有该设备的人。但是,如果该设备是普通智能手机,而用户本身应该输入秘密(例如通过 QR 码),那么成功的身份验证仅意味着它是知道秘密并将其输入他/她的智能手机。