[閒聊] 2017.W30 - 實務上的密碼學應用

作者: CMJ0121 (請多指教!!)   2017-07-25 20:43:00
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

Links booklink

Contact Us: admin [ a t ] ucptt.com