0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Tìm hiểu chi tiết về thuật toán mã hóa đối xứng AES - Phần 3: Các bước chính và cách thực hiện

Đăng vào 3 tuần trước

• 4 phút đọc

Chủ đề:

Cryptography

III. Thuật toán AES - Thực hiện (tiếp theo)

4. AddRoundKey

Trong quá trình mã hóa và giải mã bằng thuật toán AES, bước AddRoundKey xuất hiện tổng cộng 11 lần cho AES-128. Bước này được thực hiện ngay trước khi bắt đầu các vòng mã hóa và cũng là bước cuối cùng trong mỗi vòng. AddRoundKey thực hiện phép toán XOR giữa bảng trạng thái hiện tại và nhóm khóa bí mật tương ứng. Kết quả là một bảng trạng thái mới được đưa vào sử dụng trong giai đoạn tiếp theo.

Dù chỉ là phép toán đơn giản, AddRoundKey lại là bước duy nhất trong toàn bộ 44 bước của quy trình mã hóa AES có sự tham gia của khóa bí mật. Điều này khiến cho việc giải mã khó khăn hơn nếu kẻ tấn công chỉ có được văn bản đã mã hóa mà không có thông tin về khóa bí mật.

Dưới đây là một đoạn mã Python minh họa cho việc thực hiện hàm AddRoundKey:

python Copy
state = [
    [206, 243, 61, 34],
    [171, 11, 93, 31],
    [16, 200, 91, 108],
    [150, 3, 194, 51],
]

round_key = [
    [173, 129, 68, 82],
    [223, 100, 38, 109],
    [32, 189, 53, 8],
    [253, 48, 187, 78],
]

def add_round_key(state, round_key):
    state_arr, round_key_arr, new_state_arr = [], [], []
    for i in state:
        for j in i:
            state_arr.append(j)
    for i in round_key:
        for j in i:
            round_key_arr.append(j)
    for i in range(16):
        new_state_arr.append(state_arr[i] ^ round_key_arr[i])
    return new_state_arr

new_state_arr = add_round_key(state, round_key)
print(new_state_arr)  # [99, 114, 121, 112, 116, 111, 123, 114, 48, 117, 110, 100, 107, 51, 121, 125]

Chương trình này lấy các phần tử từ hai ma trận stateround_key, sau đó thực hiện phép XOR cho từng phần tử tương ứng và lưu kết quả vào mảng new_state_arr. Để có được bảng trạng thái mới, chúng ta có thể chuyển mảng này thành ma trận 4x4.

5. SubBytes

SubBytes là bước thực hiện ở đầu mỗi vòng mã hóa, tổng cộng 10 lần cho AES-128. Trong các vòng giải mã, chúng ta có bước InvSubBytes thực hiện ngược lại với SubBytes và đứng thứ hai trong mỗi vòng.

Bước SubBytes thay thế từng phần tử trong bảng trạng thái hiện tại bằng một phần tử tương ứng trong bảng S-box. S-box là một bảng 16x16 chứa các giá trị cố định được biểu diễn bằng hệ thập lục phân.

Bảng S-box

Hàng/Cột 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 0x63 0x7c 0x77 0x7b 0xf2 0x6b 0x6f 0xc5 0x30 0x01 0x67 0x2b 0xfe 0xd7 0xab 0x76
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...

Quy tắc thay thế là: Với phần tử 0xαβ trong bảng trạng thái, ta thay thế bằng phần tử tại hàng α và cột β trong S-box.

Tương tự, InvSubBytes sử dụng bảng Inv-S-box để thực hiện việc thay thế ngược lại.

6. ShiftRows

Bước ShiftRows được thực hiện ngay sau SubBytes trong mỗi vòng và xảy ra 10 lần cho AES-128. Đối với các vòng giải mã, chúng ta có InvShiftRows thực hiện hướng ngược lại.

Bước ShiftRows làm việc bằng cách dịch chuyển các phần tử trong từng hàng của bảng trạng thái sang trái một số đơn vị tương ứng, tùy theo thứ tự của hàng đó. Hàm shift_rows() trong Python thực hiện như sau:

python Copy
 def shift_rows(s):
    s[0][1], s[1][1], s[2][1], s[3][1] = s[1][1], s[2][1], s[3][1], s[0][1]
    s[0][2], s[1][2], s[2][2], s[3][2] = s[2][2], s[3][2], s[0][2], s[1][2]
    s[0][3], s[1][3], s[2][3], s[3][3] = s[3][3], s[0][3], s[1][3], s[2][3]

Trong quá trình giải mã, InvShiftRows sẽ dịch chuyển các phần tử trong từng hàng theo chiều ngược lại. Bạn có thể thực hiện hàm inv_shift_rows() tương tự.

7. MixColumns

MixColumns là bước khác biệt so với tất cả 33 bước còn lại, vì nó chỉ được thực hiện 9 lần trong tổng số 10 vòng mã hóa, đồng thời nó không được thực hiện trong vòng cuối cùng của quá trình mã hóa và giải mã.

MixColumns thực hiện phép toán ma trận với ma trận đặc biệt chứa các giá trị cố định. Để tính toán từng phần tử trong mỗi cột, bạn sẽ sử dụng quy tắc tính toán theo từng hàng của ma trận.

Bài tập dành cho bạn đọc là hoàn thiện quy trình MixColumns cho bảng trạng thái đã cho, dựa trên các công thức đã được trình bày.

Tài liệu tham khảo

Thông qua các bước phân tích này, bạn đã có cái nhìn tổng quan và chi tiết về những bước quan trọng trong thuật toán mã hóa AES, cũng như cách chúng hoạt động trong quy trình mã hóa dữ liệu.
source: viblo

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