CHƢƠNG 1 CÁC KHÁI NIỆM CƠ BẢN
2.2. Các bài toán về ATTT trong thỏa thuận và ký kết hợp đồng của TMĐT
2.2.1. Bảo đảm tính toàn vẹn thông tin hợp đồng trực tuyến
Bài toán:
Trong thỏa thuận hợp đồng trực tuyến giữa A và B về cung cấp hay đặt mua một loại mặt hàng hay dịch vụ nào đó, giả sử rằng A là người soạn hợp đồng và gửi đến B xem xét và thỏa thuận hợp đồng, sau khi kiểm tra nội dung nếu B đồng ý với các điều khoản của hợp đồng thì B sẽ ký lên hợp đồng đó. Vấn đề đặt ra là liệu có một kẻ thứ ba trái phép nào đó đã xem trộm và sửa bản hợp đồng đó, nội dung bản hợp đồng mà B nhận được liệu có đúng với nội dung mà A đã soạn thảo hay không?
Khi B nhận được hợp đồng từ A, giả sử bản hợp đồng không bị sửa đổi trên đường truyền, B đồng ý với các điều khoản trong bản hợp đồng và ký chấp nhận hợp đồng, hay nếu B không đồng ý với tất cả các điều khoản trong hợp đồng thì B bổ sung một số điều khoản để thỏa thuận lại và gửi lại cho A. Trong quá trình bản hợp đồng đã được B gửi về A, liệu bản hợp đồng đó có đúng như bản hợp đồng mà B đã gửi hay đã bị sửa đổi, bị xâm phạm tính toàn vẹn thông tin của bản hợp đồng này.
Giải pháp:
Do vậy, để chống lại sự tấn công hay giả mạo thì cần phải làm thế nào cho văn bản khi được gửi đi sẽ “không được nhìn thấy” hoặc có xâm nhập được vào văn bản thì cũng không thể giả mạo. Xuất phát từ nhu cầu đó công nghệ mã hóa và chữ ký số ra đời để giải quyết bài toán bảo mật khi trao đổi thông tin.
Để đảm bảo tính toàn vẹn của bản hợp đồng trực tuyến trong khi chúng được truyền đi trên mạng trước hết ta cần một kênh truyền an toàn, với các phương pháp đảm bảo tính toàn vẹn trong giao dịch nói chung, một kỹ thuật đặc trưng quan trọng để đảm bảo tính toàn vẹn hợp đồng giao dịch là dùng chữ ký số và chứng chỉ điện tử.
Khi nội dung của bản hợp đồng bị thay đổi, thì chữ ký trên bản hợp đồng đó cũng phải thay đổi theo. Chữ ký điện tử nhằm đảm bảo tính toàn vẹn, duy nhất và không bị sửa đổi dữ liệu gốc bởi người khác. Chữ ký là bằng chứng xác thực người gửi chính là tác giả của thông điệp mà không phải là một ai khác. Không những thế, khi chữ ký điện tử được gắn với thông điệp điện tử thì đảm bảo rằng thông tin trên
đường chuyển đi sẽ không bị thay đổi. Mọi sự thay đổi dù nhỏ nhất sẽ đều bị phát hiện dễ dàng.
Cụ thể, để đảm bảo tính toàn vẹn thông tin hợp đồng trực tuyến thì tác giả đã sử dụng hệ mã hóa AES như sau:
Input (Đầu vào), Output (Đầu ra) của hệ mã hóa AES:
Đầu vào và đầu ra của chuẩn mã hóa tiên tiến (AES) đều là các dãy 128 bit, còn gọi là các khối (block), độ dài của mỗi khối này là số bit dữ liệu mà nó chứa. Khóa của chuẩn mã hóa tiên tiến là một dãy có độ dài 128, 192 hoặc 256 bit. Chuẩn mã hóa dữ liệu tiên tiến không làm việc với các giá trị đầu vào, đầu ra, khóa có các đô ̣dài khác (mặc dù thuật toán cơ sở của nó cho phép điều này). Các bit của đầu vào, đầu ra, khóa của hê ̣mã được đánh số từ 0.
Trạng thái (State):
Các trạng thái bên trong của AES được thực hiện trên một mảng hai chiều và các byte được gọi là trạng thái. Một trạng thái gồm có 4 hàng các byte trong đó mỗi hàng có Nb byte (Nb là kích thước của khối chia cho 32). Mảng trạng thái ký hiệu là s trong đó mỗi byte của mảng có hai chỉ số là hàng r và cột c (0<=r, c<=4).
Tại thời điểm bắt đầu input của thuật toán – mảng byte in0, in1,...in15 được copy vào mảng trạng thái theo quy tắc được minh họa bằng hình vẽ.
Bảng 3: Các trạng thái của AES
Trong đó các giá trị của mảng s và mảng output được tính như sau: s[r,c]=in[r+4c] với mọi 0<=r, c<4
out[r+4c]=s[c,r] với mọi 0<=r, c<4 Biểu diễn trạng thái
Bốn cột của mảng trạng thái của thuật toán tạo thành 4 word 32 bit w0, w1,...w3 được biểu diễn như sau:
w0 = s0,0 s1,0 s2,0 s3,0 w1 = s0,1 s1,1 s2,1 s3,1 w2 = s0,2 s1,2 s2,2 s3,2 w3 = s0,3 s1,3 s2,3 s3,3
Mã hóa và Giải mã AES:
Độ dài của input, output và các trạng thái (state) của chuẩn mã hóa cao cấp AES là 128 bit tương ứng vớ i giá tri ̣của Nb = 4 (là số lượng các word 32-bit và cũng là số cột của mỗi trạng thái). Khóa của AES có độ dài là 128, 192, 256 bit tương ứng với các giá trị của Nk là 4, 6, 8 và cũng là số cột của khóa mã hóa.
Tương ứng với độ dài của khóa sử dụng số vòng lặp của thuật toán Nr nhận các giá trị 10 (Nk = 4), 12 (Nk = 6) hoăc̣ 14 (Nk = 8). Chúng ta có thể minh họa qua bảng sau: Độ dài khóa (Nk từ) Độ dài khối (Nb từ) Số vòng (Nr) AES-128 4 4 10 AES-196 6 4 12 AES-256 8 4 14
Bảng 4: Độ dài khóa AES
Quá trình mã hóa và giải mã AES đều sử dụng một hàm lặp kết hợp của bốn hàm biến đổi sau:
- Biến đổi thay thế byte sử dụng một bảng thế (S-box)
- Số lần dịch của mỗi hàng dịch mảng trạng thái với là khác nhau
- Kết hợp dữ liệu của mỗi cột trong mảng trạng thái và cộng một khóa Round Key vào trạng thái z.
1. Thuật toán mã hóa AES
Thuật toán mã hóa AES [5] được thực hiện các công việc giống nhau dựa trên 4 hàm (lần lượt theo thứ tự SubBytes(), ShiftRows(), MixColumns(), AddRoundKey() trừ vòng cuối cùng bỏ qua việc thực hiện hàm MixColumns().
Hình 2.2: Sơ đồ thuật toán AES
Hàm SubByte():
Hàm SubBytes() sử dụng một bảng thế S-box để thực hiện phép thay thế các byte của mảng trạng thái, bảng thay thế S-box này là khả nghịch, được xây dựng bằng cách kết hợp hai biến đổi:
a. Nhân nghịch đảo trên trường hữu hạn GF(28), phần tử {00} được ánh xạ thành chính nó.
bi’= bi b(i+4)mod8 b(i+5)mod8 b(i+6)mod8 b(i+7)mod8 ci, trong đó 0i8 là bit thứ i của byte b tương ứng và ci là bit thứ I của byte c với giá trị {63} hay {01100011} Các phần tử biến đổi affine của S-box có thể được biểu diễn dưới dạng ma trận như sau:
Hình 2.3: Các phần tử biến đổi của S-box dưới dạng ma trận
Hình dưới đây minh họa kết quả của việc áp dụng hàm biến đổi SubBytes() đối với mảng trạng thái
Hình 2.4: Kết quả biến đổi của hàm SubBytes() với mảng trạng thái
Trong đó phép cộng thực hiện như phép XOR. Hình dưới trình bày nội dung bảng S-box sau khi tính toán.
Hình 2.5: Nội dung bảng S-box sau khi tính toán
Ví dụ: xét giá trị {95}, tại bước 1, giá trị tại dòng 9 cột 5 là {95}, sau bước 2 tính nghịch đảo giá trị của ô này là {8A} có dạng nhị phân là 10001010. Thực hiện phép nhân ma trận:
Hình 2.6: Kết quả tính toán
Kết quả dưới dạng thập lục phân là {2A}.
Hàm ShiftRows():
Các byte trong ba hàng cuối của mảng trạng thái sẽ được dịch vòng với số lần dịch khác nhau. Hàng đầu tiên r=0 không bị dịch. Cụ thể hàm này sẽ tiến hành bước đổi sau:
S’rc = Sr,(c+shift(r,Nb))modNb (Nb=4) trong đó giá trị dịch shift(r,Nb) phụ thuộc vào số hàng r như sau:
Thao tác này sẽ chuyển các byte tới các vị trí thấp hơn trong các hàng và các byte thấp nhất sẽ được chuyển lên đầu hàng. Tất cả các mô tả trên có thể minh họa qua hình vẽ sau:
Hình 2.7: Minh họa sự dịch vòng
Hàm MixColumns():
Hàm này làm việc trên các cột của mảng trạng thái, nó coi mỗi cột của mảng trạng thái như là một đa thức gồm 4 hạng tử. Các cột sẽ được xem như là các đa thức trên GF(28) và được nhân trên modulo x4+1 với một đa thức cố định a(x):
a(x) = {03}x3 + {02}x2 + {01}x + {02} Có thể biểu diễn bằng phép nhân ma trận:
s’(x) = a(x) s(x)= =
Với mọi 0≤c<Nb = 4
Kết quả là bốn byte trong mỗi cột sẽ được thay thế theo công thức sau: s’0,c = ({02}●s0,c)({03}●s1,c) s2,c s3,c
s’1,c = s0,c({02}●s1,c) ({03}●s2,c) s3,c s’2,c = s0,cs1,c ({02}●s2,c) ({03}●s3,c) s’3,c = ({03}●s0,c)s1,c s2,c ({02}●s3,c)
Có thể minh họa việc thực hiện hàm này bằng hình vẽ sau:
Hình 2.8: Minh họa làm việc trên cột trạng thái
Hàm AddRoundKey():
Hàm này một khóa vòng (Round Key) sẽ được cộng vào mảng trạng thái bằng một thao tác XOR bit. Mỗi khóa vòng gồm Nb word được sinh ra bởi thủ tục sinh khóa. Các word này sẽ được cộng vào mỗi cột của mảng trạng thái như sau:
[s’0,c, s’1,c, s’2,c, s’3,c] = [s0,c, s1,c, s2,c, s3,c round*Nb+c] 0≤c≤Nb = 4
Trong đó [wi] là các word của khóa và round là lần lặp tương ứng với quy ước 0≤round≤Nb. Trong thuật toán mã hóa phép cộng khóa vòng khởi tạo xảy ra với round=0 trước khi các vòng lặp của thuật toán được thực hiện. Hàm AddRoundKey() được thực hiện trong thuật toán mã hóa khi 1≤round≤Nb.
Việc thực hiện hàm này có thể được minh họa như trong hình vẽ, trong đó l=round*Nb.
Địa chỉ byte trong các word của dãy khóa được mô tả như sau:
Thuật toán sinh khóa (Key Expansion):
Thuâṭ toán sinh khóa của AES nhận một khóa mã hóa K sau đó thực hiện một thủ tục sinh khóa để sinh một dãy các khóa cho việc mã hóa. Thủ tục này sẽ sinh tổng số Nb*(Nr+1) word, thủ tục sử dụng một tập khởi tạo Nb word và mỗi một lần lặp trong số Nr lần sẽ cần tới Nb word của dữ liệu khóa. Dãy khóa kết quả là một mảng tuyến tính các word 4-byte được ký hiệu là [wi] trong đó 0<= i < Nb(Nr + 1).
Hình 2.10: Quá trình thực hiện Expand Key
2. Thuật toán giải mã AES
Thuật toán giải mã [5] về mặt cấu trúc cũng khá giống với thuật toán mã hóa tuy nhiên bốn hàm cơ bản sử dụng là các hàm ngược của các hàm trong thuật toán giải mã bao gồm: InvShiftRows(), InvSubBytes(), InvMixColumns() và AddRoundKey().
Hàm InvSubBytes():
Hàm này là hàm ngược của hàm SubBytes(), hàm sử dụng nghịch đảo của biến đổi Affine bằng cách thực hiện nhân nghịch đảo trên GF(28
)
Hàm InvShiftRows():
Hàm này là hàm ngược của hàm ShiftRows(). Các byte của ba hàng cuối (của mảng trạng thái) sẽ được dịch vòng với vị trí dịch là khác nhau. Hàng đầu tiên không bị dịch, ba hàng cuối bị dịch đi Nb-shift(r,Nb) byte trong đó giá trị shift(r,Nb) phụ thuộc vào số hàng
Cụ thể hàm này tiến hành xử lý như sau:
Hình 2.11: Minh họa thực hiện hàm InvShiftRows()
Hàm InvMixColumns():
Hàm này là hàm ngược của hàm MixColumns(). Nó làm việc trên các cột của mảng trạng thái, coi mỗi cột như một đa thức bốn hạng tử. Các cột được xem như là các đa thức trên GF(28) và được nhân theo modulo x4+1 với một đa thức cố định là a-1(x)
a-1(x) = {0b}x3 + {0d}x2 + {09}x + {0e}
Có thể được mô tả bằng phép nhân ma trận sau:
s’(x) = a-1(x) s(x) = = trong đó 0≤c<Nb
Kết quả là bốn byte trong mỗi cột sẽ được thay thế theo công thức sau: s’0,c = ({0e}●s0,c)({0b}●s1,c) ({0d}●s2,c) ({09}●s3,c) s’1,c = ({09}●s0,c)({0e}●s1,c) ({0b}●s2,c) ({0d}●s3,c) s’2,c = ({0d}●s0,c)({09}●s1,c) ({0e}●s2,c) ({0b}●s3,c) s’3,c = ({0b}●s0,c)({0d}●s1,c) ({09}●s2,c) ({0e}●s3,c)
Biến đổi nghịch AddRoundKey():
Hàm nghịch của hàm AddRoundKey() cũng chính là nó vì hàm này chỉ có phép toán XOR bit.