问题标签 [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.
java - 关于实施一次性密码系统,我还需要了解什么?
我的任务是创建一个一次性密码 (OTP) 系统,该系统最终将用于在移动设备上创建 OTP 生成器。
我们正在考虑使用计数器使用HOTP (rfc 4226),但可能会有一些变化。我们不需要遵守 OATH。
这是我在安全/加密领域的第一次体验,所以我试图避免(并了解)让安全新手陷入困境的安全陷阱,并更好地了解我需要做什么和知道要完成什么这个任务。
除了这个一般性建议之外,我还有一些关于实施这个项目的具体问题:
即使只是使用 SHA-1,HOTP 是否仍然被认为是安全的?我的一位同事建议我们应该使用 HMAC-SHA-512。切换我们使用的底层算法看起来很容易。我应该知道这里有什么副作用吗?比如增加处理时间?
我对计数器同步感到担忧。我应该使用什么作为可能的计数器值的理智前瞻?如果用户的点击超过了我们的前瞻限制,那么恢复同步的最佳方法是什么?与相应的 OTP 一起显示和发送计数器会更容易,还是会显着削弱安全性?
我对安全存储相关信息(例如共享密钥和计数器值)的最佳实践也没有很好的理解。
当您回答时,请记住我是这个领域的新手,并且仍在努力了解行话和首字母缩略词。提前致谢。
security - 锁定政策和一次性密码
我使用RFC 4226为我的网站实施了一次性密码系统。此密码通过 SMS 发送到移动设备。用户只能在移动设备上接收密码,密码在 15 分钟后过期。
用户还拥有通常使用的标准字母数字“主密码”。我已经实施了 3 次失败锁定工作流程。此锁定持续 15 分钟。
我的问题是从安全的角度来看,只锁定“主密码”是否可以接受?如果用户使用一次性密码功能,我应该允许用户绕过锁定策略吗?我是否打开了任何类型的安全漏洞?
cryptography - 这个 RFC 4226 错了吗?
RFC 的测试值指定:
因此,如果我尝试在 ruby 中获得 0 的 HMAC,我会得到:
我被期望得到cc93cf18508d94934c64b65d8ba7667fb7cde4b0
所以我用java写了一个实现,我得到了同样的结果:
那么当秘密是“12345678901234567890”时,“0”的十六进制 SHA1-HMAC 是什么?
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
那么,我做错了什么?
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 值。谢谢