【问题标题】:Creating deterministic one time passwords for every device为每台设备创建确定性一次性密码
【发布时间】:2013-08-19 10:55:33
【问题描述】:

我希望在一组平板电脑上安装一个 Android 应用程序,以供公司内部使用。这些平板电脑将在现场使用,我希望密码在 30 天后过期,并每 30 天切换到预先确定的(但看似随机的)密码。我希望该密码对于应用程序的每个平板电脑/安装都是唯一的。在分发之前,我将自己在每台平板电脑上安装应用程序。

我查看了各种 OTP 方案,但找不到一种无需连接到服务器即可工作的方案。老实说,我以前从未做过这样的事情,有点不知所措。这些平板电脑中的大多数在现场都无法访问互联网,我希望能够让用户在 30 天后致电以获取下一个密码。

因此,理想情况下,每个设备都有一个预先确定的伪随机数序列,用户将获得本月的密码,30 天后,他们必须致电获取特定平板电脑当月的密码.

希望这是有道理的。

谢谢

【问题讨论】:

    标签: android security random passwords


    【解决方案1】:

    好的,我将分享一些关于如何实现这一目标的想法。

    阅读本文时,我的第一个想法是“您可以通过与服务器交互来完成所有这一切,坦率地说,有了这种支持会很容易”,当然,直到您注意到这是不可能的。

    我在几个假设下提出这些建议:

    1. 贵公司的任何人都不会尝试以任何方式利用该应用程序 - 例如过度缓冲或更改应用程序语言或 utf 设置等。他们也不会尝试查看任何源文件.

    2. 您始终会在公司中的人员使用设备之前获得设备。

    好吧,处理 30 天困境:最简单的方法(虽然也是最容易出错的方法)是在用户登录时获取系统当前时间(和日期),并设置“天" 作为计数器 "30 或 "0"。这可以使用 Time now = new Time(); now.setToNow();Calendar c = Calendar.getInstance(); 完成。将此“天”存储在您自己的 SharedPreferences 或只是 DefaultSharedPreferences 中。每次应用程序启动时检查这一天您当前的日期,并计算已过去的天数。如果当前天数为 30 天或更长,请重置密码。

    ^这是最简单的之一,也是非常“错误...满?” (想不出一个好词)解决这个问题的方法。现在进入密码:

    我建议使用 UUID 作为密码。尽管制作的标识符在“技术上”不是唯一的,但两次获得相同密码的机会......在您的情况下非常接近于零,这可能不会发生。

    生成这些并存储,假设将 1000 个不同的密码存储到每个设备上的文件中(一个简单的文本文件,每个密码位于不同的行即可),并在您自己的记录中保存一份副本(确保您知道哪些密码转到哪个设备)。

    然后,当之前的日历计数器关闭时,将应用程序的密码设置为文件中的“下一个”密码,从文件中删除前一个密码。公司员工用他的应用程序 ID 给您打电话(生成用户可以在每个应用程序中看到的应用程序 ID。所以第一个获得他的应用程序的人有应用程序 #1,第二个是应用程序 #2 等等,这样您就知道哪个密码文件您应该阅读)您可以将新密码发送给他。

    这是处理此问题的两种简单方法,但它们至少可以让您思考。希望我能帮上一点忙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 2017-01-26
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多