介紹
在我們的密碼學(xué)系列教程的最后兩期中,我們介紹了密碼學(xué)的基本概念和兩種基本類型。本節(jié)討論最常見的加密算法的具體實(shí)現(xiàn)細(xì)節(jié),從基本的 XOR 函數(shù)開始,然后進(jìn)入當(dāng)今使用的更復(fù)雜的對(duì)稱和非對(duì)稱算法。本文最后回顧了如何使用非對(duì)稱密鑰算法來交換共享私鑰。這使得可以使用更快的對(duì)稱密鑰算法來交換批量加密的數(shù)據(jù),而無需開發(fā)復(fù)雜的密鑰交換系統(tǒng)。
異或函數(shù):至關(guān)重要的邏輯運(yùn)算
XOR(異或)是一種重要的邏輯操作,在許多(如果不是全部)加密算法中以各種方式使用。圖 1 顯示了此函數(shù)的工作原理。在深入研究算法之前,您需要了解此函數(shù)。
圖1.此圖顯示了 XOR 函數(shù)的工作原理。
獨(dú)占或(XOR) – 可逆(即無損)加密的基本要素
由于 XOR 的屬性,其中一個(gè)輸入可以用作進(jìn)入另一個(gè)輸入的數(shù)據(jù)的鍵。例如,如果 A 是加密密鑰的單個(gè)位,則具有來自 B 的數(shù)據(jù)位的 XOR 在 A 為 1 時(shí)翻轉(zhuǎn)該位。這可以通過再次使用密鑰對(duì)加密結(jié)果進(jìn)行按位 XOR 來逆轉(zhuǎn)。
讓我們看一個(gè)例子:
我們的目標(biāo)是使用“秘密”這個(gè)詞,使用XOR使用密鑰對(duì)其進(jìn)行加密,然后使用相同的密鑰和XOR函數(shù)對(duì)其進(jìn)行解密。這些是步驟:
選擇一個(gè)密鑰。我們將選擇字母“k”作為我們的鍵。
使用 ASCII(美國(guó)信息交換標(biāo)準(zhǔn)代碼)字符編碼標(biāo)準(zhǔn)將字母“k”轉(zhuǎn)換為二進(jìn)制。其結(jié)果是 :01101011
將單詞“機(jī)密”轉(zhuǎn)換為二進(jìn)制。其結(jié)果是 :01010011 01100101 01100011 01110010 01100101 01110100
XOR “秘密”中的每個(gè)字母,其中“k”是關(guān)鍵字母。這為我們提供了加密值。
S | e | c | r | e | t |
01010011 | 01100101 | 01100011 | 01110010 | 01100101 | 01110100 |
XOR “密鑰”:01101011 01101011 01101011 01101011 01101011 01101011
加密值:00111000 00001110 00001000 00011001 00001110 00011111
現(xiàn)在要解密加密值,我們使用密鑰字母“k”對(duì)其進(jìn)行 XOR 運(yùn)算。這一步讓我們恢復(fù)了原來的“秘密”字。
加密值:00111000 00001110 00001000 00011001 00001110 00011111
XOR “密鑰”:01101011 01101011 01101011 01101011 01101011 01101011
解密值: | 01010011 | 01100101 | 01100011 | 01110010 | 01100101 | 01110100 |
S | e | c | r | e | t |
SHA(安全哈希算法)
SHA 函數(shù)背后的基本思想是獲取可變大小的數(shù)據(jù)并將其壓縮為固定大小的位字符串輸出。這個(gè)概念稱為哈希。SHA 函數(shù)是一系列哈希算法,通過 NIST(美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院)的監(jiān)督隨著時(shí)間的推移而開發(fā)。SHA-3功能是最新的。
圖 2 顯示了安全哈希生成的基本概念。
圖2.此圖顯示了安全哈希生成的基本概念。
SHA 函數(shù)具有以下特征:
可變輸入長(zhǎng)度。
固定輸出長(zhǎng)度。
單向功能。在圖 2 中,除了嘗試每個(gè)可能的輸入文本之外,不可能使用生成的哈希值來重新生成輸入文本。對(duì)于足夠大的輸入,這在計(jì)算上變得不可能。
如果將相同的輸入消息饋送到 SHA 函數(shù),它將始終生成相同的結(jié)果哈希。
使用兩個(gè)不同的輸入值無法生成相同的哈希值。這稱為“防撞性”。
輸入值的微小變化,即使是單個(gè)位,也會(huì)完全改變生成的哈希值。這就是所謂的“雪崩效應(yīng)”。
如果哈希函數(shù)滿足上述所有條件,則將其視為強(qiáng)哈希函數(shù)。
目前使用的一些 SHA 函數(shù)包括:
SHA-1
SHA-2
SHA-3
現(xiàn)在讓我們探討一下 SHA 函數(shù)的工作原理,重點(diǎn)是 SHA-2 和 SHA-3。SHA-1正在逐步淘汰,不建議用于任何新設(shè)計(jì)。
SHA-2的來龍去脈
SHA-2 函數(shù)根據(jù)輸出位長(zhǎng)度有四種主要類型:
SHA-224 – 哈希長(zhǎng)度為 224 位。
SHA-256 – 哈希長(zhǎng)度為 256 位。
SHA-384 – 哈希長(zhǎng)度為 384 位。
SHA-512 – 哈希長(zhǎng)度為 512 位。
讓我們以 SHA-256 為例。圖 3 顯示了 SHA-256 發(fā)動(dòng)機(jī)的框圖。
圖3.此圖顯示了用于安全哈希生成的 SHA-256 函數(shù)的框圖。
安全哈希生成:SHA-256 功能
首先填充輸入消息,以確保它完全適合“n”個(gè) 512 位塊。然后,第一個(gè) 512 位塊與初始 256 位哈希值一起輸入壓縮函數(shù)。壓縮函數(shù)基本上將消息洗牌 64 次,然后將其壓縮到 256 位并將其發(fā)送到下一個(gè)壓縮塊或作為最終哈希發(fā)送出去。因此,變量輸入消息會(huì)被多次打亂,以防止它被用來獲取原始消息。完成此操作后,將生成輸出哈希。
SHA-3 的工作原理
SHA-3 函數(shù)沒有預(yù)定義的輸出長(zhǎng)度。輸入和輸出長(zhǎng)度也沒有最大值。但為了與 SHA-2 進(jìn)行比較,讓我們根據(jù)輸出位長(zhǎng)度定義四種主要類型。這些是:
SHA3-224 – 哈希長(zhǎng)度為 224 位。
SHA3-256 – 哈希長(zhǎng)度為 256 位。
SHA3-384 – 哈希長(zhǎng)度為 384 位。
SHA3-512 – 哈希長(zhǎng)度為 512 位。
讓我們以 SHA3-256 為例。SHA-3使用Keccak海綿功能。就像海綿一樣,第一步吸收或吸收輸入信息。在下一階段,輸出哈希被擠出。圖 4 是 SHA3-256 函數(shù)的框圖。
圖4.此圖顯示了用于安全哈希生成的 SHA3-256 函數(shù)的框圖。
安全哈希生成:SHA3-256 函數(shù)
圖 4 中的迭代函數(shù)接收 1600 位數(shù)據(jù),然后使用特定算法對(duì)其進(jìn)行 24 輪排列,然后將其作為 1600 位塊傳遞到下一階段。這種情況一直持續(xù)到吸收階段完成。
吸收階段完成后,最后一個(gè) 1600 位塊將傳遞到壓縮階段。在這種情況下,由于 SHA3-256 輸出哈希長(zhǎng)度小于 1088 位,因此壓縮階段不需要任何迭代函數(shù)。我們從最后階段獲取前 256 位,這就是輸出哈希。
例如,如果所需的哈希長(zhǎng)度為 2500 位,我們將需要迭代函數(shù)的三個(gè)實(shí)例才能獲得所需的長(zhǎng)度哈希。
AES(高級(jí)加密標(biāo)準(zhǔn))
與 DES(數(shù)據(jù)加密標(biāo)準(zhǔn))和 3DES(三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn))等舊加密算法一樣,AES 算法的目的是以可逆方式根據(jù)輸入鍵的值對(duì)輸入數(shù)據(jù)進(jìn)行加擾和替換。結(jié)果稱為密文。AES算法旨在取代前幾十年開發(fā)的DES和3DES算法,這些算法容易受到攻擊。AES 算法的說明如圖 5 所示。
圖5.此圖概述了 AES 算法。
AES 算法
AES 算法是一種固定寬度的加密算法。因此,首先填充輸入消息,以確保它完全適合“n”個(gè) 128 位塊。
每個(gè) 128 位塊與加密密鑰一起輸入加密算法。根據(jù)加密密鑰中的位數(shù),AES 算法執(zhí)行一定數(shù)量的回合來掩蓋輸入塊位。這種模糊是通過打亂數(shù)據(jù)位、獲取部分?jǐn)?shù)據(jù)并用查找表(如解碼器輪)中的值替換它們來實(shí)現(xiàn)的,然后執(zhí)行 XOR 操作以根據(jù)從輸入加密密鑰生成的一組“圓形密鑰”中的位值將位從 0 翻轉(zhuǎn)為 1。輪次密鑰用于其中一個(gè)模糊輪次,并通過復(fù)制位并將副本插入其他位來“擴(kuò)展”加密密鑰的一部分來創(chuàng)建。
AES解密功能只是使用相同的加密密鑰執(zhí)行與加密功能中的操作相反的操作,以便對(duì)原始輸入塊數(shù)據(jù)進(jìn)行解密。
3DES(三重?cái)?shù)據(jù)加密標(biāo)準(zhǔn))
三重 DES(或 3DES)算法背后的基本思想是根據(jù)輸入鍵的值以可逆的方式對(duì)輸入數(shù)據(jù)進(jìn)行加擾和替換。結(jié)果稱為密文。3DES 算法是 1970 年代開發(fā)的原始 DES(數(shù)據(jù)加密標(biāo)準(zhǔn))算法的重演。當(dāng) DES 在 1990 年代遭到入侵時(shí),對(duì)更安全算法的需求是顯而易見的。3DES成為單個(gè)DES問題的近期解決方案。為了理解 3DES,圖 6 首先顯示了原始 DES 的描述。
圖6.此圖概述了 DES 算法。
DES(數(shù)據(jù)加密標(biāo)準(zhǔn))算法
DES 算法是一種固定寬度的加密算法。因此,首先填充輸入消息,以確保它完全適合“n”個(gè) 64 位塊。
每個(gè) 64 位塊與 56 位加密密鑰一起輸入加密算法(該算法的大多數(shù)版本采用 64 位密鑰,但忽略 8 位)。加密功能使用輸入密鑰生成 16 個(gè)“子密鑰”,每個(gè)子密鑰用于 16 輪遮蓋輸入塊位。這種模糊是通過打亂數(shù)據(jù)位、獲取部分?jǐn)?shù)據(jù)并用查找表(如解碼器輪)中的值替換它們來實(shí)現(xiàn)的,然后執(zhí)行 XOR 操作以根據(jù)子鍵中的位值將位從 0 翻轉(zhuǎn)到 1。
DES 解密函數(shù)只是使用相同的加密密鑰執(zhí)行與加密函數(shù)中的操作相反的操作,以解密原始輸入塊數(shù)據(jù)。
3DES 如何工作?
從 DES 導(dǎo)出三重 DES 算法
在 DES 被證明容易受到比“暴力攻擊”(循環(huán)遍歷每個(gè)可能的密鑰值直到顯示原始消息塊)短的攻擊后,開發(fā)了一種有效增加加密密鑰大小的簡(jiǎn)單方法。圖 7 描述了 3DES 解決方案。
圖7.此圖顯示了如何使用三個(gè) DES 操作來創(chuàng)建 3DES 算法。
3DES 算法實(shí)際上是 3 個(gè) DES 操作。第一個(gè)和最后一個(gè)操作是加密操作,而中間操作是解密操作。請(qǐng)務(wù)必注意,“加密”和“解密”只是分配給彼此相反的加擾操作的名稱。
對(duì)于在 3DES 中執(zhí)行的每個(gè) DES 操作,該操作都使用專用密鑰。通常,第一個(gè)和第三個(gè)操作的鍵是相同的。對(duì)第一個(gè)和第三個(gè)操作使用相同的密鑰,對(duì)中間操作使用不同的密鑰,有效地使總密鑰長(zhǎng)度加倍,這使得暴力攻擊更加困難,并消除了單個(gè) DES 的漏洞。
RSA 公鑰密碼系統(tǒng)
RSA以其創(chuàng)建者Ron Rivest,Adi Shamir和Leonard Adleman的名字命名,是最早的非對(duì)稱公鑰加密/解密系統(tǒng)之一。它使用素?cái)?shù)的模塊化算法的屬性來生成可用于加密的公鑰和可用于解密的私鑰。加密和解密操作也基于模塊化算法。RSA 的概述如圖 8 所示。
圖8.此圖顯示了 RSA 加密的概述。
密鑰生成和加密/解密操作稱為單向或“陷門”函數(shù)。它們是在一個(gè)方向上計(jì)算相對(duì)簡(jiǎn)單的數(shù)學(xué)運(yùn)算,但在另一個(gè)方向上很難計(jì)算。例如,計(jì)算乘以 2 很容易,但計(jì)算 x 的平方根更難。
在 RSA 的情況下,兩個(gè)大的素?cái)?shù)相乘以創(chuàng)建公鑰和私鑰的一部分。乘法很容易;回去發(fā)現(xiàn)秘密素?cái)?shù)是很困難的。
使用公鑰加密消息也比嘗試反向獲取沒有私鑰的消息要容易得多。但是,私鑰也可以輕松解鎖消息,因此絕不能共享。
私鑰可以被視為打開一個(gè)活板門,揭示了繞過試圖破解加密消息的復(fù)雜迷宮的捷徑。
RSA 安全性依賴于大型質(zhì)數(shù)和復(fù)雜的操作。對(duì)于大多數(shù)計(jì)算系統(tǒng)來說,即使是通過其帶有大鑰匙的陷門功能的簡(jiǎn)單路徑也很麻煩。因此,RSA 通常用作發(fā)送共享加密密鑰的工具,這些密鑰可用于更快的對(duì)稱算法,如 DES、3DES 和 AES,用于單個(gè)事務(wù)。
ECDSA 算法
橢圓曲線數(shù)字簽名算法 (ECDSA) 允許通信中的參與者通過基于稱為私鑰的隱藏信息為輸入消息生成數(shù)字簽名來證明真實(shí)性。此密鑰用于生成公鑰,其他人使用該公鑰來驗(yàn)證參與者的真實(shí)性。
數(shù)字簽名是使用輸入消息、私鑰和隨機(jī)數(shù)生成的。然后,可以使用公鑰來驗(yàn)證簽名者(或參與者)是否擁有相應(yīng)的私鑰,因此是否真實(shí)。圖 9 說明了此概念。
圖9.ECDSA(橢圓曲線數(shù)字簽名算法)有助于驗(yàn)證數(shù)字簽名。
數(shù)字簽名算法最初是用模算術(shù)引入的,它依賴于大素?cái)?shù)和需要大量使用計(jì)算能力的計(jì)算。橢圓曲線密碼學(xué)的引入利用橢圓函數(shù)的數(shù)學(xué)特性在不犧牲安全性的情況下簡(jiǎn)化數(shù)學(xué)。
密鑰生成和簽名操作稱為單向或“陷門”函數(shù)。它們是橢圓曲線計(jì)算,在一個(gè)方向上計(jì)算相對(duì)簡(jiǎn)單,但在另一個(gè)方向上計(jì)算起來卻很困難。私鑰可以被視為打開一個(gè)活板門,揭示了繞過試圖破壞密鑰生成或簽名操作的復(fù)雜迷宮的捷徑。
ECDSA 允許一方簽署來自任何一方的消息。但是,為了證明 ECDSA 的真實(shí)性,簽名者不得預(yù)先知道要簽名的消息。由于缺乏對(duì)消息的控制,通信中的另一個(gè)參與者可以用新信息“挑戰(zhàn)”簽名者,以證明擁有私鑰。
ECDH密鑰交換協(xié)議
橢圓曲線Diffie-Hellman(ECDH)密鑰交換允許雙方建立一個(gè)共享密鑰,以便僅與一條稱為私鑰的隱藏信息進(jìn)行通信。如果沒有相關(guān)方之一的私鑰,竊聽者就無法輕松確定共享密鑰。但是,該算法允許將一方的私鑰和另一方的公鑰組合在一起,以生成對(duì)雙方都相同的結(jié)果密鑰。圖 10 說明了此概念。
圖 10.ECDH密鑰交換允許雙方建立共享密鑰以進(jìn)行通信。
ECDH密鑰交換
Diffie-Hellman密鑰交換首先是用模算術(shù)引入的,它依賴于大素?cái)?shù)和需要大量使用計(jì)算能力的計(jì)算。橢圓曲線密碼學(xué)的引入利用橢圓函數(shù)的數(shù)學(xué)特性在不犧牲安全性的情況下簡(jiǎn)化數(shù)學(xué)。
密鑰生成和組合密鑰操作稱為 1 路或“陷門”函數(shù)。它們是橢圓曲線計(jì)算,在一個(gè)方向上計(jì)算相對(duì)簡(jiǎn)單,但在另一個(gè)方向上計(jì)算起來卻很困難。私鑰可以被視為打開一個(gè)活板門,揭示了繞過試圖破壞密鑰生成或組合操作的復(fù)雜迷宮的捷徑。
ECDH算法允許雙方一起建立密鑰,但它不能保證任何一方都是可信的。為此,需要額外的身份驗(yàn)證層。例如,如果為公鑰提供了證書,例如使用來自受信任密鑰持有者的私鑰計(jì)算的 ECDSA(橢圓曲線數(shù)字簽名算法)簽名,則通過使用受信任持有者的公鑰對(duì)證書進(jìn)行身份驗(yàn)證來驗(yàn)證公鑰的認(rèn)證。
通過使用公鑰和來自受信任機(jī)構(gòu)的證書,ECDH的參與者可以確定他們的對(duì)應(yīng)方是真實(shí)的參與者。關(guān)注我們的密碼學(xué)教程系列中的其他部分,以繼續(xù)加深您對(duì)這種重要安全技術(shù)的理解。
審核編輯:郭婷
-
密鑰
+關(guān)注
關(guān)注
1文章
141瀏覽量
19857 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
63012 -
XOR
+關(guān)注
關(guān)注
0文章
12瀏覽量
162042
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM32密碼學(xué)訣竅,這套資料幫助你掌握!(方法論+加密庫(kù)資料合集)
對(duì)稱性加密算法
物聯(lián)網(wǎng)安全機(jī)制密碼學(xué)基礎(chǔ)
淺談對(duì)稱加密算法與非對(duì)稱密鑰加密算法
STM32密碼學(xué)基本原理
密碼學(xué)中的加密技術(shù)
什么是非對(duì)稱加密?非對(duì)稱加密概念
![什么是<b class='flag-5'>非對(duì)稱</b>加密?<b class='flag-5'>非對(duì)稱</b>加密概念](https://file1.elecfans.com//web2/M00/A7/0F/wKgZomUMQhyAZiQ-AAAoRD-2yu4051.png)
java實(shí)現(xiàn)非對(duì)稱加密算法的過程
![java實(shí)現(xiàn)<b class='flag-5'>非對(duì)稱</b>加密<b class='flag-5'>算法</b>的過程](https://file1.elecfans.com//web2/M00/A7/0F/wKgZomUMQhyAaHNjAAAkvYVj-d0844.png)
非對(duì)稱密鑰的應(yīng)用有哪些
如何理解區(qū)塊鏈密碼學(xué)中的非對(duì)稱加密
橢圓曲線密碼學(xué)詳細(xì)解析
![橢圓曲線<b class='flag-5'>密碼學(xué)</b>詳細(xì)解析](https://file.elecfans.com/web1/M00/B2/CD/pIYBAF4SlOaAQ---AADa8bRzmsg895.png)
密碼學(xué)常用算法的工作原理和特點(diǎn)
![<b class='flag-5'>密碼學(xué)</b>常用<b class='flag-5'>算法</b>的工作原理和特點(diǎn)](https://file.elecfans.com/web1/M00/BF/DD/pIYBAF739uKARSgLAAC3KZSInxQ653.png)
評(píng)論