加密與解密 防範演算法求逆

2021-09-30 18:06:11 字數 1596 閱讀 8026

u表示使用者名稱

r表示序列號

f表示驗證函式

堡壘戰術

堡壘戰術的基本思想就是原地固守,用盡手段使得一段演算法得堅不可摧,難以求逆。堡壘戰術融入了身份驗證和數字簽名的一些思想,它將只有軟體開發者才知道的乙個特徵值或指紋作為驗證演算法的一部分,以這個特徵值的雜湊對映作為最後的對比值。特徵值與驗證演算法混合起來後,令人無法分辨,在沒有找到特徵值的情況下使得逆向演算法變為不可行。

例:(其中md5演算法可替換為任意單向雜湊演算法,如sha系列)

r = encrypt(u)

md5 (a) = b

f (u, r) = md5 ( decrypt(r) - u + a ) == b

顯然這裡a可以和decrypt(r)函式混合起來,使得驗證演算法在攻擊者看來是md5(decrypt_fake(r) - u)這樣的,我們來試著解密一下這個演算法。首先md5是單向雜湊演算法,具有強抗碰撞性,想要直接通過密文b得到明文a是不可行的(稍微複雜的無意義串的md5值彩虹表是很難查到的),所以我們只能從內部出發,內部是乙個解密函式decrypt_fake,假如已知其演算法,而u是已知的,現在要求正確的r,但這個r只能通過正確的decrypt函式才能求出,而現在只知道乙個假的,所以是不可能成功的,這樣就做到了防範演算法求逆。

攻擊方法:需要提前獲取一對合法的使用者名稱及序列號,就有可能通過追蹤演算法獲取特徵值。

另一種保護方式就是直接使用公鑰加密演算法,如rsa。

軟體作者使用私鑰對使用者名稱進行解密生成序列號,而使用者使用公鑰對其序列號加密正確匹配使用者名稱。使用該方法是一種比較簡單的操作,但卻很實用。

攻擊方法:對於rsa演算法本身來說,它是足夠安全的,只要攻擊者無法獲取金鑰,就很難直接通過公鑰和密文解密出明文,但是,使用rsa演算法的軟體作者大部分對rsa演算法的理解不足,就很容易出現錯誤使用的情況,一旦出現這種情況,對rsa的攻擊者來說,就有了轉機。即對rsa演算法進行攻擊的方法在這裡都適用。

游擊戰術

游擊戰術的主旨就是將驗證演算法分散到整個程式的各個位置,將f驗證函式分解為一系列必要非充分的fi 函式,這種分解方式需要一些比較專業的數學知識,為了簡化這種方式,我們也同時把r分解為多個ri 部分,所有的ri 部分都可以經過某種驗證方式匹配u,具體步驟:

將r切分為多段ri 部分

構造不同的f演算法,使ri = fi (u)

令fi = fi的逆函式

游擊戰術講究虛虛實實,雖然有許多ri 部分,但不一定全部都需要驗證,防守方可以自行決定何時何處進行驗證,因此,無**擊方找到多少組驗證函式和子串行號,只要還不能與u唯一對映,那就無法確定序列號是否正確,即使看起來成功了,如果在觸發某些事件時又存在新的驗證,那重新清除軟體的驗證也是可以的。

游擊戰術的一大弱點就是驗證函式的隱藏了,因為每乙個驗證函式肯定會訪問註冊碼,只要追蹤註冊碼的記憶體訪問情況,就能順藤摸瓜找到所有驗證函式,這樣一來,演算法的破解只是時間問題了。所以游擊戰術還需要進行戰略轉移,防守方可以將序列號轉移到各個可以訪問到的位置,需要的時候再拿出來訪問,這樣使得追蹤的工作量變得十分巨大,難以關注到過多的點。可以轉移的方法包括 1.記憶體中的任何位置 2.寫入登錄檔和檔案 3.在多次使用某函式進行轉移後,使用另一函式繼續轉移

攻擊方法:對於游擊戰術的攻擊方法還是得順著序列號的位置來,需要足夠的經驗和耐心,並且要知己知彼,通常攻擊者的技術要在放守方之上。

加密與解密演算法

加密 public static string encode string data 解密 public static string decode string data catch descryptoserviceprovider cryptoprovider new descryptoservi...

DES加密與解密演算法

預設金鑰向量 private static readonly byte keys des加密字串 待加密的字串 加密成功返回加密後的字串,失敗返回源串 public static string encryptstring string encryptstring catch des解密字串 待解密的...

vigenere加密與解密演算法

一 vigenere加密解密原理 加密過程 步驟1.給26個字母a z按順序進行編號0 25字母a bcde fghi jklm nopq rstu vwxy z序號01 2345 6789 1011 1213 1415 1617 1819 2021 2223 2425 步驟2.找到明文對應的字母序...