iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
Security

CTF 菜鳥修練日誌系列 第 18 篇

Day 18:【Crypto】一體兩面的異或運算:XOR 加密特性與解題

  • 分享至 

  • xImage
  •  

前言

在密碼學(Cryptography)與資安鑑識中,XOR(Exclusive OR,異或運算) 是最核心且無所不在的運算。從基礎的串流加密(Stream Cipher)、一次性密碼本(One-Time Pad, OTP),到現代對稱式加密(如 AES),其背後都大量仰賴 XOR 的強大數學特性。

今天我們將深入探討 XOR 的位元特性,並結合**視覺密碼學(Visual Cryptography)**的概念,透過 Python (Pillow + NumPy) 處理兩張雜訊圖片,完成經典 CTF 題目破解。


本日目標

  1. 理解 XOR 的真值表與關鍵數學特性(交換律、結合律、自反性)。
  2. 掌握 XOR 在密碼學中的「一體兩面」:加解密同一性。
  3. 了解視覺密碼學(Visual Cryptography)與圖像像素運算原理。
  4. 實戰解破 CyLab / picoCTF 經典 Cryptography 題目:Pixelated。

預備觀念一:XOR 運算的位元特性

XOR 的運算規則非常簡單:「相同為 0,不同為 1」。

位元真值表 (Truth Table)

Bit A Bit B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

預備觀念二:XOR 三大關鍵數學特性

假設 P 為明文(Plaintext)、K 為金鑰(Key)、C 為密文(Ciphertext):

  1. 自反性(Self-Inverse):
    A XOR A = 0 (任何數與自己做 XOR 必定為 0)
  2. 單位元律(Identity Element):
    A XOR 0 = A (任何數與 0 做 XOR 保持不變)
  3. 加解密同一性(Symmetric Encryption & Decryption):
    • 加密:C = P XOR K
    • 解密:P = C XOR K
    • 推導:C XOR K = (P XOR K) XOR K = P XOR (K XOR K) = P XOR 0 = P

預備觀念三:視覺密碼學與像素運算

視覺密碼學(Visual Cryptography) 是將秘密資訊(如文字或圖像)拆分成兩張或多張看似隨機亂碼(Noise)的影像。單看任一張圖都無法取得任何資訊,但只要將圖片對應位置的像素點(RGB 值)進行 ADD(相加) 或 XOR(異或) 疊加運算,雜訊就會彼此抵消,隱藏的 Flag 便會浮現。


實戰單元:CyLab 題目 - Pixelated

1. 題目分析與檔案下載

在 CyLab 平台開啟 Pixelated 題目,下載給定的兩張圖片:scrambled1.png 與 scrambled2.png。

圖片打開後皆為滿滿的彩點雜訊,無法直接辨識任何字樣。


2. 環境建置與 Python 腳本實作

開啓 WSL / Linux 終端機,確保已安裝圖片處理套件:

sudo apt update && sudo apt install python3-pil python3-numpy -y

撰寫 Python 解題腳本 solve.py:

from PIL import Image
import numpy as np

# 1. 載入兩張雜訊圖片
img1 = Image.open('scrambled1.png').convert('RGB')
img2 = Image.open('scrambled2.png').convert('RGB')

# 2. 轉為 NumPy 陣列進行逐像素運算
arr1 = np.array(img1)
arr2 = np.array(img2)

# 方式一:像素相加 (ADD 運算)
result_add_array = (arr1.astype(np.uint16) + arr2.astype(np.uint16)) % 256
Image.fromarray(result_add_array.astype(np.uint8)).save('flag_add.png')

# 方式二:像素異或 (XOR 運算)
result_xor_array = arr1 ^ arr2
Image.fromarray(result_xor_array.astype(np.uint8)).save('flag_xor.png')

print("處理完成!已生成 flag_add.png 與 flag_xor.png")

https://ithelp.ithome.com.tw/upload/images/20261002/201842113YaF6mFr7B.png

3. 執行與結果檢視在 WSL 終端機執行腳本:

python3 solve.py
explorer.exe flag_add.png

https://ithelp.ithome.com.tw/upload/images/20261002/20184211ejVky007Y4.png

開啟產出的 flag_add.png,畫面中央即浮現出清晰的文字 Flag:

academy{2f16d0c4}

https://ithelp.ithome.com.tw/upload/images/20261002/2018421144JsNZek6I.png


上一篇
Day 17:【Crypto】古老而經典的替換密碼:凱撒密碼 (Caesar Cipher) 與 ROT13
系列文
CTF 菜鳥修練日誌 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言