一種近乎完美的加密演算法 擴散加密演算法

2021-07-30 22:23:38 字數 4461 閱讀 4535

引言

在開始介紹之前,請讓我們來看幾個問題。

有沒有一種對稱加密演算法能夠支援任意長度密匙加密呢?有沒有一種加密演算法能夠同時支援對稱和非對稱加密呢?有麼有一種加密演算法在實現完全擴散時所需要的步驟最少呢?

這樣的演算法一定是存在的!

擴散加密演算法是以擴散演算法為基礎,在處理的過程中加入密匙從而實現加密、解密。

那什麼是擴散演算法呢?

回答這個問題之前,我們先來看看上面所說的完全擴散的概念。擴散是化學中的乙個重要現象,通常是指多種物質(或分子)彼此進入對方的現象。那麼密碼學中的擴散就是指輸入元素進入(影響)輸出元素的現象。輸入元素影響輸出元素的比例(單個輸入的改變引起輸出改變的比例),叫做擴散率。如果每乙個輸入元素的改變都造成輸出元素全部發生改變,則叫完全擴散(即100%的擴散率)。

密碼學要求加密演算法必須滿足100%的擴散率,否則加密就會很容易被破解,也就失去了加密的意義。

演算法原理

那麼有什麼辦法可以以最少的步驟實現完全擴散呢?試想一下,假如有乙個輸入元素x改變了,我們可以讓這個元素x去改變另乙個元素y;元素x、y再去改變其他元素,最後所有元素都被改變!這很簡單吧。那麼我們就來試試!

我們把整個改變過程分成多個步驟去完成。假設輸入有16個元素,我們把這16個元素分為兩組,以x、y表示,假設x0元素是變元素(元素下標以0開始,即x0表示x組第乙個元素,x7表示x組最後乙個元素)。

第一步:讓x組中的元素1(x0)去改變y組中的元素1(y0)。記作x0→y0,那麼就有了x0和y0兩個變元素。

第二步:讓x組中的元素1(x0)去改變y組中的元素5(y4),記作x0→y4;再讓y組中的元素1(y0)去改變x組中的元素5(x4),記作y0→x4;那麼就有x0、x4,y0、y4共4個變元素。

第三步:再讓x0改變y2(x0→y2),x4改變y6(x4→y6);讓y0改變x6(y0 →x6),y4改變x2(y4→x2);則有x0、x2、x4、x6,y0,y2、y4、y6共8個變元素。

最後:讓x0改變y1,以此類推:x2→y3,x4→y5,x6→y7;y0→x7,y2→x1,y4→x3,y6→x5。

至此,所有元素都被改變,這就是擴散演算法!

或許你會問,那麼多元素要乙個個去改變嗎?這肯定是當然的,不過可以用**輕鬆搞定,這**長什麼樣子呢?瞧:

就這麼簡單!外層迴圈(round)是處理總步驟,可以用公式計算(round=log2(n)),n為分組長度;內層迴圈是逐個改變元素的值,可以發現,內層迴圈可以並行處理的;ex和ey是兩個任意函式。

前面的例子我們看到,第一步中a0去改變了b0,那麼可否改變b或者a中的其他任意元素呢?這當然是可以的!那麼你又會發現,為什麼上面的例子在改變元素時這麼有規律,能不能隨機去改變元素呢?哈哈哈哈,如果你能發現這個問題,說明你很用心,那麼我也用心的告訴你!這絕對是當然的~!你可以任意隨機的去改變元素,只要你的改變路線能夠讓每乙個元素都能通過該路線影響其他任意乙個元素,那麼就能夠實現完全擴散!

下面是一種有序和一種無序的改變規則圖:

圖中的連線集合(改變規則)叫做網路,連線就叫路徑;方框中的數字為元素索引,x、y為分組名稱;元素索引上方的「*」表示變化(受影響)的元素;虛線連線表示初始變元素改變其他元素所走的路線。

加密解密

那麼我們回到開始的問題,如何加密、解密呢?這很好辦,如果別人無法獲取你的源**,你可以設計屬於自己的網路,設計屬於自己的函式進行加密;然後按照加密的過程逆運算即可解密,這是一種加密方法(叫做隱匿加密或非公開加密)。如果源**公開呢?這更好辦,如上述的例子,在用函式ex、ey改變元素時,加入密碼就好了。擴散加密是完全擴散的,也就是說在解密時,錯一位密碼都無法正確解密!下面是加密和解密**:

圖中kx、ky就是密碼,長度和分組長度相同,函式ex,ey與dx、dy分別為互逆函式。

長度任意

擴散演算法可以使用任意長度的元素進行運算,你可以用2個元素,也可以用200個元素,或者200萬個元素。無論多少個元素,擴散演算法都能實現完全擴散,這是目前世界上絕無僅有的!而且是實現該長度完全擴散所需要的步驟(或指令)最少的方法。不過為了使處理速度最快,元素長度最好是2的n次方(n為正整數)。

非對稱加密

上面我們介紹了對稱分組的加密方法,那麼擴散演算法能不能真正實現非對稱加密呢?這個答案就得留給你們了!擴散演算法從理論上是可以實現非對稱加密的。

我們知道,非對稱加密與對稱加密的最大區別就是非對稱用一對兒密碼進行加密和解密,而且非對稱是基於特定的數學難題。通過其中一組密碼加密後的資料只能通過另一組密碼進行解密。在加密和解密的過程中將明文轉換為乙個大整數進行計算。比如rsa和ecc,將幾百個位元組組合成乙個大整數進行計算,這無疑是相當耗資源的。

那麼,擴散演算法該如何實現非對稱加密?試想一下,我們為什麼不能將明文拆分成多個小整數再進行加密呢?或者直接將以元素(位元組)為單元進行加密?以往的非對稱加密必須要將明文合成乙個整數進行加密,因為密碼需要足夠的長度才可以防止被窮舉攻擊,如果進行拆分,則密匙長度就會降低,窮舉就變得容易,所以不能拆分!但是擴散演算法則完全不用如此,在擴散過程中,假設加密和加密的函式是乙個函式對兒,通過其中乙個函式加密後的資料只能通過另乙個函式進行解密,這樣不就實現非對稱加密了嗎?或許你會問,這樣做不怕被窮舉攻擊嗎?試想一下,單個元素的非對稱加密可以非常容易窮舉,如果將許多元素組合加密呢?,每個元素都使用隨機的密碼,每個元素都會影響其他任意乙個元素,這樣的話,密匙空間就會擴充套件到各個元素密匙空間總和(如果單個元素的密匙空間為8位,那麼128個元素的總密匙空間就是128*8=1024位)。如果要進行窮舉,則必須所有密碼都正確才能加開(窮舉所有密匙空間,與對稱加密一樣)。對於較長的密匙來說(比如1024位),窮舉所有密匙空間幾乎不太可能。

這就是擴散演算法進行非對稱加密的理論實現,但是目前為止還沒有發現適合的函式來進行非對稱加密。或許你可以說用rsa或ecc的加密方法,再結合擴散演算法,以元素或元素組(多個元素的組合)為單位進行加密,這是可行的,但是密匙空間不足!或許有一天,能夠找到一對兒完美的函式,讓我們拭目以待吧!

巢狀擴散

上面演示了以元素為單位進行擴散,那麼是否可以將多個元素進行組合在進行擴散呢?這也絕對是當然!可以將任意數量的元素(相鄰或者不相鄰)組合成元素組,再以元素組為單位建立網路,只要擴散函式滿足輸入元素的任意一位發生變化都會造成所有輸出元素發生改變,那麼就是可行的。這對函式要求比較高,不過也不用改變全部輸出元素,可以只改變部分,建立網路時多增加一些路徑即可。

這樣的話,我們就可以對擴散過程進行巢狀了,把元素分成n個子分組,每個子分組包含m個元素,先對子分組進行擴散,然後以子分組為單位再進行擴散(可以無限巢狀)。這種擴散方法擴散效果更好,不過速度稍慢。

快速的處理速度

如果以單執行緒序列處理,在128位元組的元素長度下,可以達到100m/s的處理速度,如果擴散過程中(內層處理)使用平行計算,理論上速度將提示n倍,n為元素長度。以上述的速度計算,則可以達到12g/s,或許會更高。

多種加密方式方式

1. 對稱分組加密

採用固定密碼的方式進行對稱分組加密,每一組明文都採用固定的密碼;

2. 對稱分組流加密

在對稱分組加密的基礎上,採用密匙流,對每一組明文都使用不同的密碼。

3. 非對稱加密

尚待實現;

最後說一下擴散演算法的其他用途

1.   生產隨機數

擴散演算法有著完美的擴散率,只需要幾個種子就可以生成相當安全的隨機數,而且重複週期很長,到底有多長呢?就是很長很長了,不過記得在函式中消除線性!

2.   計算訊息摘要

因為擴散演算法是完全擴散的,因此輸入資料中的任意一位的改變都可以造成輸出資料全部發生改變,這不正好可以用來生成訊息摘要嗎?而且可以任意指定訊息摘要長度。

那麼,大家可以放心的使用擴散演算法隱藏使用者密碼了!因為你可以定製專屬加密方式,讓別人頭疼去吧!

以上內容本人已在看雪安全論壇發表過!

注:上文中的擴散網路因為擴散源較少而存在安全隱患,本人已設計安全成熟的擴散網路,在此不便公布,若有疑問請致郵:[email protected]

RSA加密演算法是一種非對稱加密演算法

rsa加密演算法是一種非對稱加密演算法。在公鑰加密標準和電子商業中rsa被廣泛使用。rsa是1977年由羅納德 李維斯特 ron rivest 阿迪 薩莫爾 adi shamir 和倫納德 阿德曼 leonard adleman 一起提出的。當時他們三人都在麻省理工學院工作。rsa就是他們三人姓氏開...

一種網路資料傳輸加密演算法的設想

核心思想 對每個使用者設定不同的秘鑰。對某一網路由於賬號的id 或使用者名稱 是不能重複的,所以如果對id 或使用者名稱 進行處理作為資訊加密的秘鑰,可基本保證每個使用者的加密秘鑰都不相同。資料從客戶端傳到伺服器,可用客戶端的使用者秘鑰進行加密,伺服器進行解密後得到原始資料 伺服器向客戶端傳送資料時...

常見加密演算法梳理(一)

在工程中往往需要用到加密演算法,對資料進行加密或者生成資料的雜湊值。在眾多演算法中,我們需要篩選的合適的演算法來滿足需求。本章主要向大家介紹主流的一些演算法,並提出建議。對稱加密演算法就是加密和解密使用同一種金鑰 一種使用金鑰加密的塊演算法,目前已經不能保證安全性,建議禁止使用。是三重資料加密演算法...