You are on page 1of 2

Bài thực hành AES

1. Thực hiện phép nhân 2 phần tử trong trường GF(28 )

Mục tiêu: Giúp sinh viên nắm được cách biểu diễn dữ liệu và lập trình thực hiện
các phép toán trên trường GF(28 ) làm nền tảng để tự cài đặt được hệ mật AES.

Cơ sở lý thuyết:

- Trong trường GF(28 ) có 256 phần tử, mỗi phần tử a  GF(28 ) tương ứng với 1
ký tự (kiểu unsigned char) 8 bit a = a7 a6 a5 a4 a3a2 a1a0 hoặc một đa thức có bậc
nhỏ hơn 8, a = a7 x7 + a6 x6 + a5 x5 + a4 x4 + a3 x3 + a2 x2 + a1x + a0 hoặc dưới dạng
2 số hexa 4 bit h0 = a3a2 a1a0 , h1 = a7 a6 a5 a4 .
- Phép cộng (+) hai phần tử a , b trong GF(28 ) khá đơn giản: c = a + b sẽ có các
hệ số ci = (ai + bi ) mod 2 .
- Phép nhân (*) hai phần tử a , b trong GF(28 ) được thực hiện bằng phép nhân
đa thức c( x) = a( x) * b( x) mod h( x) trong đó h( x) = x8 + x 4 + x 3 + x + 1 là một
đa thức bất khả quy trên GF(28 ) .

Nội dung:

- Bước 1: Viết 1 đoạn chương trình thực hiện phép nhân 2 phần tử trong GF(28 )
theo gợi ý sau:

Đầu vào: a, b là 2 phần tử thuộc GF(28 )


Đầu ra: c = a * b là phần tử thuộc GF(28 )

• Thực hiện các bước sau tối đa 8 lần (mỗi lần ứng với 1 bit của b), dừng lại khi a = 0 hoặc b = 0
1. Nếu bit ngoài cùng bên phải của b là 1, tính c bằng cách thực hiện XOR c với a, tương
đương với một phép cộng đa thức.
2. Dịch phải b 1 bit, loại bỏ bit này và đánh dấu bit ngoài cùng bên trái có giá trị 0 (loại bỏ
b0)
3. Đặt f = a7
4. Dịch trái a 1 bit, loại bỏ a7
5. Nếu f = 1, tính a bằng cách XOR a với số hexa 0x1B (00011011)
• Kết thúc vòng lặp trên c là kết quả cần tìm

8
- Bước 2: Thử tính (x6 + x4 + x + 1)(x7 + x6 + x3 + x) trong GF(2 )
Kết quả cần đạt:
- Chương trình thực hiện phép nhân thực thi đúng theo thuật toán có mã nguồn.
2. Thực hiện hàm MixColumn trong AES:
Mục tiêu: Giúp sinh viên nắm được cách lập trình thực hiện được thuật toán nhân
2 phần tử trong GF(28 ) từ đó lập trình được mô-đun MixColumn trong AES.

Cơ sở lý thuyết: Trong AES, hàm MixColumn có đầu ra gồm 4 giá trị Sij' (mỗi giá
trị là 1 phần tử thuộc GF(28 ) , được thực hiện bằng cách lấy từng cột (gồm 4 giá trị S ij )
nhân với một ma trận như dưới đây.

Trong đó, mỗi phần tử của ma trận là một giá trị 8 bit thuộc GF(28 ) , viết dưới dạng số
hexa.
Nội dung:
- Bước 1: Viết 1 đoạn chương trình thực hiện phép MixColumn nêu trên
- Bước 2: Tính kết quả của 4 cột (hexa)
97 4D F2 87
EC 90 4C 6E
C3 4A E7 46
95 D8 8C A6

You might also like