用于防止重放攻击的 nonce 有必要使用密码学安全的随机数发生器生成吗?使用普通的随机数算法是否有安全问题?

6 小时 51 分钟前
 drymonfidelia
353 次点击
所在节点    信息安全
7 条回复
DefoliationM
5 小时 47 分钟前
有必要。
DefoliationM
5 小时 45 分钟前
伪随机数生成器是保证密码学安全最基础的东西了。
DefoliationM
5 小时 44 分钟前
普通的随机数,比如基于时间的,凡是有规律的都有可能被猜到。
drymonfidelia
5 小时 27 分钟前
@DefoliationM 实际的问题就是 nonce 被猜到是否会对安全性产生影响,因为 nonce 正常来说不是什么敏感信息
Citrus
5 小时 18 分钟前
@drymonfidelia 仔细看看算法说明,绝大部分模式都需要 nonce 不可预测,伪随机数发生器并不满足。
简单来说,nonce 存在的目的就是引入额外的随机性避免一些弱点。你用伪随机数发生器,就存在随机序列被预测的可能,就留下了新的弱点。
Citrus
5 小时 13 分钟前
更正一下,此处伪随机数发生器指一般的算法,不包括 CSPRNG 。
lesismal
4 小时 44 分钟前
个人感觉感觉好多人把概念和用途都搞混了,说说我的浅见总结


什么是重放?
用你的原始请求数据原封不动地再发一次或者多次,别人只需要知道原始请求数据、再次发送即可,不需要猜测 nonce 不需要破解加密算法等


防止重放攻击的主要维度:
1. 幂等
比如金融或者其他涉及资金之类的业务,订单 ID 本身的幂等性是最基础的,已经实现了幂等的功能即使被重放也只是消耗算力
2. 时间
如果服务端对访问的时间有效期不做限制,那么任何一个请求数据被保存下来之后,任何时间都可以再次用这个数据进行请求;
所以,防范重访攻击的基础,是对请求时间有效性进行限制和校验:每个请求应该带上时间戳,服务端对时间戳与服务器时间做有效性校验,比如时差超过 30 秒认为请求不合法。


以上两点以外的其他防范,例如猜 nonce 算法、破解加密算法之类的来伪造请求内容,本身已经是生成新的请求了、跟重放的字面含义就已经不符了。
所以,严格来讲这些不应该归纳为重放,而是应该属于密码学范畴的攻防扩展了,例如:
1. crypto ,内容加密,对称非对称不同等级
2. sign ,不同 hash 算法验签
3. nonce ,加盐

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1098615

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX