1. Entropy熵的定义

随机数的主要用途有:

  • To randomly select options from a pool or range of known options.
  • To generate initialisation vectors for encryption.
  • To generate unguessable tokens or nonces for authorisation purposes.
  • To generate unique identifiers like Session IDs.

熵是指随机数生成器可输出的不同状态结果的最大数量,该数值越大,则熵值也越大。当随机数生成器没有足够多的状态可供切换时,则会重复结果输出存在。
Entropy will basically define the maximum number of different states you random number generator may have at a given moment. The higher the entropy is, the higher possibilities there are.

如下例php代码中,随机数生成器以用户ID作为种子来生成sessionID。对于相同的用户,总会生成相同的sessionID。攻击者可预测的用户的sessionID然后劫持相应的session。下例同时还存在Small Seed Space问题 (CWE-339)。

function generateSessionID($userID){srand($userID);return rand();
}

2. hash函数的Entropy attack熵攻击

hash函数表示为HHH,通常会认为,无论zzz为何值,H(x,y,z)H(x,y,z)H(x,y,z)应有不低于H(x,y)H(x,y)H(x,y)随机性。
但是,若zzz值怀有恶意且可窥探x,yx,yx,y的值,则会产生Entropy attack熵攻击。

简单的以zzz值发起的熵攻击举例:
1) 生成随机数rrr;
2)尝试计算H(x,y,r)H(x,y,r)H(x,y,r);
3)若H(x,y,r)H(x,y,r)H(x,y,r)的结果值不以000000000000位开始,则重复步骤1);
4)输出z=rz=rz=r。

无论x,yx,yx,y取何值,以上攻击都强制H(x,y,z)H(x,y,z)H(x,y,z)以000000000000开始。而且该强制算法运行很快,通常平均仅需16次HHH运算即可达到H(x,y,z)H(x,y,z)H(x,y,z)以000000000000开始。

It’s well known (see, e.g., http://www.isg.rhul.ac.uk/~sdg/igor-slides.pdf) that an attacker who can predict the first 4 bits of each nonce can quickly compute the user’s secret key after a rather small number of signatures. Evidently hashing an extra entropy source does hurt—in the worst possible way; the attacker has the user’s secret key!—contrary to the conventional wisdom stated above.

3. 预防熵攻击的手段

摘自:https://blog.cr.yp.to/20140205-entropy.html

  • Read less-likely-to-be-malicious entropy sources after completing all reading of the more-likely-to-be-malicious entropy sources. Of course, this doesn’t help if the last source turns out to be malicious.
  • Increase the amount of processing, memory, etc. involved in H—as in hashcash, proofs of work in general, password hashing, etc. The costs are negligible, since all of this is done only once.

Let me emphasize that what I’m advocating here, for security reasons, is a sharp transition between

  • before crypto: the whole system collecting enough entropy;
  • after: the system using purely deterministic cryptography, never adding any more entropy.

参考资料:
[1] https://blog.cr.yp.to/20140205-entropy.html
[2] https://books.google.co.jp/books?id=8njTBwAAQBAJ&pg=PA187&lpg=PA187&dq=bad-entropy+attack&source=bl&ots=kpp45BfaBl&sig=ACfU3U2u3m917zYTnuiz8n3id418b9Ewug&hl=zh-CN&sa=X&ved=2ahUKEwjf3tuSy8XkAhUMr6QKHaQQA7sQ6AEwBnoECAkQAQ#v=onepage&q=bad-entropy%20attack&f=false
[3] https://cwe.mitre.org/data/definitions/331.html
[4] https://security.stackexchange.com/questions/94684/attacks-on-keys-generated-with-low-entropy
[5] https://security.stackexchange.com/questions/94646/how-much-entropy-is-good-enough-for-seeding-a-csprng
[6] http://www.isg.rhul.ac.uk/~sdg/igor-slides.pdf

Entropy attack——hash函数的熵攻击相关推荐

  1. 生日悖论与Hash函数的攻击

    生日悖论与Hash函数的攻击 生日悖论问题 什么是生日悖论问题 生日悖论问题求解 Hash函数的攻击 两个集合相交问题 Hash函数的攻击方法 Yuval攻击 生日悖论问题 什么是生日悖论问题 假定每 ...

  2. K:hash(哈希)碰撞攻击

    相关介绍:  哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值 ...

  3. 认知理论与技术(hash函数,SHA,MD

    概述: 认证是个过程,通过这个过程一个实体向另一个实体证明某种声称的属性 认证参数: "口令"相当于平时登录系统时输入的密码. "密钥"相当于公钥密码体制中的私 ...

  4. 密码学基础知识(六)Hash函数与消息认证

    Hash函数和消息认证 先说Hash 哈希函数,可以将任意长度的消息压缩为某一固定长度的消息摘要函数.一句话,Hash简直了. 当然有逆天的一面就有大缺点,过程不可逆.傻了吧,哈哈. Hash的性质: ...

  5. hash算法和常见的hash函数

    Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre--mage),通过散列算法,变换成固定长度的输出,该输出就 ...

  6. Hash函数及其重要性

    不时会爆出网站的服务器和数据库被盗取,考虑到这点,就要确保用户一些敏感数据(例如密码)的安全性.今天,我们要学的是 hash 背后的基础知识,以及如何用它来保护你的 web 应用的密码. 申明 密码学 ...

  7. 第六章、Hash函数

    1.Hash函数 1.Hash函数(也称散列函数)是一个将任意长度的消息x序列映射为较短的.固定长度的一个值y的函数. 2.Hash函数的目的是为需要认证的数据产生一个'指纹'. 为了能够实现对数据的 ...

  8. snark/stark-friendly hash函数

    1. 引言 零知识证明中,需要 prove the knowledge of a preimage under a cryptographic hash function,针对的场景为: public ...

  9. 信息摘要函数(Hash函数)的设计与性质验证

    1.信息摘要函数(Hash函数)的设计与性质验证实验 2.实验目的:信息摘要函数(Hash函数)的设计与性质验证. 2.1实验设备:PC机 一台/人 2.2实验原理: 2.2.1.信息摘要函数具有固定 ...

最新文章

  1. 官司一打 20 年,Linux 抄袭 Unix 终有定论,原告被 “ 熬死 ” 、IBM赔了上亿
  2. freemarker的${!}
  3. Alibaba Cloud Linux 技术图谱首发,分享学习感言得大奖!
  4. HTML5 Audio/标签Api整理(二)
  5. 深入单例模式 java,深入单例模式四
  6. Bolt XML和JQBolt Lua代码自动补全插件配置教程
  7. mysql56 配置内存_【mysql】mysql 内存配置调优
  8. 掘金网无极ip代理软件IOS版如何下载安装?
  9. FreeSSL.cn 创建免费 https 证书
  10. 三星s9刷android9,三星S9港版安卓9rom系统线刷包:TGY-G9600ZHU5CSG8-刷机之家
  11. 为什么机会总是留给有准备的人?这是我听过最好的答案
  12. 蛙蛙推荐:蛙蛙教你文本聚类 - 蛙蛙王子 - 博客园
  13. Excel-VB学习
  14. 如何搭建“业务化”的指标体系?
  15. 尚学堂的JAVA学习
  16. mysql中怎么查询出昨天,明天,五天,一周内,三个月内,半年内的数
  17. Association Rules_python关联规则
  18. 如何设置网页页面高度100%
  19. 2020-08-05:请解释下为什么鹿晗发布恋情的时候, 微博系统会崩溃,如何解决?
  20. excel调整坐标轴标签的旋转角度

热门文章

  1. 如何高质量的度过大学四年?
  2. 互联网广告作弊的危害,以及如何反作弊
  3. 集团施工企业双预防系统,落实企业安全生产责任,保障安全生产费有效投入
  4. 什么是Markdown?为什么需要使用Markdown?
  5. 500G硬盘分区标准
  6. 金融领域数据模型实例
  7. 多边形凹凸性的判断、自相交判断
  8. Unity编辑器扩展——通用组件替换工具
  9. vue支付宝html,Vue的H5页面唤起支付宝支付功能
  10. Visual Studio下载失败解决方法(明明有网却下载不动)