作者CMJ0121 (不要偷 Q)
看板NetSecurity
标题[闲聊] 2017.W30 - 实务上的密码学应用
时间Tue Jul 25 20:43:00 2017
2017.W30 - 实务上的密码学应用
> 有没有一种方式 告诉你方法但依然让你不知道答案
## 前言 ##
不知道有没有人曾经好奇过 为什麽都告诉你密码怎样算了 (演算法)
但是还是没有一个有效的破解密码方式
## 内容 ##
可以参考 2017.W19 - 椭圆曲线加密 ECC 的内容
这次讲的是更一般的概念 密码学如何使用才会比较安全
这篇 Slide[0] 的内容提到如何在白箱环境上做加密方案的攻击
白箱 (white-box) 代表拥有完全自主的测试环境与任意操作的程式
除了不一定有原始码之外 通常代表着拥有绝对自主的测试
对密码学来说是一个严酷的考验:完全考验加密演算法的实作与设计架构
概念上来说我们知道 越长的金钥代表着越好的防护等级
用暴力破解的概念 纯数字的密码一定比数字字母混合的密码还要弱
同样的 具有不可逆的特性也会比可逆的演算法还要安全
除了针对演算法攻击的方式外 还有所谓的旁道攻击 (Side-Channel attach)[2]
可以参考 2017.W08 - Side-Channel Attack 的内容
也就是透过非密码学本身的方式 (e.g. 电量、时间) 来破解密码
或者是利用差分攻击 (Differential Fault analysis) [3] 藉由修改部分资料来推算原本的金钥
之前提过的内容中说过 密码学都建构在已知的数学难题上
但还可能因为若干种实作上的瑕疵 降低整个系统的安全强度
原则来说 只需要有足够多的密文就能够反推原本使用的金钥
所以对於不同的系统 最好使用不同的金钥来加密
当然 解密用的金钥也千万不要 hardcode 在系统当中
有兴趣可以参考 CVE 中各种 hardcode credentials 的案例
另一种常犯的密码学错误 则是使用固定的 IV[4]
可以想像 IV 就是 Hash 中使用到的 Salt 这是用来加强整体安全性的机制
一个好的 IV 需要使用到全随机数 但实务上会使用伪随机数产生器 (PRNG)
每次加密都使用新的 IV 来避免攻击者收集足够多的内容 来反推原本的金钥
延伸这个概念与一开始提到的 有能力的话可以针对每一个装置使用独特的金钥来加密
像透过一个密钥 + 装置的独特 UUID 来当作是新的密钥来加密
则这个装置的密钥 1) 只有拥有密钥的开发者 2) 知道 UUID 才有办法重新产生
[0]:
https://www.slideshare.net/linecorp/practical-attacks-on-commercial-whitebox-cryptography-solutions
[1]:
https://zh.wikipedia.org/zh-tw/%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95
[2]:
https://zh.wikipedia.org/zh-tw/%E6%97%81%E8%B7%AF%E6%94%BB%E5%87%BB
[3]:
https://zh.wikipedia.org/wiki/%E5%B7%AE%E5%88%A5%E9%8C%AF%E8%AA%A4%E5%88%86%E6%9E%90
[4]:
https://zh.wikipedia.org/wiki/%E5%88%9D%E5%A7%8B%E5%90%91%E9%87%8F
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.122.171
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/NetSecurity/M.1500986584.A.ECB.html