问题标签 [totp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1212 浏览

algorithm - TOTP 算法是否依赖于客户端时间始终正确同步?

如果由于某种原因手机时钟/日历关闭了很长时间,会发生什么情况。TOTP(基于时间的 OTP)算法是否生成无效令牌?时区是否在令牌正确中起作用,或者客户端和服务器是否都与网络时间协议服务器通信以确保一切都同步?

0 投票
4 回答
14243 浏览

qr-code - 使用 Google Authenticator 进行双重身份验证 - 手动键入密钥而不是扫描 QR 码

在 Google Authenticator 应用程序中,您可以扫描 QR 码或手动键入颁发者提供的密钥。

在下面的屏幕截图中,您可以看到 Google Security 设置中的 2FA 设置,显示如何按照第二种方法获取 TOTP。

Google 2FA 设置 - Google 身份验证器设置

我的问题是:这个密钥是如何生成的?

我正在尝试使用 Google Authenticator 为我的网站支持 2FA,我发现了许多关于如何生成 QR 码的参考资料和文档,但甚至没有提到替代方法。

编辑:

为了更清楚一点,我在 Grails 3 webapp 中使用 Google Authenticator 支持 2FA。我已经实现了整个用户流程,为每个用户生成一个密钥(Base32字符串),提供一个二维码供用户扫描,并在登录时验证 TOTP。我用作依赖项:

  • org.jboss.aerogear:aerogear-otp-java, aerogear OTP以方便地根据 GA 的 TOTP 验证用户密钥
  • org.grails.plugins:qrcode, qrcode Grails插件生成二维码

我的问题是关于在 Google Authenticator 应用程序中添加新条目的两种方法:1. 扫描 QR 码(我这边一切正常) 2. 手动输入帐户名称和字母代码(在我的第一个屏幕截图中,代码是在 Google 安全设置中提供)

您可以看到来自 GA for Android 的解释性屏幕截图:

Google 2FA 设置 - Google 身份验证器设置

如何生成并向用户提供此类代码(从fzee第一个屏幕截图开始,并在第二个屏幕截图中命名为“提供的密钥”)?我确定它是同样数据字符串的编码,也编码在 QR 码中,但我不知道是哪个(不简单Base32)。

0 投票
1 回答
1278 浏览

wordpress - Wordpress 一次性访问受密码保护的页面

我正在创建一个受密码保护的 wordpress 页面。它包含一个需要在 3 小时后提交的表单。在那段时间之后,用户应该退出,无论他是否填写了表格。他应该无法再次登录。

到目前为止,我已经设置了一个计时器,之后页面的内容就会消失。现在我需要一个工具来阻止特定用户重新登录并重新提交表单。用户不会在我的网站上注册。我想通过电子邮件向他们发送受保护页面的密码。

我不能在登录后简单地更改密码,因为到目前为止,该页面受每个潜在用户都需要使用的密码保护。

对我来说,避免重新登录的最简单方法似乎是为这个特定页面颁发一次性密码,因此每个用户都可以根据要求获得自己的 OTP。

我正在寻找一个为特定 wp 页面生成 OTP 列表的插件。非常感谢简单的解决方案,因为我不擅长编码!

感谢您的帮助。每个人都从某个地方开始...

0 投票
0 回答
49 浏览

security - 在服务器上使用用户密码加密 2FA 种子是否安全

主要问题是:如何在服务器上安全地存储 2FA TOTP 种子。假设我将所有用户信息存储在 DBMS 的表中。我想保护用户数据免受整个数据库被盗的情况。

用户密码被散列和加盐,但我不能对 2FA 种子做同样的事情。

我有这个想法,用从用户密码派生的密钥对称地加密 2FA 种子。在登录期间,我将使用给定的密码来检查哈希版本,并使用相同的密码来解密 2FA 种子。密码本身将无处存储。

我担心的是这种方法实际上会削弱安全性,并且入侵者将能够恢复拥有数据库的用户密码(例如通过暴力攻击)。

0 投票
0 回答
1456 浏览

encryption - 如何保存两因素身份验证 TOTP 秘密?

我目前正在开发基于totp的两因素身份验证。为此,您必须生成一个秘密并将其保存在服务器端和客户端(通常通过 QR 码)。

我的问题:如何将其存储在数据库中?我的要求是安全保存,最好是加密的。散列不起作用,因为我需要能够拥有纯文本值才能计算totp密码。当我加密它时,用什么密钥?我应该使用通用密钥吗?我应该使用用户的密码作为密钥吗?这样做的缺点是,当密码重置完成后,我不能再解密totp密钥了。

有任何想法吗?

0 投票
1 回答
497 浏览

javascript - 池设置期间是否配置了使用的 Cognito MFA 类型?

Cognito Javascript SDK示例片段包含以下标记:

Cognito 是否区分使用TOTP或 SMS 的 MFA?例如,上面的代码片段不允许我们选择我们想要的 MFA 类型,那么这是在池配置期间设置的吗?

一直滚动到示例文档的底部会显示以下代码示例:

PreferredMFA参数似乎是一种奇怪的方式来指定首选 TOTP。那么我们是否会默认为 SMS MFA 设置用户,然后使用如上所示的 API 调用将他们切换到 TOTP?此外,我们如何传递初始 TOTP QRCode / 种子以及用户使用哪个 TOTP 应用程序?

0 投票
1 回答
127 浏览

server - 在 WSO2 IS 中启用 TOTP 的 CURL 请求出错

我在使用 WSO2 IS 中的 TOTP 管理服务时遇到问题(https://docs.wso2.com/display/ISCONNECTORS/Using+the+TOTP+API#UsingtheTOTPAPI-EnableTOTPEnableTOTP)。我发送以下请求:

并得到这个错误:

TOTP 配置正确,因为我可以手动启用和禁用它。请帮我!

0 投票
1 回答
108 浏览

ios - 如何在基于时间的应用程序的 OTP 之间保持同步,例如 Google 身份验证器、iOS 中的 Authy

我正在开发一个使用计时器每 30 秒生成一次顶部的应用程序。我从扫描的 QR 码中获取密钥并将它们附加到一个模型数组中,对于每个密钥我生成 tOTP 并将它们附加到另一个模型数组中。使用该模型数组,我正在填充 tableview。

tableviewcell 包含用于显示 otp 的标签和用于跟踪进度的自定义循环进度视图。主要问题是我无法与其他 TOTP 应用程序(如 Google Authenticator)保持同步。当我每秒运行计时器时,我可以每秒从 TOTP 生成器库生成 otps,并且可以通过重新加载 tableview 来更新标签。但是此功能会影响进度视图,删除编辑 tableview 单元格,因为我每秒运行计时器以生成 otp 并重新加载 tableview。希望有人帮助...

这是我的代码...

这是模型对象...

这是生成 TOTP 的生成器类...

0 投票
1 回答
91 浏览

haskell - 使用 Cryptonite 与 Google Authenticator 交互

我正在尝试生成 TOTP,以便我可以使用 Google Authenticator 应用程序。我正在使用cryptonite提供 TOTP 功能的库。

据我了解,Google Authenticator 需要 Base32 中的密钥。它还需要=删除填充。Cryptonite 提供了一个unpad函数,但我并不真正理解它是如何工作的,因此无法弄清楚第一个参数应该是什么,我尝试过的所有内容都会使函数 return Nothing

出于测试目的,我选择了一个没有填充的密钥,但是,我的程序生成的代码与 Google Authenticator 生成的代码不匹配。

代码产生的Base32密钥如下:

GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ

将其输入 Google Authenticator 不会产生与我的代码产生的结果相同的结果。

这是我的代码:

总之,我不确定如何=从密钥中取消填充字节。其次,当使用没有填充的键进行测试时,我仍然没有得到正确的结果。

编辑:如果它对任何人有帮助,我确实设法在没有使用的情况下在 Haskell 中找到了某人的 Google Authenticator 实现,cryptonite但是我仍然无法弄清楚为什么我的代码不起作用。 Haskell 中的 Google 身份验证器

0 投票
0 回答
95 浏览

java - 如何保证用户的设备时间是更新的?

在我们的 Android 应用程序中,我们使用Time based OTP(totp)。如果用户的设备时间处于理想状态(通常是加/减 1-2 小时) ,则totp可以正常工作。但是,当设备日期/时间错误(例如比实际时间晚 4 小时)时,我们的 totp 身份验证不起作用,因此我们必须确保更新用户的设备时间,如果不是,我们必须显示警告或强制用户进行更新。

我认为 Whatsapp 有类似的检查,如果设备时间错误它会显示警告,我们如何以编程方式实现这一点?