为每个设备创建确定性的一次性密码

时间:2013-08-16 23:13:35

标签: android security random passwords

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

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

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

希望这是有道理的。

由于

1 个答案:

答案 0 :(得分:0)

好的,我会提出一些关于如何实现这一目标的想法。

我在阅读本文时的第一个想法是“你可以通过与服务器进行交互来完成所有这些工作,坦率地说,通过这种支持可以很容易”,当然,除非你注意到这是不可能的。

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

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

  2. 在公司人员使用设备之前,您将始终掌握设备。

  3. 好吧,处理30天的困境:最简单的方法(尽管也是最容易出错的方式)是获取用户登录时的系统当前时间(和日期),然后设置“日” “作为计数器”30或“0”。这可以使用Time now = new Time(); now.setToNow();Calendar c = Calendar.getInstance();来完成。将此“日期”存储在您自己的SharedPreferencesDefaultSharedPreferences中。应用程序开始时间检查当天的当天,并计算当天的天数。如果当前天数为30或更高,请重置密码。

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

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

    生成这些并存储,让1000个不同的文件放到每个设备上(一个简单的文本文件,不同行上的每个密码都可以),并将副本保存在自己的记录中(确保知道哪些密码去哪个设备)。

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

    这是处理这个问题的两种简单方法,但它们至少可以让你思考。希望我帮了一下。