问题标签 [rfc-4226]

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 回答
988 浏览

java - 关于实施一次性密码系统,我还需要了解什么?

我的任务是创建一个一次性密码 (OTP) 系统,该系统最终将用于在移动设备上创建 OTP 生成器。

我们正在考虑使用计数器使用HOTP (rfc 4226),但可能会有一些变化。我们不需要遵守 OATH。

这是我在安全/加密领域的第一次体验,所以我试图避免(并了解)让安全新手陷入困境的安全陷阱,并更好地了解我需要做什么和知道要完成什么这个任务。

除了这个一般性建议之外,我还有一些关于实施这个项目的具体问题:

即使只是使用 SHA-1,HOTP 是否仍然被认为是安全的?我的一位同事建议我们应该使用 HMAC-SHA-512。切换我们使用的底层算法看起来很容易。我应该知道这里有什么副作用吗?比如增加处理时间?

我对计数器同步感到担忧。我应该使用什么作为可能的计数器值的理智前瞻?如果用户的点击超过了我们的前瞻限制,那么恢复同步的最佳方法是什么?与相应的 OTP 一起显示和发送计数器会更容易,还是会显着削弱安全性?

我对安全存储相关信息(例如共享密钥和计数器值)的最佳实践也没有很好的理解。

当您回答时,请记住我是这个领域的新手,并且仍在努力了解行话和首字母缩略词。提前致谢。

0 投票
2 回答
975 浏览

security - 锁定政策和一次性密码

我使用RFC 4226为我的网站实施了一次性密码系统。此密码通过 SMS 发送到移动设备。用户只能在移动设备上接收密码,密码在 15 分钟后过期。

用户还拥有通常使用的标准字母数字“主密码”。我已经实施了 3 次失败锁定工作流程。此锁定持续 15 分钟。

我的问题是从安全的角度来看,只锁定“主密码”是否可以接受?如果用户使用一次性密码功能,我应该允许用户绕过锁定策略吗?我是否打开了任何类型的安全漏洞?

0 投票
1 回答
683 浏览

cryptography - 这个 RFC 4226 错了吗?

RFC 的测试值指定:

因此,如果我尝试在 ruby​​ 中获得 0 的 HMAC,我会得到:

我被期望得到cc93cf18508d94934c64b65d8ba7667fb7cde4b0

所以我用java写了一个实现,我得到了同样的结果:

那么当秘密是“12345678901234567890”时,“0”的十六进制 SHA1-HMAC 是什么?

0 投票
1 回答
1087 浏览

delphi - Delphi HMAC-SHA1 意外结果

由于我无法在此线程中解释的原因,我正在使用旧版本的 Delphi (Delphi 5) 编写。我正在尝试实现一个 HOTP,目前我的所有代码都没有 HMACSHA1 部分,我不明白为什么。我根据 RFC 2202 实现了 HMACSHA,并将我的结果与许多其他 HMACSHA1 生成器进行了比较。所有这些都匹配。

然后我开始为 HOTP 实施 RFC 4226,并惊讶地发现我的中间 HMACSHA1 结果与他们在 RFC 底部提供的示例数据相比是错误的(https://www.ietf.org/rfc/rfc4226.txt)。

这是来自 RFC 的测试向量

以下测试数据使用 ASCII 字符串“12345678901234567890”作为密钥:

秘密 = 0x3132333435363738393031323334353637383930

表 1 详细说明了每个计数、中间 HMAC 值。

计数十六进制 HMAC-SHA-1(秘密,计数)

0 cc93cf18508d94934c64b65d8ba7667fb7cde4b0

但是,使用我的 HMACSHA1 函数,如下所示:

我尝试:

我的回答是

948d4b44f3e0aac05904d6fd82ab7b8bbe761a4c

这与下面链接的在线生成器相同

http://www.freeformatter.com/hmac-generator.html#ad-output

那么,我做错了什么?

0 投票
1 回答
713 浏览

arrays - HMAC SHA-1 截断 HOTP 逻辑

我正在尝试计算 HOTP 的手动 HMAC SHA-1 截断,但它不会返回与我使用源代码计算相同的结果。例如,我有生成 HMAC SHA-1 的代码:

$hash = hash_hmac('sha1','375317186160478973','test');

它会给我 HMAC = c359e469b8ef0939f83e79a300b20a6ef4b53a05

并将其划分为 [19] 数组,因此它将是:

c3 59 e4 69 b8 ef 09 39 f8 3e 79 a3 00 b2 0a 6e f4 b5 3a 05

从最后一个数组中,我有 05(二进制为 101),然后执行 101 & 0xf = 5

所以我从第 5 个数组 ef (11101111) 09 (1001) 39 (111001) f8 (11111000) 开始计数

之后执行 (((11101111) & 0x7f) << 24) | (((1001) & 0xff) << 16) | (((111001) & 0xff) << 8) | ((11111000) & 0xff)) % 战俘 (10,6)

它给了我一个结果:56024

但如果我使用这段代码:

它给了我一个结果:599808

如果我将二进制或十进制值写为数组中的值,将显示相同的不同结果。有人可以帮我解释我的错在哪里,这样我就可以计算手册和源代码,并给我一个相同的 HOTP 值。谢谢