Crypto-簡介及ECB

講師:堇姬 @ Izcc-ctf

2023.12.15

堇姬Naup(網管/美宣)

成電二年級/幽夜工作室繪師/台灣好厲駭學員

CKCSC36

DC : naup_sumire_hime

IG : ckcsc36th_naup

涉獵C++、C、python、遊戲(tkinter、pygame)、資安(Web、Crypto)、AI、flask、html/css/js、 PHP、DC bot。

喜歡看輕小說、動畫、Vtuber、打音遊,也喜歡看百合,就是一個長年混跡ACG的宅女。

夢想是可以成為很電的駭客跟繪師,也想自己寫出一個AI老婆。

本日重點

  • 密碼學簡介

  • 編碼 & 加密 & 雜湊

  • 古典密碼學

  • 現代密碼學

  • ECB

  • Cut and Paste

密碼學簡介

甚麼是密碼學?

包含各種加解密技術,可以很簡單的看成三大板,編碼類型、古典密碼學、現代密碼學,此區塊通常和其他類型題目結合

需要密碼學​​​​​​!!!

中間傳輸是公開的

msg:安安

  • 不是研究怎麼設安全的密碼

  • 不是教你怎麼破解別人 Facebook

  • 你不會因為知道密碼學在幹嘛就變成天才駭客 

  • 很多數學

然後密碼學有兩個東西很重要

數學!!!

將題目化成數學問題

1. 加密 Encrypt:指將明文經過某種程序轉換成密文,該程序稱為加密

2. 解密 Decrypt:指將密文經過某種程序轉換成明文,該程序稱為解密

3. 明文 Plaintext:加密前的訊息

4. 密文 Cipertext:加密後的訊息

5. 密碼學演算法:做與密碼學相關程序(如加密、解密、簽章...)的演算法

6. 金鑰 / 密鑰 Key:加解密時所使用的「鑰匙」

1.不要使用保密的密碼算法

2.不使用密碼學加密比用很弱的加密算法更危險

3.任何密碼總有一天會被破解

4.密碼學只是資訊安全的一部分

編碼 & 加密 & 雜湊

jg7LzS3fpcH15kKScqUMdg==(加密->ECB)

TmF1cEpqaW4= (編碼->base64)

9bb2508637df52b17523e4a4a9f727fca1923134a8ace76f09220a3b908e03d2(雜湊->sha256)

感覺都是亂碼,沒什麼差

編碼(encode)

編碼並不會修改資料、也沒有任何加密的效果,單純就是換個方式來呈現

base64

基於64個可列印字元來表示

6Ji/6I6J5o6n

蘿莉控

WIN11娘

V0lOMTHlqJg=

加密(encrypt)

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64

def encrypt_ecb(key, plaintext):
    cipher = AES.new(key, AES.MODE_ECB)
    padded_plaintext = pad(plaintext.encode('utf-8'), AES.block_size)
    encrypted = cipher.encrypt(padded_plaintext)
    return base64.b64encode(encrypted).decode('utf-8')

def decrypt_ecb(key, ciphertext):
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_bytes = base64.b64decode(ciphertext.encode('utf-8'))
    decrypted = cipher.decrypt(encrypted_bytes)
    return unpad(decrypted, AES.block_size).decode('utf-8')

if __name__ == "__main__":
   
    key = b'YourSecretKey123' 
    plaintext = "NaupJjin"
    
    encrypted = encrypt_ecb(key, plaintext)
    print("加密後:", encrypted)

    decrypted = decrypt_ecb(key, encrypted)
    print("解密後:", decrypted)

加密後: jg7LzS3fpcH15kKScqUMdg==
解密後: NaupJjin

密鑰:YourSecretKey123

雜湊(hash)

  • 由雜湊值是無法反推出原來的訊息

  • 雜湊值必須隨明文改變而改變

  • 明文相同出來的雜湊值相同

雜湊像果汁機一樣

訊息

神秘物質

古典密碼學

  • 以前用得加密方法,主要可以分為替換式加密移項式加密

  • 古典密碼學主要關注資訊的保密書寫和傳遞

凱薩密碼

柵欄密碼

WE ARE DISCOVERED. FLEE AT ONCE

WECRL TEERD SOEEF EAOCA IVDEN

現在CTF古典密碼學已經很少出現了,不過他做為基礎還是要知道

現代密碼學

  • 機密性(Confidentiality):確保訊息只有被授權者才能取得

  • 完整性(Integrity):偵測訊息是否遭受竄改

  • 身分認證(Authentication):傳送方與接受方需驗證識別

  • 不可否認性(Non-Reputation):提供訊息傳送方與接受方的交易證明

不只關注保密性,也包含了防止暴力破解及更關注以下幾點

現代密碼學包含很多

  • block cipher

  • stream cipher

  • RSA

  • hash

  • ECC

......

Block Cipher

區塊加密法

只用同一份 key,把加密文件一次用一個 block 文字進行加密

(本篇皆以一個block 16bytes)

ECB

  • Plaintext(P):明文

  • Ciphertext(C):密文

  • key(K):密鑰

C_i=Enc(K,P_i)
P_i=Dec(K,C_i)
P_i=Dec(K,C_i)

Padding

  • NoPadding

  • ZeroBytePadding

  • PKCS#7 Padding

不填充,如果該block沒有滿,會報錯

所有需要填充的地方都以0填充

00 00 00 00

每個填充字節的值是用於須填充字節總數

01
02 02
03 03 03

優點

  • 實作容易

  • 算法簡單

  • 加解密快速

 

缺點

安全性差,相同明文加密出來一樣,容易反推key,且若是圖像加密則加密前後差異不大

Cut and Paste

......role=

user;id=2,msg=12

456789

A

B

C

我可以輸入東西填到msg,並且如果role=admin,id=1,就可以登入管理員

......role=

userv12

admin;

A

B

D

......role=

user;id=2,msg=12

admin;id=1,msg=1

A

B

D

......role=

user;id=2,msg=AA

A

B

D

admin;id=1,msg=1

......role=

A

D

admin;id=1,msg=1


from pwn import *

r = remote('127.0.0.1', 20000)

r.sendlineafter('user = ', 'A' * 11 + '9' * 16 + 'A' * 9)
token = r.recvline().strip().partition(b' = ')[2].decode()
token = bytes.fromhex(token)
token = token[:16] + token[32:48] + token[16:32] + token[48:]
r.sendlineafter('token = ', token.hex())

r.interactive()

Solve

Crypto 1

By naup96321