algorithm - 穷人的认证算法?

标签 algorithm language-agnostic authentication

头脑 Storm 请求

我需要一个关于具有一些不寻常要求的身份验证算法的想法。

该算法将用于验证消息的发件人是否合法。

限制:

  1. “传输层”是电子邮件
    • 发送者('Alice')是一个人
    • Alice 只能使用网络浏览器和互联网访问(包括网络邮件帐户)作为她的工具;因此她不能做非常复杂的计算
    • 接收方(“Bob”)是一台无法直接访问互联网的计算机。
    • Bob 有一个定期检查的电子邮件帐户。
    • Bob 可以发送电子邮件。
    • 不向第三方发送信息:AliceBob 不能发送任何带外信息。读取一些公开可用的信息(例如来自时间服务器的时间)是可以的。

假设:

  • Alice 可以在本地访问一些信息:也许她带着笔记本,或者我们甚至可以假设她的网络邮件帐户是防黑客的,因此可以存储敏感信息那里。
  • AliceBob 可以在身份验证之前直接交换敏感信息(私钥?)

非目标:

  • 不需要对消息的实际负载进行编码。
  • 速度/延迟不是(大)问题

帮助您入门的一些想法:

  1. 普通的旧硬编码密码。
    问题:

    • 暴力攻击(不太可能)
    • 如果以明文形式进行通信,则可能发生窃听,然后可能发生重放攻击
  2. 基于当前日期/时间的简单算法
    示例:Alice 添加当前日期、小时和分钟,并将结果作为身份验证 token 发送,Bob 可以验证。假设对时间服务器的只读访问不违反规则 #7(无第 3 方)。
    问题:

    • 通过模糊实现安全:该算法之所以安全,只是因为它不是公开可用的(好吧,现在是......哎呀!)
  3. 某种质询-响应机制 - Alice 发送身份验证请求,Bob 回复质询,Alice 发送预期的响应和实际的有效载荷。
    机制的详情为何?我不知道:)

能想到什么?我希望看到一些有创意的答案 ;-)

编辑:

也许举个例子会让规则 #3 更清楚:让我们假设 Alice 使用专有的闭源设备 <cough> iPhone <cough> 访问互联网,或者她正站在公共(public)互联网亭前。

最佳答案

我对人类友好的低技术挑战-响应机制的想法:

  1. Bob 每次收到有效消息时都会更改挑战(例如,他对当前时间进行加盐哈希)
  2. 每条发送给 Bob 的无效消息都会让他回复当前的质询,因此 Alice 可以通过发送空邮件来查询他
  3. 一旦 Alice 知道挑战,她就会转到 https://www.pwdhash.com/
    • 在“站点地址”中,她输入了当前的挑战
    • 在“站点密码”中,她输入了她的个人密码(Bob 知道)
    • PwdHash 生成“哈希密码”
  4. Alice 给 Bob 写了一条消息,使用刚刚创建的散列作为主题
  5. Bob收到消息,根据PwdHash算法对当前challenge和Alice的密码进行哈希运算,看自己的结果是否与消息主题匹配
  6. 如果是,Bob 接受消息并发送包含新挑战的确认(基本上这是第 1 步)

优点:

  • 便宜又简单,甚至可以在相当现代的移动设备上运行
  • 人性化(无需数学,易于内存,网络上很容易获得先决条件)
  • 不可能进行重放攻击
  • 网络上没有明文密码
  • 不会用完密码(就像一次一密一样)
  • 没有固有的时间限制(就像 RSA token 一样)
  • PwdHash 网站可以保存在磁盘上并在本地调用,这里没有第三方依赖

缺点:

  • Bob 和 Alice 必须预先共享一个 key (Alice 的密码),因此 Alice 不能在场外更改她的密码
  • 泄露 Alice 的密码是最简单的攻击媒介(但几乎所有受密码保护的系统都是这种情况)

请注意,PwdHash 是一种开放的哈希算法,Bob 可以很容易地实现它。 PwdHash 网站在没有回发的情况下工作,一切都只是客户端 JavaScript,没有留下任何痕迹。

关于algorithm - 穷人的认证算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/569183/

相关文章:

java - "if"语句对时间复杂度分析有影响吗?

algorithm - 非线性 SVM 的原始权重

c# - 为什么以及如何 `a+++b` 被解释为 `(a++) + b` 而不是 `a + (++b)` ?

php - 添加验证码到 Symfony2 登录

java - YouTube API Auth 类中的 Nullpointer 异常 - 使用 Java 上传视频

在单位正方形上的均匀点上找到图的连通距离的算法

web-services - MIME 类型 Web 服务的文件扩展名?

database - 存储映射 "key -> event stream"的最有效方法是什么?

javascript - Facebook登录验证码调用循环函数两次

algorithm - 计算从网格中的一个正方形到达另一个正方形的步数,并将其用于 A* 算法中的 h 成本