Giải thích chi tiết thuật toán AES và quy trình giải mã giao diện

Định nghĩa cơ bản

Thuật toán AES (Advanced Encryption Standard) là phương pháp mã hóa đối xứng phổ biến nhất hiện nay, trong đó khóa mã hóa và giải mã hoàn toàn giống nhau.

Đặc điểm chính:

  • Chia dữ liệu thành khối: Dữ liệu được xử lý theo khối cố định 128 bit (16 byte)
  • Độ dài khóa: Hỗ trợ 3 loại khóa 128 bit, 192 bit và 256 bit. Độ dài khóa càng lớn mức độ bảo mật càng cao

Các chế độ mã hóa phổ biến

Chế độ Đặc điểm Ứng dụng
ECB Mỗi khối dữ liệu được xử lý độc lập, không cần vector khởi tạo (IV) Phù hợp với dữ liệu ngắn không có mẫu lặp
CBC Sử dụng IV ngẫu nhiên và liên kết các khối qua phép XOR Ưu tiên cho dữ liệu nhạy cảm
CTR Cho phép xử lý song song, tạo luồng mã hóa từ bộ đếm Hiệu quả với dữ liệu lớn

Ví dụ giải mã ECB


import base64
from Crypto.Cipher import AES

def giai_ma(data, khoa):
cipher = AES.new(khoa.encode(), AES.MODE_ECB)
ma_b64 = base64.b64decode(data)
ban_ro = cipher.decrypt(ma_b64)
return ban_ro[:-ban_ro[-1]].decode()

Phân tích giao diện API

Ví dụ từ một hệ thống thực tế:


{
"data": "U2FsdGVkX1+...",
"secret": "khoamahoa123"
}

Giải mã CBC trong JavaScript:


function giaiMaAES(duLieu, khoa, iv) {
const key = CryptoJS.enc.Utf8.parse(khoa);
const ivParsed = CryptoJS.enc.Utf8.parse(iv);
const decrypted = CryptoJS.AES.decrypt(duLieu, key, { iv: ivParsed });
return decrypted.toString(CryptoJS.enc.Utf8);
}

Vấn đề IV cố định

Khi hệ thống sử dụng vector khởi tạo (IV) không thay đổi:

  • Tăng nguy cơ bị tấn công phân tích mẫu
  • Dễ bị tấn công replay do tính lặp lại của bản mã
  • Giải pháp: Tự động tạo IV ngẫu nhiên cho mỗi phiên mã hóa

Giải mã CBC trong Python


from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

def giai_ma_CBC(du_lieu_ma_hoa, khoa, iv):
cipher = AES.new(khoa.encode(), AES.MODE_CBC, iv.encode())
ban_ro = unpad(cipher.decrypt(base64.b64decode(du_lieu_ma_hoa)), AES.block_size)
return ban_ro.decode()

Thẻ: aes mã hóa giải mã Giao diện python

Đăng vào ngày 3 tháng 6 lúc 22:32