作者hichcock (快樂一整年 ^^~~~)
看板Math
標題Re: [其他] 加密的Kerckhoff原則共三個問題
時間Fri Aug 25 11:01:03 2023
※ 引述《znmkhxrw (QQ)》之銘言:
: 想請教三個密碼理論的思考問題:
: 【問題一】
: Kerckhoff原則是在講說:即使密碼系統的任何細節被知道,只要金鑰未洩漏應是安全的
: 用對稱性加密的數學語言來說的話, 令M是明文空間, C是暗文空間, K是金鑰空間
: 只要對任何k€K, f_k: M→C 是可逆函數, 就是一個對稱性加密
: Kerckhoff原則就是說只要k藏住, 即便f_k的運作邏輯被知道都還算安全
: 也就是說, 即便f_k運作邏輯知道, 只要猜k的過程需要耗費非多項式時間, 就算安全
: 我的問題在於, 猜f_k的邏輯有比猜k容易?
: 我知道以f_k邏輯公開的話就可以給大家檢查安全性, 甚至應用起來比較方便
: 但是今天如果我的應用是可以不用告訴對方f_k的邏輯的話, 是不是更加安全了?
: 甚至我f_k的設計就是independent of k, 即f_k=f
: 而要破解就是要猜出f是什麼, 這相對來講更難吧?
: 比如M=C={0,1}^n, 則M跟C間的可逆函數多達 (2^n)! 個
: 有一個說法是這樣的危險在於, 如果對方猜中你的f但是沒跟你說
: 你就傻傻的一直認為我的資訊很安全
: 可是這個說法套到知道f_k邏輯但是不知道k也是一樣的問題
: 如果今天對方猜中k然後沒跟你說, 也是一樣尷尬的情況...
: 總之, 在我"不用告訴對方f_k的邏輯"的應用中讓對方猜測演算法本身就很/更安全了?
你可以看一下電影 "模仿遊戲"
這邊的說法是類似這樣的情境
即使加密機器被取得的情況下
你還是無法輕易解出明文
: 【問題二】
: 不管加密算法是不是公開的, 破解者怎麼知道"我破解得到明文了"?
: 今天我的應用是我把雙方才知道的訊息進行加密後傳給對方
: 破解者拿到暗文後, 即便他猜出k或是猜出f, 他怎麼知道他猜對了?
: 舉例來說, 我把我的生日加密後傳給對方, 破解者使用不同的k或是f就會還原
: 到不同的明文, 他如果不知道我傳的是"生日"的話, 每個明文對他而言都是無意義阿...
: 不過想想, 如果我的應用中只有雙方知道我的明文代表什麼, 那根本也不用加密了XD?
: 直接傳明文, 反正破解者也不知道代表什麼意思XD?
破解的意義是....
我知道你未來所有密文的明文
前提是...
我已經有了部分密文的相對明文
: 【問題三】
: 我是因為第三方算法商的授權才研究加密算法, 然後從實際應用的角度切入:
: (1) 這樣設計的加密算法安全嗎? 有沒有可能被繞過?
: (2) 假設破解者猜到什麼, 他是不是就很容易破解?
: 可是我不可能去想到每個人可能破解我的設計方式...
: (3) 網路說編碼不算加密, 但是從數學式來看他就是我【問題一】的未知f的一種
: 網路說LCG(線性同餘法)拿來加密非常不安全, 但他也算是未知f的一種
: 只要對方猜不到我的f, 那就算安全的?
: (4) 在我的應用中是否"做到怎樣"就很"安全"了, 不用到那麼複雜
: ...種種實務的思考, 因為是做小型嵌入式系統所以算法不能太複雜, 因此我才會想分析
: 這些後來設計"夠了就好"的加密方式, 避免運算資源浪費
: 但是網路上幾乎查不到這種"case by case"的討論情況, 幾乎都是討論加密通論
: 也就是說實務上我只是想知道"在我目前這個應用, 這樣設計安全嗎"
: 想請問有沒有這方面的分析SOP?
: 舉我目前的應用是, 我們把第三方程式碼放入產品的IC, 並且產品出廠前會被強迫燒錄
: 資料. 當開機時會強制讀取資料並解密變成明文, 然後在對比明文的IC編碼是否相符
: 如果相符則啟動我們的第三方程式碼, 不符就不啟動
: 因此如果燒錄的資料是我們設計的暗文(這裡應該可以叫產品金鑰), 其中暗文是由
: 這顆IC的唯一編碼產生(燒錄時可以知道這顆IC的編碼, 破解者也知道IC編碼藏入金鑰)
: 那程式碼就會正常啟動
: 如果是破解者竄改的資料, 那程式碼就無法啟動
: 簡單說就是要燒錄我們的產品金鑰產生器的金鑰才能夠解碼出金鑰藏的IC編碼
: 以數學語言來說, (這裡不考慮竄改程式碼繞過檢驗流程)
: 假設IC編碼空間是{0,1}^n, 暗文空間是{0,1}^m, 其中m>>n
: 我的數學目標就是設計函數f:{0,1}^n→{0,1}^m, 滿足:
: (1) f是一對一
: (2) f不好被猜出來
: (3) f的值域夠亂夠隨機(這樣暗文"看起來"才很複雜)
: (4) f限制了對應域為值域後的反函數要能實做出來
: 因此我就開始思考如何把小空間的點稀疏的打到大空間並且寫的出反函數
: 可是每每設計出一個新的, 我都沒辦法有系統跟自信的說這樣就安全...
: 因為我是設計者, 自然知道當破解者知道什麼資訊後就很容易解開
: 又或是有我根本沒想到的破解方式, 整個顧慮又回到【問題三】開頭的那四個問題
: 抑或是我這個目標根本不算是需要加密算法
: ----------------------------------------------------------
: 這些問題偏向想法交流的"why"部分
: 問題可能都沒有唯一的定義, 再麻煩有興趣跟時間的板友分享一下
: 前5個板友視情況奉上P幣感謝~
利用金鑰來進行加密保護的方式算是很常見的
但通常都不會做的很~ 難破解
只要能做到一定程度就可以 (防君子不防小人)
其實你可以直接參考一些簡易的加密方式進行實做就好
--
不想因為什麼都不努力而後悔....
如果我因為什麼都不努力而後悔....
我更希望 勇敢嘗試之後卻失敗了
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.251 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Math/M.1692932469.A.A11.html
推 znmkhxrw : 嗨h大謝謝回覆, 我也在此反饋: (1) 我認同那些[加 08/25 18:18
→ znmkhxrw : 密算法安全性不應該依賴於算法本身]的理由 只是我 08/25 18:18
→ znmkhxrw : 好奇當假設算法不會竊取的情況下 是不是不用key的 08/25 18:18
→ znmkhxrw : 機制就已經很安全了 因為破解者要猜你的函數是什麼 08/25 18:18
→ znmkhxrw : (2) 理解 (3) 對XD 防君子不防小人 而且人家有心破 08/25 18:18
→ znmkhxrw : 解幾乎是找到call check function的地方繞過去 只 08/25 18:18
→ znmkhxrw : 是我在找尋一些加密方式時好像不是每一個都可以用 08/25 18:18
→ znmkhxrw : 到現在的應用 我的這個比較像產品金鑰 跟對稱/非對 08/25 18:18
→ znmkhxrw : 稱加密的key好像沒啥關係 但是好像又有點關係 所以 08/25 18:18
→ znmkhxrw : 我才說好難嚴格定義跟問清楚QQ 08/25 18:18
推 LPH66 : > 破解者要猜你的函數是什麼: 是的, 但難保你的函數 08/25 20:17
→ LPH66 : 當中沒有一些弱點, 碰巧給攻擊者猜到的話可能會完蛋 08/25 20:18
推 znmkhxrw : 嗨L大~了解, 所以演算法公開後就是每個人都能檢驗 08/25 22:38
→ znmkhxrw : 等於集大家的力量去證實【這加密法只要key藏好就沒 08/25 22:39
→ znmkhxrw : 問題】? 08/25 22:39
→ wohtp : 還有一點,人類歷史上密碼被破絕大多數都是間諜內鬼 08/26 02:20
→ wohtp : ,像二戰enigma那種憑空破解的例子絕無僅有。 08/26 02:20
→ wohtp : 考慮到這個,需要保護的資訊當然越少越好啊。 08/26 02:20
推 znmkhxrw : 這倒是沒錯, 只需要保護key確實很安全XD 08/26 06:20
→ obarisk : 1. 這個陳述有問題,至少會有一個接收方知道f_k 08/26 09:29
→ obarisk : 所以對接收方而言,只需要破解k 08/26 09:31
推 znmkhxrw : @o大, 理解, 只是我假設接收方是自己人XDD 08/28 00:56