---
# System prepended metadata

title: 【密碼學 VI - Data Encryption Standard】

---

# 【密碼學 VI - Data Encryption Standard】


## 01. DES 簡介與歷史背景

### 01-01. 發展歷程
- **起源**：1973 年，美國國家標準技術研究所 (NIST) 公開徵求國家級對稱加密標準。
- **獲選**：IBM 的 Lucifer 專案經過修改後被選中。
- **標準化時程**：
    1. 1975 年 3 月：在聯邦公報 (Federal Register) 上發布為聯邦資訊處理標準 (FIPS) 草案。
    2. 1976 年 11 月：正式被批准為聯邦標準。
    3. 1977 年 1 月：正式發布為 FIPS PUB 46。
- **後續發展**：
    1. 因安全性考量（主要是金鑰長度問題），NIST 後來限制其僅用於非機密應用。
    2. 1999 年發布 FIPS 46-3，建議未來應用改用 Triple DES (3DES)。


### 01-02. 演算法概觀
* **類型**：對稱式區塊加密 (Symmetric-key block cipher)。
* **區塊大小**：64 bits (每次加密 64 位元的明文)。
* **金鑰長度**：64 bits (其中 8 bits 為同位檢查碼，**實際有效長度為 56 bits**)。
* **回合數**：16 個 Feistel 回合。
![截圖 2025-11-19 晚上11.57.48](https://hackmd.io/_uploads/SJhbtDogWg.png)

<br>

## 02. DES 整體運作架構

### 02-01. 加密流程圖解
整個加密過程可以簡化為三個階段：Two Permutations and Sixteen Feistel rounds
1.  **初始置換 (Initial Permutation, IP)**：打亂明文順序。
2.  **16 輪 Feistel 運算**：核心加密過程，混合金鑰與資料。
3.  **最終置換 (Final Permutation, FP)**：IP 的逆運算。

<center>
    <img src="https://hackmd.io/_uploads/SkY_duix-x.png"
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>


**設計核心目標：**
- 讓加密 (Cipher) 與解密 (Reverse Cipher) 的演算法結構盡可能相似 。
- 目的：促進並簡化硬體的實作 (Facilitates hardware implementation) 。

**達成方法 (First Approach)：**
- 為了達成結構相似的目標，DES 採取了一種特殊的設計方式：讓最後一輪 (Round 16) 與其他回合不同 。
- 具體差異：在第 16 輪中，只進行混合 (Mixer)，不進行交換 (No Swapper) 。

![截圖 2025-11-20 凌晨1.15.04](https://hackmd.io/_uploads/ryIXsujlZe.png)

**替代做法 (Alternative Approach)：**
- **目標**：讓全部 16 個回合 (Round 1 to 16) 的運算結構完全一致 (Make all 16 rounds the same)。
- **作法**：
    1. 在第 16 輪 (Round 16) 中加入交換器 (Swapper)（原本的 First Approach 在這一輪是不交換的）。
    2. 接著在第 16 輪結束後，額外增加一個交換器 (Extra Swapper)。
- **原理**：
    1. 連續兩次交換會互相抵銷 (Two swappers cancel the effect of each other)。
    2. 這樣做既能維持正確的輸出結果（等同於最後沒交換），又能讓每一輪的電路或程式碼邏輯完全相同，簡化設計。
![截圖 2025-11-20 凌晨1.17.12](https://hackmd.io/_uploads/r1KjsdoeZl.png)

### 02-02. 初始與最終置換 (IP & FP)
- **特性**：它們是互為「逆運算」的單純位置交換 (Straight P-boxes)。即 $IP^{-1}(IP(M)) = M$。
- **安全性**：**不具備密碼學上的安全性意義**。
- **設計目的**：主要是為了早期硬體實作的便利性而設計，與混淆資料無關。

<center>
    <img src="https://hackmd.io/_uploads/ryvFudjgWx.png"
         style="
                width: 80%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>



**實例計算 (Example 6.1 & 6.2)**：
![截圖 2025-11-20 凌晨1.04.12](https://hackmd.io/_uploads/Hyw5__se-g.png)

- **IP 運算**：
    1. **輸入 (Hex)**：0x0002 0000 0000 0001 (只有第 15 bit 和第 64 bit 是 1)。 **(由於 0002 會被拆解成 0000 0000 0000 0010，且 0001 會被拆解成 0000 0000 0000 0001)**
    2. **根據 IP 表格規則**：輸入的第 15 bit $\rightarrow$ 變為輸出的第 63 bit。輸入的第 64 bit $\rightarrow$ 變為輸出的第 25 bit。
    3. **輸出 (Hex)**：0x0000 0080 0000 0002 (只有第 25 bit 和第 63 bit 是 1)。
- **驗證逆運算 (FP)**：
    1. 若將上述 IP 的輸出作為 FP 的輸入。
    2. 根據 FP 表格規則：輸入的第 25 bit $\rightarrow$ 變回第 64 bit。輸入的第 63 bit $\rightarrow$ 變回第 15 bit。
    3. 結果回到原點：0x0002 0000 0000 0001。

<br>

## 03. 核心機制：Feistel 回合與 DES 函數

### 03-01. Feistel Round 結構
每一輪運算將 64 bits 資料切分為左半部 ($L_{i-1}$) 與右半部 ($R_{i-1}$)，每半部各 32 bits。
**公式**：
* $L_i = R_{i-1}$ (左半部直接承接上一輪的右半部)
* $R_i = L_{i-1} \oplus f(R_{i-1}, K_i)$ (右半部是上一輪左半部與函數結果做 XOR)

**Swapper**：在每一輪結束後左右交換（最後一輪通常不交換，以便解密流程對稱）。
![image](https://hackmd.io/_uploads/BJNYzX2l-x.png)


### 03-02. DES 函數 ($f$ Function) 詳解
這是 DES 的心臟，將 32-bit 的資料 ($R$) 與 48-bit 的子金鑰 ($K$) 混合。步驟如下：
![image](https://hackmd.io/_uploads/H1UhXXngWg.png)

- **擴展置換 (Expansion P-box)**：
    1. 將 32 bits 擴展為 48 bits。
    2. 目的：讓資料長度能與金鑰匹配，並產生擴散效果 (Diffusion)
![截圖 2025-11-20 下午1.14.45](https://hackmd.io/_uploads/B1M0mXhgZe.png)

- **白化/混和 (Whitener / XOR)**：
    1. 將擴展後的 48 bits 資料與當前回合的 48 bits 子金鑰 ($K_i$) 進行 XOR 運算。
    2. 注意：金鑰僅在此步驟參與運算。

- **S-Boxes (Substitution Boxes) —— 最關鍵的步驟**：
    1. **功能**：提供「混淆 (Confusion)」與非線性特性。
    2. **輸入/輸出**：DES 使用 8 個 S-boxes。每個 S-box 接收 6 bits 輸入，產生 4 bits 輸出。
![截圖 2025-11-20 凌晨1.09.08](https://hackmd.io/_uploads/SkzTYOixZe.png)
![截圖 2025-11-20 凌晨1.08.56](https://hackmd.io/_uploads/B1XhKOoeWl.png)

:::success
**重點筆記**：S-Box 規則 (Example 6.3 & 6.4)
![截圖 2025-11-20 凌晨1.09.21](https://hackmd.io/_uploads/ryj6tuogZe.png)

- 輸入 6 bits：取第 1 位與第 6 位組成二進位數，決定「列 (Row 0-3)」；取中間 4 位 (第 2,3,4,5 位) 決定「行 (Column 0-15)」。
- 實例 1 (Example 6.3)：
    1. 輸入：100011
    2. 列計算：首尾是 1 和 1 $\rightarrow$ 二進位 11 = Row 3。
    3. 行計算：中間是 0001 $\rightarrow$ 二進位 0001 = Column 1。
    4. 查表 (S-box 1)：Row 3, Col 1 的值為 12。
    5. 輸出：12 的二進位為 1100。
![截圖 2025-11-20 下午1.18.06](https://hackmd.io/_uploads/B1tqEXhebl.png)
- 實例 2 (Example 6.4)：
    1. 輸入：000000
    2. 列計算：首尾 00 $\rightarrow$ Row 0。
    3. 行計算：中間 0000 $\rightarrow$ Column 0。
    4. 查表 (S-box 1)：Row 0, Col 0 的值為 14。
    5. 輸出：14 的二進位為 1110。
![截圖 2025-11-20 下午1.18.23](https://hackmd.io/_uploads/SysiN7hgWx.png)
:::

- **直線置換 (Straight P-box)**：將 8 個 S-boxes 產生的 32 bits 結果再次打亂順序。
![截圖 2025-11-20 凌晨1.09.40](https://hackmd.io/_uploads/S1kyqusgWe.png)




### Pseudocode
```python=
Cipher (plainBlock[64], RoundKeys[16, 48], cipherBlock[64])
{
    permute (64, 64, plainBlock, inBlock, InitialPermutationTable)
    split (64, 32, inBlock, leftBlock, rightBlock)
    for (round = 1 to 16){
        mixer (leftBlock, rightBlock, RoundKeys[round]) 
        if (round!=16) swapper (leftBlock, rightBlock)
    }
    combine (32, 64, leftBlock, rightBlock, outBlock) 
    permute (64, 64, outBlock, cipherBlock, FinalPermutationTable)
    
    mixer (leftBlock[48], rightBlock[48], RoundKey[48]) {
        copy (32, rightBlock, T1)
        function (T1, Roundkey, T2)
        exclusiveOr (32, leftBlock, T2, T3) 
        copy (32, T3, rightBlock)
    }
    swapper (leftBlock[32], rigthBlock[32]) {
        copy (32, leftBlock, T)
        copy (32, rightBlock, leftBlock)
        copy (32, T, rightBlock)
    }
    function (inBlock[32], RoundKey[48], outBlock[32]){
        permute (32, 48, inBlock, T1, ExpansionPermutationTable)
        exclusiveOr (48, T1, RoundKey, T2) substitute (T2, T3, SubstituteTables)
        permute (32, 32, T3, outBlock, StraightPermutationTable)
    }
    substitute (inBlock[32], outBlock[48], SubstitutionTables[8, 4, 161]) {
    for (i = 1 to 8){
        row <- 2 x inBlock[i × 6 + 1] + inBlock [i x 6 + 6] 
        col <- 8 x inBlock[i × 6 + 2] + 4 x inBlock[i × 6 + 3] + 2 x inBlock[i × 6 + 4] + inBlock[i × 6 + 5]
        value = SubstitutionTables [i][row][col]
        outBlock[[i × 4 + 1] <- value / 8; value <- value mod 8
        outBlock[[i × 4 + 2] <- value / 4; value <- value mod 4
        outBlock[[i × 4 + 3] <- value / 2; value <- value mod 2
        outBlock[[i × 4 + 4] <- value
        }
     }
}

```

<br>


## 04. 金鑰產生流程 (Key Schedule)
![截圖 2025-11-20 凌晨1.18.26](https://hackmd.io/_uploads/HJyxndjxWe.png)

### 04-01. 金鑰結構與同位元 (Parity Bit)
- 輸入金鑰：64 bits，由 8 個 Bytes 組成。
- 同位元 (Parity Bit)：
    1. 每個 Byte 的第 8 個 bit (即第 8, 16, 24...64 bit) 是同位檢查碼。
    2. 功能：最簡單的錯誤偵測碼，用來檢查二進位數值中 1 的個數是奇數還是偶數。
    3. 處理：在加密過程中，這 8 個 bits 會被丟棄。有效長度：因此，DES 的實際有效金鑰長度僅為 56 bits。
![截圖 2025-11-20 凌晨1.19.06](https://hackmd.io/_uploads/SJSfndixZl.png)

### 04-02. 子金鑰產生器 (Round-Key Generator)
**利用 56 bits 的 Cipher Key 產生 16 把 48 bits 的 Round Keys。**
- Parity Drop：去除同位元，64 bits $\rightarrow$ 56 bits。
- 切分：左右各 28 bits。
- 循環左移 (Left Shift)：根據回合表決定移 1 位或 2 位。
![截圖 2025-11-20 凌晨1.19.23](https://hackmd.io/_uploads/r18Qhdig-l.png)
- 壓縮置換 (Compression P-box)：56 bits $\rightarrow$ 48 bits。
![截圖 2025-11-20 凌晨1.20.12](https://hackmd.io/_uploads/BJw82usxbl.png)


### 04-03. Psuedocode
```python=
Key_Generator (key WithParities[64], RoundKeys[16, 48], ShifiTable[16]) {
    permute (64, 56, keyWithParities, cipherKey, ParityDropTable) 
    split (56, 28, cipherKey, lefiKey, rightKey)
    for (round = 1 to 16) {
        shiftLeft (leftKey, ShiftTable[round) shiftLeft (rightKey, ShiftTable[round])
        combine (28, 56, leftKey, rightKey, preRoundKey)
        permute (56. 48. preRoundKev, RoundKeys[round], KevCompressionTable)
   }
}
                                       
shiftLeft (block[28], numOfShifts) {
    for (i = 1 to numOfShifts)
        T <- block[l]
        for (j = 2 to 28) {
            block [j-1] <- block [j]
        }
        block[28] <- T
}
```

<br>


:::success
**重點筆記**：加密範例 (Encryption)
- 設定數值 (Hex)：
    1. Plaintext: 123456ABCD132536
    2. Key: AABB09182736CCDD
- 加密過程摘要：

<center>

| 階段 | 左半部 (Left) | 右半部 (Right) | 使用的子金鑰 (Round Key) |
| :--: | :--: | :--: | :--: |
|初始置換後 ($L_0, R_0$) | 14A7D678 | 18CA18AD | - |
| Round 1 | 18CA18AD | 5A78E394 | 194CD072DE8C | 
| Round 2 | 5A78E394 | 4A1210F6 | 4568581ABCCE | 
|... | ... | ... | ... | 
|Round 15 | BD2DD2AB | CF26B472 | 3330C5D9A36D |
Round 16 | 19BA9212 | CF26B472 | 181C5D75C66D | 

</center>

- 合併後：19BA9212CF26B472
- 最終密文 (Ciphertext)：C0B7A8D05F3A829C (經過 Final Permutation)

![截圖 2025-11-20 下午1.39.22](https://hackmd.io/_uploads/HJgiKXnx-e.png)

:::

:::success
**重點筆記**：解密範例 (Decryption)
- Bob 收到密文後，使用相同的金鑰進行解密。注意子金鑰的使用順序是相反的。
- 輸入密文: C0B7A8D05F3A829C
- 解密過程摘要：

<center>

| 階段 | 左半部 (Left) | 右半部 (Right) | 使用的子金鑰 (Round Key) |
| :--: | :--: | :--: | :--: |
| 初始置換後 | 19BA9212 | CF26B472 | - |
| Round 1 (對應加密的 R16 Key) | CF26B472 | BD2DD2AB | 181C5D75C66D |
| Round 2 (對應加密的 R15 Key) | BD2DD2AB | 387CCDAA | 3330C5D9A36D |
| ... | ... | ... | ... |
| Round 15 (對應加密的 R2 Key) | 5A78E394 | 18CA18AD | 4568581ABCCE |
| Round 16 (對應加密的 R1 Key) | 14A7D678 | 18CA18AD | 194CD072DE8C |
    
</center>

- 合併後：14A7D67818CA18AD
- 還原明文 (Plaintext)：123456ABCD132536

![截圖 2025-11-20 下午1.39.50](https://hackmd.io/_uploads/r1EhK73xbg.png)
:::

<br>

## 05. 解密流程 (Decryption)

### 05-01. 演算法的對稱性
DES 的設計使得加密與解密可以使用**完全相同的硬體與演算法**。
* **唯一差別**：子金鑰的使用順序相反。
    1. 加密：$K_1 \rightarrow K_2 \rightarrow \dots \rightarrow K_{16}$
    2. 解密：$K_{16} \rightarrow K_{15} \rightarrow \dots \rightarrow K_1$
* 由於第 16 輪沒有交換 (或經過額外交換抵銷)，解密時的初始輸入 ($L_0, R_0$) 剛好會對應到加密結束前的狀態，使得逆運算可以順利進行。
<br>


## 06. DES 的安全特性分析
### 06-01. 設計準則 (Design Criteria)
- S-box：負責提供混淆 (Confusion) 與擴散 (Diffusion)。
- P-box：負責提供擴散 (Diffusion)。
- 回合數：16 輪是為了讓密文成為明文與金鑰的隨機函數。

### 06-02. 崩塌效應 (Avalanche Effect)
* **定義**：明文或金鑰發生微小的改變（例如只變 1 bit），密文應該要有劇烈的變化（例如約一半的 bits 翻轉）。
![截圖 2025-11-20 凌晨1.40.06](https://hackmd.io/_uploads/B1W--Fox-l.png)

* 實測數據：
    1. Plaintext A: 000...000 $\rightarrow$ Cipher: 4789...
    2. Plaintext B: 000...001 (只差最後 1 bit) $\rightarrow$ Cipher: 0A4E...
    3. 結果：密文有 29 bits 不同 (約佔 45%)。
    4. 觀察：從表格可見，顯著的變化早在第 3 輪就開始發生 (差異從 1 bit 跳升至 20 bits)。
![截圖 2025-11-20 凌晨1.40.13](https://hackmd.io/_uploads/S1PZWFseZe.png)

### 06-03. 完整性 (Completeness)
* **定義**：密文的每一個 bit 都應該依賴於明文中的每一個 bit。
* **來源**：主要歸功於 P-box 的擴散與 S-box 的混淆。

<br>

## 07. 已知弱點與特殊金鑰
### 07-01. 組件的弱點
- S-box：存在碰撞，特定的兩個不同輸入可能產生相同的輸出。
- P-box：初始置換 (IP) 與最終置換 (FP) 沒有密碼學上的安全性效益。

### 07-02. 弱金鑰 (Weak Keys)
- 數量：4 個。
- 成因：產生出的 16 把子金鑰都相同。
- 現象：加密兩次會變回明文。
- 公式：$E_k(E_k(P)) = P$
- 實例：使用弱金鑰 0101010101010101 加密明文兩次，結果會回到原明文。
![截圖 2025-11-20 凌晨1.40.25](https://hackmd.io/_uploads/ByXMbYjxbg.png)
![截圖 2025-11-20 凌晨1.40.31](https://hackmd.io/_uploads/B1qM-YseWl.png)
![截圖 2025-11-20 凌晨1.40.37](https://hackmd.io/_uploads/BJzXWKje-l.png)

### 07-03. 半弱金鑰 (Semi-weak Keys)
- 數量：6 對 (共 12 個)。
- 成因：只產生兩種不同的子金鑰交替出現。
- 現象：用其中一把 ($k_1$) 加密，可以用另一把 ($k_2$) 再「加密」一次來還原（效果等同解密）。
- 公式：$E_{k2}(E_{k1}(P)) = P$
![截圖 2025-11-20 凌晨1.40.48](https://hackmd.io/_uploads/HkiXZFigWg.png)
![截圖 2025-11-20 凌晨1.40.55](https://hackmd.io/_uploads/BJMNbKje-g.png)
![截圖 2025-11-20 凌晨1.41.04](https://hackmd.io/_uploads/S19VZYigWe.png)

### 07-04. 可能弱金鑰 (Possible Weak Keys)
- 數量：48 個。
- 定義：產生出 4 組不同的子金鑰（每組 4 個）。
- 機率分析：
    1. 特殊金鑰總數 = 4 (弱) + 12 (半弱) + 48 (可能弱) = 64 個。
    2. 選中機率 = $64 / 2^{56} \approx 8.8 \times 10^{-16}$。
    3. 結論：在隨機選取金鑰的情況下，選中弱金鑰的機率極低，幾乎不可能發生。

### 07-05. 金鑰互補性 (Key Complement)
- 定義：若將金鑰與明文全部反轉 (Bitwise NOT)，密文也會反轉。
- 公式：若 $C = E(K, P)$，則 $\bar{C} = E(\bar{K}, \bar{P})$
- 實例驗證：
    1. 原 Key/Plaintext 產生的 Ciphertext: E112BE1DEFC7A367
    2. 互補 Key/Plaintext 產生的 Ciphertext: 1EED41E210385C98
    3. 兩者互為補數 (XOR 結果為全 1)。
- 安全性影響：這是一個重大特性，因為攻擊者 (Eve) 只需要測試一半的金鑰空間 ($2^{55}$)，另一半可以透過互補性質推導出來。這大幅降低了暴力破解的難度。

![截圖 2025-12-07 凌晨2.39.50](https://hackmd.io/_uploads/rJbY_gzf-x.png)

<br>

## 08. 對 DES 的攻擊方式


### 08-01. 暴力攻擊 (Brute-Force Attack)
**致命傷**：由於 DES 金鑰長度過短，且具有**金鑰互補性 (Key Complement)** 的弱點，攻擊者只需測試一半的金鑰空間，即 $2^{55}$ 次加密即可破解。

**破解歷史與成本**：
* **1977 年**：Diffie 與 Hellman 提出了一個理論上的 DES 破解機概念，造價約 2000 萬美元，能在一天內找到金鑰，但當時未有公開實作 。
* **2008 年**：德國波鴻魯爾大學 (Ruhr University Bochum) 與英國基爾大學 (Keele University) 的團隊實現了上述概念，打造出 **COPACOBANA RIVYERA** 機器，成功在一天內破解 DES 。
* *比較*：若使用每秒測試一百萬個金鑰的電腦需耗時 2000 年；但若使用平行運算（一百萬個晶片），僅需約 20 小時 。

### 08-02. 密碼分析 (Cryptanalysis)
**差異分析 (Differential Cryptanalysis)**：
- **防禦設計**：DES 的設計者早已知曉此類攻擊方式。
- **抵抗機制**：特意設計的 **S-boxes** 以及選擇 **16 回合**的運算數量，正是為了讓 DES 能夠抵抗差異分析。
- DES 的設計者（IBM 與 NSA）早已知曉此攻擊並強化了 S-Box，因此 DES 對此攻擊有較強的抵抗力。

**線性分析 (Linear Cryptanalysis)**：
- **背景**：由 Kaliski 與 Robshaw 於 **1994 年**提出，比差異分析更新。
- **脆弱性**：DES 對此攻擊較為脆弱，可能是因為 DES 設計者當初並不知道這種攻擊手法。
- **攻擊原理**：
    1. 攻擊者試圖尋找 S-box 輸入與輸出位元之間的**線性近似 (Linear approximations)** 關係，並估算這些關係成立的機率。
    2. 將這些近似關係跨回合串聯，並透過統計分析來找出最可能的子金鑰位元。
- **抵抗力**：S-boxes 對線性分析的抵抗力不佳。
    1. **需求**：理論上需要 **$2^{43}$ 對已知明文 (Known Plaintexts)** 才能破解，但在實務上很難取得如此大量的明文對。


<br>

## 09. 多重 DES (Multiple DES)

為了解決金鑰過短的問題，發展出了多重加密模式。
![截圖 2025-11-20 凌晨1.52.58](https://hackmd.io/_uploads/SkS-4YoeWl.png)

### 09-01. Double DES (2DES)
**作法**：用兩把金鑰加密兩次，公式為 $C = E_{K2}(E_{K1}(P))$。

**弱點**：**中間相遇攻擊 (Meet-in-the-Middle Attack)**。
![截圖 2025-11-20 凌晨1.53.07](https://hackmd.io/_uploads/B1JG4Fil-e.png)
* **歷史**：由 Diffie 與 Hellman 於 1977 年提出。
* **原理**：攻擊者從加密端計算 $M = E_{K1}(P)$，並從解密端計算 $M = D_{K2}(C)$，尋找兩者相符的 $M$ 值。
* **計算複雜度**：由於中間值 $M$ 兩端各有 $2^{56}$ 種可能，攻擊者只需執行 $2 \cdot 2^{56} = 2^{57}$ 次測試。
* **結論**：破解難度僅提升至 $2^{57}$，而非預期的 $2^{112}$，安全性提升有限。

![截圖 2025-11-20 凌晨1.53.25](https://hackmd.io/_uploads/rykm4tjeWx.png)

### 09-02. Triple DES (3DES)
為了抵抗中間相遇攻擊，採用三層結構。一般結構為 $E-D-E$ (加密-解密-加密)。
![截圖 2025-11-20 凌晨1.53.30](https://hackmd.io/_uploads/B1vX4KolZx.png)

* **三種金鑰選取 (Keying Options)**：
    1.  **Option 1: 3TDEA (Three-Key Triple DES)**
        * **設定**：$K_1, K_2, K_3$ 皆獨立。
        * **公式**：$C = E_{K3}(D_{K2}(E_{K1}(P)))$。
        * **安全性**：提供最高等級安全，有效金鑰長度為 $3 \times 56 = 168$ bits。
        * **應用**：商業應用如 PGP (Pretty Good Privacy) 協定即採用此模式。
    2.  **Option 2: 2TDEA (Two-Key Triple DES)**
        * **設定**：$K_1$ 與 $K_2$ 獨立，但令 $K_3 = K_1$。
        * **公式**：$C = E_{K1}(D_{K2}(E_{K1}(P)))$。
        * **安全性**：
            * 理論有效長度為 $2 \times 56 = 112$ bits。
            * 比單純的 Double DES 強，可抵抗中間相遇攻擊。
            * *注意*：因存在特定已知明文攻擊的可能性，NIST 將其有效安全強度評定為僅 **80 bits**。
    3.  **Option 3: 1 Key**
        * **設定**：$K_1 = K_2 = K_3$。
        * **結果**：前兩步 $E_{K1}$ 與 $D_{K1}$ 互相抵銷，結果等同於單一 DES ($56$ bits)。
![截圖 2025-11-20 凌晨1.53.41](https://hackmd.io/_uploads/Hye4EYslWg.png)
![截圖 2025-11-20 凌晨1.53.49](https://hackmd.io/_uploads/Syu4VKslbx.png)

### 09-03. 總結 (Summary)
* 雖然 3DES 增強了安全性，但仍容易受到某些理論攻擊的影響。
* 隨著針對 DES 的密碼分析方法不斷發展，其整體安全性已逐漸下降。
* **現況**：DES 已不再被 NIST 認可為官方的加密標準。