新话题,资讯安全(information security),开篇新文章 :)
※ 引述《AmosYang (泛用人型编码器)》之铭言:
: * C# `System.Valuetype.GetHashCode()` 潜在效能、安全问题
: http://www.30abysses.com/TWY/2016/11/21/c_sharp-gethashcode-valuetype.html
:
: ValueType 的 `GetHashCode() 默认实作是把所有字段(field) 大锅炒成
: 杂凑(hash)值;有看过些说法主张这可能造成潜在的效能问题外,然而,更严
: 重的 是如其原码注解 所指出的,这多少会在某种程度上把敏感资讯透露出去
: ,也就是有 **潜在的安全问题** 。
:
: 是故,原码注解主张
:
: 若此 value type 含有敏感资讯,那它应该为 GetHashCode() 提供自己
: 的实作版本。
:
: 推 james732: 不过有可能从标准实作算出的hash去倒推特定的资料吗? 11/27 14:22
资讯安全(information security)是很机车的 :D 很难从单一 attack vector 来
评估;每个系统的 threat model 不同,当通常你透露给攻击者的资讯是愈少愈好
========================================================================
举个例子,假设要设计个有权限控制的档案系统;假设有这样一个档案
/foo/bar.txt
假设使用者可以下“读档案”的指令
read /foo/bar.txt
而对没有权限读这档案的使用者,要怎么回报错误?这里有至少两个可能性
(1) “找不到 /foo/bar.txt ”
(2) “你没有权限读 /foo/bar.txt ”
(2) 的 UX *感觉* 比 (1) 好;然而,若我是攻击者,即使我没有权限读档案,
我仍能把 (2) 当作 File.Exists(string path) 来用;反过来说, (1) 就没有
透露出“档案是否存在?”的讯息。
当然,光是有 (2) 或许不足以造成实质上的破坏,但这里要说明的,就是“意外
地透露资讯”这个观念;也就是 (2) 的设计,能让没有阅读权限的攻击者 probe
整个档案系统;而有时档名可能就带有商业机密 (例如,新产品的 codename )
更有趣的是,这永远是道高一尺魔高一丈、猫追老鼠的游戏。例如,就算使用 (1)
的设计,就没问题了吗?假如说,以下的情形
read /foo/bar.txt
read /foo/non-existing-file.exe
假设 non-existing-file.exe 这个档案是不存在的,然后又采用 (1) 的设计,
对没有阅读权限的攻击者,两者都传回
“找不到 /foo/bar.txt ”
“找不到 /foo/non-existing-file.exe ”
But!假设系统在处理以下两个情形所“使用的时间”不同
(a) 读本来就不存在的档案;传回错误
(b) 读存在的档案;读取使用者身份;读取使用者权限;比对权限;传回错误
那么,攻击者仍能分别出 (a) 与 (b) 的不同;最后这设计仍然“意外地透露
资讯”…
所以说,资讯安全(information security)是很机车的 :D
========================================================================
回到一开始的问题
> 有可能从标准实作算出的hash去倒推特定的资料吗?
也许大概应该不太可能,但也没有人能保证 100.00% 零风险。因为你不知道攻击
者手上有没有别的资讯(碎片),就差这一块就能爆机,所以,还是要
threat model 画出来,风险评估报告作出来,看 mitigation/isolation/etc.
有的没的五四三的要怎么作
反正,谁有那个心脏拿那薪水,谁去签字负责 :D