@
ryd994 “脱库的问题与是否进行客户端 hash 无关”,这显示出你的理解的偏差。
虽然不直接相关,但脱库得到的内容的使用方式可以类似,使用 hash 的动机也一致。
而这种敏感数据除了脱库还可以通过劫持客户端通信来获取(于是你说的对策反而不够用)。即便没像服务器被攻击那么瞩目;就受害者看,威力一点都不小。
对抗这种攻击,要做到攻击者本人通过唯密文攻击的方式无法分辨出敏感数据中可能带有的感兴趣的特征,至少不能一眼认出来。
至于是不是正经的加密,其实相对无关紧要,所以一个像样的 hash 都行。(当然,得别被随便能反查。)
若有这种客户端 hash ,攻击者要实现相同的效果,除非强行爆破 hash ,基本还需要多攻破客户端系统基础设施。
因为系统厂商普遍盯得比较紧,后者一般比单纯让 TLS 失效(各种意义上)难得多,或者至少没法长期利用。
使用非公开 hash 算法时,强行爆破成本很难预期。
首先,若攻击者无法获得程序取得其中的算法,这就无解。(当然,网站就弃疗好了,毕竟浏览器属于公共白嫖设施。)而想要通过攻击得到能分析的样本,也需攻破基础设施。
虽然要强行作为加密系统,这明显不符合 Kerckhoffs 原则而影响适用性,但是:
(1)说了用 hash 就强调不需要加密,虽然其实加密也能用,但拿来恶心攻击者这就杀鸡用牛刀了;
(2)让攻击者知难而退这种更普遍的方法论甚至就不算是密码学的原理;反倒是使安全性和加密信道的密码学强度正相关的实践,只是其中的一种特例罢了。
其次,即便有样本能逆向,非公开算法自动化手段相比查表之类可以说是极弱,光分析客户端行为就够普通攻击者喝一壶的了。
再退一步,能逆向成功甚至能直接看源码,之后怎么破还得密码分析,也根本没通解。
硬从理论角度讲,这里能保障的安全性的定义根本不同:系统的安全性不是以存在确定明文(以及加密和解密)作为前提来定义的密码系统的保密性(不论是信息论安全性还是计算安全性),而是使从信息中提取任何攻击者感兴趣的函数的计算开销的度量(若资源确定,也可以用成功概率)。
一些假设:(1)攻击成功前攻击者无法预先给出区分是否有兴趣(或度量利用价值)的算法;(2)(有兴趣的信息足够少)任意不依赖内容的选取子集符合兴趣的方法的概率现实地任意接近于 0 ;(3)人基于现实不可描述的、依赖个体对敏感信息特征识别的经验,有一定概率(使用未指定的未知算法)超越任意机器提取信息的能力,特别地,蕴含筛选出提高成功率的正确决策方法。
基于(1)和(2),任何现有机器在都不能分辨被 hash 隐藏的特征是否符合攻击者的兴趣(否则这机器得能自主定义什么叫兴趣判断什么值得继续爆破,基本就是强 AI 了);于是,结合(3),确定时间内,攻击的成功严格依赖于人。
那么 hash 的作用就是专门欺负人:消除特征,添加噪音,让人肉攻击者的经验失效,概率无限接近于 0 ,成功提取信息的代价任意地大,从而实现不可攻击。
是不是值得保障这种安全是另一回事,但这种安全性的现实存在是确定的。(并且很容易木桶效应。)