https://cryptohack.org/courses/symmetric/block_cipher_starter/
上一題我們學到了 AES 如何對一個數據塊進行加密排列,然而在實際應用中,常常會需要加密長於單個數據塊的訊息。
所以接下來就會介紹如何在較長的訊息上使用像 AES 這樣的加密算法。
然後題目要我們到另一個網站完成這題的挑戰:
https://aes.cryptohack.org/block_cipher_starter/
這個網站給了我們 source code、 DECRYPT(CIPHERTEXT) 解密密文、ENCRYPT_FLAG() 加密flag 、 xor tool 以及 hex 的加密解密器
可以大概了解一下加密與解密的過程
from Crypto.Cipher import AES # 引入 AES 加密模組
KEY = ?
FLAG = ?
@chal.route('/block_cipher_starter/decrypt/<ciphertext>/')
def decrypt(ciphertext):
ciphertext = bytes.fromhex(ciphertext) # 將密文由 hex 字串轉為 bytes
# 使用指定的密鑰和 ECB 模式來建立 AES 加密器
cipher = AES.new(KEY, AES.MODE_ECB)
try:
# 嘗試解密密文
decrypted = cipher.decrypt(ciphertext)
# 如果解密過程中出現錯誤,返回錯誤信息
except ValueError as e:
return {"error": str(e)}
return {"plaintext": decrypted.hex()} # 將解密後的明文轉換為 hex 字串並返回
# 加密端點,將 FLAG 進行加密
@chal.route('/block_cipher_starter/encrypt_flag/')
def encrypt_flag():
# 使用指定的密鑰和 ECB 模式來建立 AES 加密器
cipher = AES.new(KEY, AES.MODE_ECB)
encrypted = cipher.encrypt(FLAG.encode()) # 將 FLAG 轉換為 bytes 並進行加密
return {"ciphertext": encrypted.hex()} # 將加密後的密文轉換為 hex 字符串並返回
先按一下 ENCRYPT_FLAG() 的 submit,就會得到:
{"ciphertext":"0bf3da3fce245ce6bd6c9a9abaaef49945bbf20ec314ca38b341707c36bd00b9"}
根據 source code,我們可以知道 0bf3da3fce245ce6bd6c9a9abaaef49945bbf20ec314ca38b341707c36bd00b9 這串是加密後的密文(而且是 hex 格式)。
然後確認一下,嗯好的,解密的函式所需要輸入的密文格式也是 hex,所以就直接複製密文到解密那欄,然後 submit,接下來就會得到:
{"plaintext":"63727970746f7b626c30636b5f633170683372355f3472335f663435375f217d"}
再把明文那串(637.........217d)丟到 hex 的解碼器就可以得到flag了!
crypto{bl0ck_c1ph3r5_4r3_f457_!}
(block_ciphers_are_fast_!)
分組加密模式(Block Cipher Mode of Operation):
將數據分成固定大小的塊,然後對每個塊進行獨立加密。所以明文會被拆分成多個大小相同的塊,並在加密算法處理後,各自生成對應的密文塊。
常見的分組加密有很多種模式,像是ECB,CBC,CFB,OFB等等
我看了一下後面的題目,好像會講到CBC和OFB,所以今天就先介紹ECB就好~~(絕對不是想偷懶XD)~~
加密模式詳細介紹: https://ithelp.ithome.com.tw/articles/10249953
塊加密工作模式(企鵝圖出處): https://blog.csdn.net/jerry81333/article/details/78336616
也有提到塊加密的英文內容:
https://github.com/francisrstokes/githublog/blob/main/2022/6/15/rolling-your-own-crypto-aes.md
今天在看分組加密的內容時發現,好像在哪裡看過,原來就是昨天題目附的參考資料,裡面也有linux企鵝經過不同塊加密運作會有的差異。今天最大的收穫大概就是發現原來塊加密有分這麼多種。甚至和區塊鏈加密有關。