任何一種互聯(lián)網(wǎng)大數(shù)據(jù)算法背后都有數(shù)學(xué)原理在支撐,無論是簡單的遞歸迭代或者是更復(fù)雜的加密算法,,都離不開數(shù)學(xué)原理,,為了更好地方便大家理解,我們以加密算法為例,,更好地闡述一下數(shù)學(xué)對算法的支持,。 1、對稱加密算法AES AES 是 Advanced Encryption Standard 的縮寫,,是最常見的對稱加密算法,。AES 在密碼學(xué)中又稱 Rijndael 加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn),。這個標(biāo)準(zhǔn)已經(jīng)被多方分析且廣為全世界所使用。 AES 的加密公式為 C=E(K,P),,其中K 為密鑰,,P 為明文,C 為密文,。 AES 加密明文的過程是:首先對明文進(jìn)行分組,,每組的長度都是 128 位,然后一組一組地加密,,直到所有明文都已加密,。密鑰的長度可以是 128、192 或 256 位,。 在加密函數(shù) E 中,,會執(zhí)行一個輪函數(shù),,除最后一次執(zhí)行不同外,前面幾輪的執(zhí)行是相同的,。以 AES-128 為例,,推薦加密輪數(shù)為 10 輪,即前 9 輪執(zhí)行的操作相同,,第 10 輪執(zhí)行的操作與前面不同,。不同的密鑰長度推薦的加密輪數(shù)是不一樣的,具體見下面的表格,。 加密時明文按照 128 位為單位進(jìn)行分組,,每組包含 16 個字節(jié),按照從上到下,、從左到右的順序排列成一個 4 × 4 的矩陣,,稱為明文矩陣。AES 的加密過程在一個大小同樣為 4 × 4 的矩陣中進(jìn)行,,稱為狀態(tài)矩陣,,狀態(tài)矩陣的初始值為明文矩陣的值。每一輪加密結(jié)束后,,狀態(tài)矩陣的值變化一次,。輪函數(shù)執(zhí)行結(jié)束后,狀態(tài)矩陣的值即為密文的值,,從狀態(tài)矩陣得到密文矩陣,,依次提取密文矩陣的值得到 128 位的密文。 以 128 位密鑰為例,,密鑰長度為 16 個字節(jié),,也用 4 × 4 的矩陣表示,順序也是從上到下,、從左到右,。AES 通過密鑰編排函數(shù)把密鑰矩陣擴(kuò)展成一個包含 44 個字的密鑰序列,其中的前 4 個字為原始密鑰用于初始加密,,后面的 40 個字用于 10 輪加密,,每輪使用其中的 4 個字。密鑰遞歸產(chǎn)生規(guī)則如下:
加密的第 1 輪到第 9 輪的輪函數(shù)一樣,,包括 4 個操作:字節(jié)代換、行位移、列混合和輪密鑰加,。最后一輪迭代不執(zhí)行列混合,。另外,在第一輪迭代之前,,先將明文和原始密鑰進(jìn)行一次異或加密操作,。 解密過程仍為 10 輪,每一輪的操作是加密操作的逆操作,。由于 AES 的 4 個輪操作都是可逆的,,因此,解密操作的一輪就是順序執(zhí)行逆行移位,、逆字節(jié)代換,、輪密鑰加和逆列混合。同加密操作類似,,最后一輪不執(zhí)行逆列混合,,在第 1 輪解密之前,要執(zhí)行 1 次密鑰加操作,。 AES 加密的輪函數(shù)操作包括以下方面:
2、非對稱加密算法RSA 1977 年三位數(shù)學(xué)家 Rivest,、Shamir 和 Adleman 設(shè)計了一種算法,,可以實(shí)現(xiàn)非對稱加密,也就是本文要討論的 RSA 算法,,使用非對稱加密算法需要生成公鑰和私鑰,,使用公鑰加密,使用私鑰解密,。 互質(zhì)關(guān)系:首先回顧一下質(zhì)數(shù)的定義,。質(zhì)數(shù) (prime number) 又稱素數(shù),有無限個,。一個大于 1 的自然數(shù),,除了 1 和它本身外,不能被其他自然數(shù)整除,,換句話說就是該數(shù)除了 1 和它本身以外不再有其他的因數(shù),;否則稱為合數(shù),如果兩個正整數(shù),除了 1 以外,,沒有其他公因子,,我們就稱這兩個數(shù)是互質(zhì)關(guān)系?;ベ|(zhì)關(guān)系不要求兩個數(shù)都是質(zhì)數(shù),,合數(shù)也可以和一個質(zhì)數(shù)構(gòu)成互質(zhì)關(guān)系。 歐拉函數(shù):對正整數(shù) n,,歐拉函數(shù)是小于 n 的正整數(shù)中與 n 互質(zhì)的數(shù)的數(shù)目,,用 φ(n) 表示。例如 φ(8) = 4,,因?yàn)?1 3 5 7 均和 8 互質(zhì),。歐拉函數(shù)可以表示為 其中 p1, p2 …… pn 為 x 的所有質(zhì)因數(shù),x 是不為 0 的整數(shù),。且 φ(1) = 1,。每種質(zhì)因數(shù)只用一個。比如 12 = 2 * 2 * 3 那么 φ(12) = 12 * ( 1 - 1 / 2) * ( 1 - 1 / 3 ) = 4 若 n 是質(zhì)數(shù) p 的 k 次冪,,除了 p 的倍數(shù)外,,其他數(shù)都跟 n 互質(zhì),則數(shù)學(xué)公式為 若 m,n 互質(zhì),,則數(shù)學(xué)公式為 當(dāng) n 為奇數(shù)時,,則數(shù)學(xué)公式為 當(dāng) n 為質(zhì)數(shù)時,則數(shù)學(xué)公式為 模反元素:如果兩個正整數(shù) a 和 n 互質(zhì),,那么一定可以找到整數(shù) b,,使得 ab - 1 被 n 整除,或者說 ab 被 n 除的余數(shù)是 1,。這時,,b 就叫做 a 的 “模反元素”。表示如下:ab≡ 1 (mod n) 比如3 和 11 互質(zhì),,那么 3 的模反元素就是 4,,因?yàn)?(3 × 4) - 1 可以被 11 整除。顯然,,模反元素不止一個,,4 加減 11 的整數(shù)倍都是 3 的模反元素 {…, -18, -7, 4, 15, 26, …},即如果 b 是 a 的模反元素,,則 b + k n 都是 a 的模反元素,。 歐拉定理:歐拉定理是一個關(guān)于同余的性質(zhì)。歐拉定理表明,,若 n,a 為正整數(shù),,且 n,a 互質(zhì),,則有 a^φ(n) ≡ 1 (mod n) 假設(shè)正整數(shù) a 與質(zhì)數(shù) p 互質(zhì),因?yàn)?φ(p) = p-1,,則歐拉定理可以寫成 a^(p-1) ≡ 1 (mod p) RSA 公鑰與私鑰的生成: 生成密鑰的過程如下:
RSA 加密與解密: 使用公鑰 (n,e) 進(jìn)行加密的過程,可以表示為如下公式,,實(shí)際上就是根據(jù)明文 m 計算出密文 c 的過程,。m 必須是整數(shù)(字符串可以取 ascii 值或 unicode 值),且 m 必須小于 n,。 m^e ≡ c (mod n) 使用私鑰 (n,d) 進(jìn)行解密的過程,,可以表示為如下公式,實(shí)際上就是根據(jù)密文 c 計算出明文 m 的過程,。此處證明比較復(fù)雜,,感興趣的朋友可以自己看一下。 c^d ≡ m (mod n) RSA 加解密過程示例: 首先生成密鑰:
使用公鑰進(jìn)行加密,,假設(shè)明文 m = 65,,表示大寫字母 A,根據(jù)公式計算出密文為 2790,。 65^17 ≡ 2790 (mod 3233) 使用私鑰進(jìn)行解密,,密文為 2790,根據(jù)公式可以計算出明文為 65,,表示大寫字母 A,。 2790^2753 ≡ 65 (mod 3233) 3、總結(jié) 數(shù)學(xué)是大數(shù)據(jù)算法的后臺支持,,如果你真的想從事IT,、人工智能行業(yè),那么學(xué)好數(shù)學(xué)是不可缺少的,,從現(xiàn)在開始努力吧,! |
|