问题标签 [nonce]
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.
python - 在 Python 中生成随机数的标准方法是什么?
有人可以分享在 Python 中为 OAuth 请求创建随机数的最佳实践吗?
php - CSRF 令牌与 Nonce 混淆——它们是一样的吗?
为了使我正在开发的当前应用程序更安全,我一直在阅读有关 CSRF 令牌和 Nonce 的信息。
我的问题很简单,CSRF 令牌和 Nonce 是一回事吗?到目前为止,我可以收集到的是,这两种方法都有不同的技术来实现相同的目标,还是我误解了什么?
如果它们不同,您能否提供一些示例代码或指向一些链接,我可以在其中了解有关如何在 PHP 应用程序中实现 nonce 的更多信息。
谢谢!
security - 使用 MITM 攻击安全地推导 IV (Nonce)
我知道对于大多数密码来说,一个好的随机数非常重要。我正在使用 AES-GCM,并且正在使用 96 位随机数和 256 位 AES 密钥。我之前在这里问过一些关于如何通过不安全的渠道协商随机数的问题。
我正在使用 ECDH 导出共享密钥,并计划使用 X9.63 标准方法从中导出密钥材料。我知道在协商密钥时可以将随机生成的 96 位附加到盐的末尾。然后我可以像 XOR 一样以某种方式将两者结合起来(这是一个点对点系统),并有一个随机的、好的随机数。
当然,这并不能阻止 MITM 攻击,比如通过 ARP 欺骗。公钥本身由中央服务器认证,其公钥与应用程序一起分发。因此,认证不能因为使用GCM而被篡改。但是,随机数当然没有经过认证,因此可以潜在地 MITM 对等方,保持他们的密钥相同,但用可预测或静态(或全零或其他)的东西替换 IV,这会导致所选对象的漏洞(已知?)明文攻击。
这是我正在谈论的事情的一个场景,以防它令人困惑。Alice (A) 和 Bob (B) 都生成良好的随机 96 位 nonce 材料(Am 和 Bm)并将它们附加到他们的 x.509 证书中。为了说明,我将使用小数字 Am=1234 和 Bm=4321。当没有 MITMed 时,每个人都会计算 Am⊕Bm = 5171。这将用作随机数。Eve 决定 MITM 他们打败 IV。她确保他们最终会得到常数 IV “6666”。当 A 向 B 发送 Am“1234”时,Eve ARP 欺骗 Bm 并将其替换为“2795”。当 B 将 Bm“4321”发送给 A 时,Eve 将其替换为“7896”。1234⊕7896 == 4312⊕2795 == 6666。
以下是我的想法/想法:
使用签名密钥 (ECDSA) 对 nonce 材料进行签名:在这一点上,我无法验证 GCM 本身之外的任何内容(即我没有使用 ECDSA 密钥或管理它们)。我想严格遵守 Suite B 算法。我知道我可以使用 GCM 验证明文(AEAD 的“AD”部分——带有关联数据的验证加密),但当然我还没有建立 IV……所以我不能用这个验证 IV 材料,可以我?对我来说,我似乎应该能够只使用 GCM 的对称密钥(我已经通过 ECDH 建立)来对此进行身份验证,因为它不需要加密,所以没有秘密——只有明文和 GCM MAC - 但我无法弄清楚如何在没有 BC 的 IV 的情况下初始化 AEADBlockCipher。“傻瓜”会不会很蠢 首先用全零 IV 初始化密码,正确的密钥,然后将 Nonce 处理为“关联数据”(未加密),最终确定缓冲区(附加 MAC),将其发送给对等方,然后重新初始化用真正的 IV 和相同的密钥加密?或者,我很确定我可以使用 ECDSA 签署随机数(如果我愿意,可能与 ECDH 公钥一起),但这需要分发也由服务器认证的 ECDSA 公钥,这增加了我想要的复杂性宁可避免(这也是我的第一个签约想法)
记录并禁止重复使用相同的 IV/Key 组合:IV 的重要之处在于它只与给定的密钥一起使用一次。因此,如果有人进行上述 MITM 攻击以反复用人为替换 IV,这个想法只会注意到并关闭连接。如果他们用派生出未使用 IV 的有效替代对替换它,攻击者将不会获得任何优势(对吗?)。在我的设计中,ECDH 对的私钥从未真正命中磁盘,因此在程序调用之间我将拥有所有新的对称密钥,因此这组密钥+IV 对可以很容易地保存在内存中,所以我真的很喜欢这种方法:- )
使用来自 ECDH 的秘密材料作为“面具”来制作秘密 IV:获取已建立的ECDH秘密材料(尚未传递给X9.63密钥生成器(BC中的ECDHKEKGenerator))。以某种方式从中获取 96 位 (Km),例如材料本身的前 96 位或材料的 SHA-1 摘要的前 96 位。Alice 和 Bob 生成随机的 96 位 nonce 材料(Am 和 Bm)。A 和 B 分别计算 Am⊕Km 和 Bm⊕Km,然后将它们的值发送给对方。一旦 A 有 Bm⊕Km,B 有 Am⊕Km,A 执行 Km⊕(Bm⊕Km) 得到 Bm,B 执行 Km⊕(Am⊕Km) 得到 Am。然后 A 和 B 都执行 Am⊕Bm,我们最终得到了 IV。如果它被篡改,A 和 B 将有不同的 IV,因为 Eve 不知道 Km,所以她不能精确地操纵它,对吧?这将导致 GCM 在交换第一条消息时检测到篡改,因此不会造成任何伤害。这种方法有什么问题?
很抱歉这个问题很长,请不要告诉我不要实现自己的协议,因为我这样做是为了了解作为 CS 学生的实现细节——而不是如何忽略它们。
sip - SIP 代理认证失败
我正在开发一个连接到 Asterisk 服务器并尝试拨打电话的 SIP 用户代理应用程序。我正在使用 JAIN SIP API 的 NIST 实现。
当应用程序注册自己时,401(未授权)响应会使用 WWW-Authenticate 标头对其进行质询。应用程序将 Authorization 标头插入到下一个 REGISTER 请求中。这次 Asterisk 返回一个 200 (OK) 响应——注册成功。
当应用程序发送 INVITE 请求时,Asterisk 会以 407(需要代理身份验证)响应进行响应。这次响应包含一个 Proxy-Authenticate 标头。我的应用程序再次发送了一个 INVITE,但这次带有 Authorization 标头,Asterisk 使用相同的 407(需要代理身份验证)响应进行响应。
以下是传输的 SIP 消息('>>' 表示传出消息;'<<' 表示传入消息):
>>
<<
<<
>>
<<
<<
>>
>>
<<
>>
>>
<<
在这两种情况下,Authorization 标头的构造方式完全相同(执行相同的代码)。我将请求的请求 URI 用于“digestURI”。我尝试使用 Proxy-Authorization 标头而不是 Authorization 标头,但结果是一样的。
谁能看到我做错了什么?提前致谢。
c# - 通过生成随机数令牌来防止 CSRF?
我正在阅读这篇关于通过创建一个 nonce 令牌来防止 CSRF 的文章,该令牌将在 ajax 函数中作为变量发送,并且会话与令牌中的值相同。这是一个好主意吗,因为我真的不喜欢在大型网站上使用会话特别是一直有很多活跃用户的大型网站,这会影响总体性能?
asp.net-mvc - 如何在 ASP.NET MVC 2.0 中使用 Nonce Key 防止重放攻击或多次回发
如何在 MVC 2.0 中使用 Nonce Key 防止重放攻击或多次回发
我正在为此寻找一个低级的实现解决方案。它不必是完整的,但任何在操作过滤器中为此目的使用 Nonce 键的示例都将受到欢迎。
这个想法是通过按下多个按钮或输入按键来阻止用户提交多个表单。我已经有了一个 JavaScript 解决方案,但我现在正在寻找一个通用的服务器端选项。
我的问题基于此处提供的解决方案:What methods are available to stop multiple postbacks of a form in ASP.NET MVC?
security - zend 形式的 nonce
有谁知道是否存在以zend 形式使用nonce的方法。
注意:nonce 字段用于验证表单的内容是否来自当前站点上的位置,而不是其他地方。nonce 不提供绝对保护,但应该可以防止大多数情况。在表单中使用 nonce 字段非常重要。
提前致谢
validation - 我可以使用模型绑定验证 HTTP 请求签名令牌和随机数吗?
我正在使用 ASP.NET MVC 设置一个端点,可以向其发出操作和检索数据的请求(基本上是一个 API)。我正在使用 2-legged OAuth 模型来验证请求是否使用密钥和签名方法以及 nonce 表进行签名以防止劫持。
由于模型绑定在 ASP.NET MVC 中非常方便,我将利用它来处理请求,但我想知道是否可以将签名验证和随机数/时间戳处理直接烘焙到模型绑定器中。这可能吗?这样我就可以在我创建的各种动作上重复使用实现。
php - 我真的需要使用随机数吗?
我目前正在为 iOS 设备开发一个应用程序。这个应用程序从 wordpress 博客下载数据,但首先获取一个 nonce-token。这已经过测试,显示大约需要 2~3 秒,考虑到它是一个应该在几秒钟内准备好数据的移动设备,这已经很多了。除此之外,还必须下载数据,这需要另外 4~5 秒。
在数据获取方法中,采取了几种安全措施,例如需要在 Web 服务器和设备上匹配的秘密字符串(当然是加密的),以及某种简单的 UDID 验证 + 一些标头和用户代理测试。这足够了吗,还是我真的需要随机数?好像没有任何敏感数据通过,如果是,我当然会进一步加密。
我真的有必要使用随机数吗?
谢谢你。
http - HTTP认证,请求接连收到
可能会快速连续接收 HTTP 请求,为了避免为每个请求重新运行 while 协议,客户端可能会重复使用服务器 nonce(nonce 的时间戳来确定客户端请求有效的窗口)用于多个请求.
使用这种方法有什么优点和缺点?