0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hướng Dẫn Chi Tiết về Thuật Toán Mã Hóa Đối Xứng AES - Phần 2: Các Quy Trình Mã Hóa và Giải Mã

Đăng vào 3 tháng trước

• 3 phút đọc

Chủ đề:

Cryptography

III. Thuật Toán AES - Quy Trình Mã Hóa và Giải Mã

Trong phần này, chúng ta sẽ đi sâu vào từng bước của quá trình mã hóa và giải mã với thuật toán AES, đặc biệt là phiên bản AES-128. Chúng ta sẽ tìm hiểu cách thức xử lý dữ liệu, thao tác với khóa bí mật và từng bước thực hiện trong mỗi vòng mã hóa (round).

1. Thao Tác Với Khối Dữ Liệu

Thuật toán AES-128 chia văn bản cần mã hóa thành các khối, mỗi khối có kích thước 128 bit hay 16 byte. Mỗi khối này được tổ chức thành một ma trận 4x4, thể hiện dạng một khối (block). Mỗi phần tử trong ma trận ký hiệu là P_i (i = 0 đến 15) có kích thước 1 byte, được sắp xếp từ trên xuống dưới, từ trái qua phải.

Trong mỗi vòng mã hóa, các khối này được thể hiện dưới dạng ma trận trạng thái (state matrix). Ma trận trạng thái sẽ thay đổi sau mỗi vòng mã hóa, và kết quả cuối cùng chính là ma trận của văn bản đã được mã hóa. Dưới đây là một ví dụ với khối dữ liệu đầu vào viblosecurityh2o được chuyển vào ma trận trạng thái:

python Copy
matrix = [['v', 'i', 'b', 'l'],
          ['o', 's', 'e', 'c'],
          ['u', 'r', 'i', 't'],
          ['y', 'h', '2', 'o']]

Hàm chuyển đổi từ chuỗi byte sang ma trận có thể được thực hiện như sau:

python Copy
def bytes2matrix(text):
    """ Chuyển đổi mảng 16 byte thành ma trận 4x4. """
    return [list(text[i:i+4]) for i in range(0, len(text), 4)]

Để giải mã, các bạn cần thực hiện hàm matrix2bytes() để chuyển ma trận trở lại thành chuỗi byte:

python Copy
def matrix2bytes(matrix):
    """ Chuyển đổi ma trận 4x4 thành mảng 16 byte. """
    return ''.join(byte for row in matrix for byte in row)

2. Thao Tác Với Khóa - Lịch Trình Khóa AES

Trong quá trình mã hóa AES, một khóa bí mật 128 bit sẽ được sử dụng trong mỗi vòng mã hóa. Tuy nhiên, không phải tất cả các vòng đều sử dụng cùng một khóa. Để giải quyết vấn đề này, ta thực hiện một thao tác gọi là mở rộng khóa

2.1. Hằng Số Vòng

Hằng số vòng (round constants) được định nghĩa theo các mảng rcon_i. Mỗi mảng này có 4 phần tử, mỗi phần tử có kích thước 8 bit. Các giá trị rcon_i sẽ được tính toán theo công thức nhất định.

2.2. Lịch Trình Khóa

Cách thức mở rộng khóa sẽ chuyển khóa bí mật thành một chuỗi lớn hơn bốn cột, mỗi cột là một word 32 bit. Đây là quy tắc tính toán các word trong quá trình mở rộng khóa:

python Copy
W[i] = ...

Đối với AES-128, khóa bí mật ban đầu sẽ được mở rộng thành 44 nhóm khóa mới để sử dụng trong từng vòng mã hóa và giải mã.

3. Tổng Quan Các Vòng Mã Hóa và Giải Mã Trong AES-128

Thuật toán AES-128 sử dụng 10 vòng mã hóa, mỗi vòng sẽ thực hiện các thao tác khác nhau như AddRoundKey, SubBytes, ShiftRows, và MixColumns. Quá trình mã hóa bắt đầu với AddRoundKey, sau đó thực hiện các vòng liên tiếp đến vòng cuối cùng chỉ thực hiện ba thao tác. Quá trình giải mã ngược lại các bước mã hóa, với quy ước các thao tác thay đổi một chút.

Tóm lại, AES-128 là một thuật toán mã hóa mạnh mẽ và hiệu quả trong việc bảo vệ dữ liệu, và mỗi bước trong quá trình hoạt động của nó đều rất quan trọng để đảm bảo tính bảo mật.

Tài Liệu Tham Khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào