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.
2.2.2. Bảo đảm tính xác thực
Bài toán:
Xác thực là một thủ tục nhằm kiểm tra các thông báo nhận được, xem chúng có đến từ một nguồn hợp lệ và có bị sửa đổi hay không? Xác thực thông báo cũng có thể kiểm tra tính trình tự và tính đúng lúc. Chữ ký số là một kỹ thuật xác thực. Nó cũng bao gồm nhiều biện pháp để chống lại việc chối bỏ đã gửi hay đã nhận thông báo của hai bên gửi và bên nhận.
Khi nhận được đơn đặt hàng, hay giao dịch nào đó, chủ doanh nghiệp phải biết rõ thông tin đó có phải đã đến từ một nguồn tin cậy hay không? Khách hàng cũng như doanh nghiệp cần phải biết chính xác rằng họ đang giao dịch với ai, và đối tác giao dịch của họ có đáng tin cậy không, có an toàn không?
Đôi khi khách hàng, hay các nhà giao dịch không biết được mình đang giao dịch với ai. Rất nhiều công ty ma, hay các địa chỉ ảo, các website giả mạo website của doanh nghiệp để lừa gạt khách hàng, gây thiệt hại không nhỏ cho khách hàng giao dịch, hay các doanh nghiệp tham gia TMĐT …
Xác thực thông báo sẽ bảo vệ hai thành viên (trao đổi thông báo qua thành viên thứ ba). Tuy nhiên hai thành viên không bảo vệ lẫn nhau. Giả thiết, John gửi một thông báo đã xác thực cho Mary. Có thể xảy ra tranh chấp giữa hai thành viên như sau:
Mary có thể làm giả một thông báo khác và tuyên bố rằng thông báo này có nguồn gốc từ John. Mary có thể tạo một thông báo và gắn mã xác thực bằng khóa chung của họ. John có thể chối bỏ đã gửi thông báo. Vì Mary có thể làm giả thông báo và vì vậy không có cách nào để chứng minh John đã gửi thông báo.
Giải pháp:
Các tranh chấp xảy ra giữa người gửi và người nhận không có sự tin cậy tuyệt đối. Có nhiều giải pháp cho vấn đề xác thực như hàm băm, chứng chỉ điện tử, chữ ký số, thủy vân số. Giải pháp thường dùng là chữ ký số. Chữ ký số, tương tự như chữ ký bằng tay, nó phải có một số tính chất sau:
- Có khả năng xác thực tác giả và thời gian ký. - Có khả năng xác thực nội dung tại thời điểm ký.
Vì chức năng ký số bao hàm cả chức năng xác thực, dựa vào các tính chất cơ bản này ta đưa ra một số yêu cầu sau cho chữ ký số:
- Chữ ký số phải là một mẫu bít phụ thuộc vào thông báo được ký.
- Chữ ký phải dùng thông tin duy nhất nào đó từ người gửi, nhằm ngăn chặn tình trạng giả mạo và chối bỏ.
- Tạo ra chữ ký số dễ dàng.
- Dễ nhận ra và dễ kiểm tra chữ ký.
- Khó làm giả chữ ký số bằng cách tạo ra một thông báo mới cho một chữ ký số hiện có, hoặc tạo ra một chữ ký giả cho một thông báo có trước.
- Trong thực tế, cần phải lưu giữ bản sao của chữ ký số.
Để bảo đảm tính xác thực thông tin hợp đồng trực tuyến, tác giả sử dụng Thủy vân số như sau:
1. Quy trình nhúng Thủy vân
Hình 2.12: Quy trình nhúng Thủy vân
Phương tiện chứa (Image, Audio, Video, Text) Phương tiện chứa đã được thủy vân Khóa Thông tin xác nhận Bộ nhúng Thông tin Phân phối
2. Xác thực Thủy vân
Hình 2.13: Xác thực Thủy vân
2.2.3. Chống chối bỏ hợp đồng giao dịch
Bài toán:
Với hợp đồng thông thường, đối tác hai bên biết mặt nhau, cùng nhau trực tiếp ký kết hợp đồng với sự chứng kiến của nhiều người với luật giao dịch rõ ràng minh bạch. Giao kết hợp đồng TMĐT được thực hiện trong môi trường Internet …, các bên tham gia ký kết hợp đồng xa nhau về địa lý, thậm chí họ có thể không biết mặt nhau, thì vấn đề chối bỏ hợp đồng có thể xảy ra rất cao, mặt khác, luật pháp cho TMĐT chưa đủ, gây ra thiệt hại lớn cho các bên tham gia ký kết hợp đồng.
Ví dụ ông A muốn đặt mua một mặt hàng của công ty X ở nước ngoài. Sau khi thỏa thuận ký kết hợp đồng, Công ty X chuyển hàng đến ông A (kèm theo đó là chi phí vận chuyển, thuế hải quan), khi sản phẩm đến, ông A thay đổi ý kiến, không muốn mua sản phẩm này nữa, và ông A đã chối bỏ những gì mình đã thỏa thuận (không có bên thứ 3 thực nào xác nhận cuộc thỏa thuận hợp đồng mua hàng giữa ông A và công ty X) … Việc này gây thiệt hại cho công ty X.
Trường hợp công ty X mang hàng đến cho ông A, nhưng mặt hàng không đúng như trong thỏa thuận, mà công ty X cứ một mực khẳng định rằng ông A đã đặt mua sản phẩm này. Điều này gây thiệt hại cho ông A.
Phương tiện chứa (Image, Audio, Video, Text) Phương tiện cần xác thực Khóa Thủy vân Bộ giải tin Kiểm định
Như vậy, chối bỏ thỏa thuận hợp đồng gây thiệt hại cho các đối tượng tham gia TMĐT. Chống chối bỏ giao dịch là bài toán quan trọng trong quá trình thỏa thuận hợp đồng trong TMĐT.
Giải pháp:
Để chống chối bỏ hợp đồng giao dịch TMĐT trước hết cần có một hành lang pháp lý cho giao dịch TMĐT. Về mặt kỹ thuật, giải pháp thông dụng để đảm bảo chống chối bỏ thỏa thuận hợp đồng TMĐT, đó là chữ ký số và chứng thực điện tử. Ví dụ chữ ký không thể phủ nhận được, đó là chữ ký có thể chứng minh xác thực rằng anh A có tham gia vào một giao dịch điện tử nào hay không, chữ ký trên văn bản giao dịch có đúng đích thực của anh A hay không, nếu đó là chữ ký của A mà A chối bỏ, sẽ có giao thức chứng minh, buộc A không được chối bỏ giao dịch hợp đồng đã thỏa thuận.
Để chống chối bỏ hợp đồng giao dịch thì tác giả sử dụng chữ ký không thể phủ định. Cụ thể, sơ đồ chữ ký không phủ định được gồm 3 phần: một thuật toán ký, một giao thức kiểm thử và một giao thức chối bỏ.
Hình 2.14: Kiểm tra tính đúng đắn của chữ ký
Ký tài liệu và gửi G
N
Kiểm tra tra tính đúng đắn của chữ
ký
A
B
Hình 2.15: Giao thức kiểm thử chữ ký số
Hình 2.16: Giao thức chối bỏ chữ ký số.
Ký tài liệu và gửi
N yêu cầu G tham gia kiểm thử chữ ký
Kiểm thử chữ ký số
N đã copy chữ ký của G gửi cho A G
N
A
Ký tài liệu và gửi
N yêu cầu G tham gia kiểm thử chữ ký
Kiểm thử chữ ký số
G từ chối tham gia kiểm thử chữ ký G chối bỏ chữ ký mà anh ta đã ký G có thể tuyên bố chữ ký đó là giả mạo Chữ ký đó là giả mạo Cần có thêm giao thứ chối bỏ G N
CHƢƠNG 3. THỰC NGHIỆM CHƢƠNG TRÌNH 3.1. Giới thiệu chƣơng trình 3.1. Giới thiệu chƣơng trình
Trong chương này tác giả sẽ thực hiện một số bước trong quá trình thỏa thuận và ký kết hợp đồng của TMĐT bao gồm mã hóa và ký số hợp đồng để đảm bảo toàn vẹn thông tin và chống chối bỏ hợp đồng giao dịch.
3.1.1. Chƣơng trình mã hóa AES
Đây là chương trình Mã hóa theo Hệ mã hóa tiêu chuẩn tiên tiến-Advanced Encyption standard (AES) được viết bằng ngôn ngữ C#.
Chức năng:
- Chương trình có thể mã hóa, giải mã text gồm chữ và số, chữ có dấu
- Chương trình có thể mã hóa, giải mã file gồm chữ, số, chữ có dấu.
3.1.2. Chƣơng trình ký không thể phủ định
Đây là chương trình Chữ ký số không thể phủ định theo sơ đồ chữ ký Chaum- Van Antwerpen được viết bằng ngôn ngữ C#.
Chức năng:
- Thực hiện được thuật toán ký.
- Thực hiện được giao thức kiểm thử
- Thực hiện được giao thức chối bỏ.
3.2. Cấu hình hệ thống
- Hệ điều hành: Windows XP/2007/2010.
- Ngôn ngữ: C# (có sử dụng bộ công cụ Visual Studio 2010) - Yêu cầu môi trường: Cài đặt môi trường . Net FrameWork 4.0
3.3. Hƣớng dẫn sử dụng
3.3.1. Chƣơng trình mã hóa AES
Chương trình được chia thành 2 phần:
- Phần 1: Mã hóa văn bản gồm ký tự và số, trong đó ký tự có thể có dấu
- Phần 2: Mã hóa tệp tin gồm file .doc hoặc file .txt Nội dung chi tiết:
Tab thứ nhất: Mã hóa văn bản:
Quá trình mã hóa
- Nhập chuỗi cần mã hóa vào ô text nội dung: Ví dụ: Cộng hòa xã hội chủ nghĩa Việt Nam
- Bấm vào nút mã hóa: kết quả sẽ được hiển thị ở ô text phần nội dung kết quả là: p/RR6lSmFq+3XOUqc6TngOmGfK7o3a01jRt5nrrqPijAcSi5XZGXPJsdZnpuo3b2 Rj6v8eASqbfZ1pnlR7bPNFfx8jHSRahZuT874WaDS5k=
Hình 3.1: Quá trình mã hóa văn bản
Quá trình giải mã
- Nhập chuỗi cần giải mã vào ô text nội dung: Ví dụ:
p/RR6lSmFq+3XOUqc6TngOmGfK7o3a01jRt5nrrqPihZryPwPf+68P8rGebHeOU XZaRyCHaE6wZdcAx1sKQaiG2DLxfaJRBG2rHGjyClRFY=
- Nhập khóa vào ô text khóa: giống khóa đã đặt trong quá trình mã hóa
- Bấm vào nút giải mã: kết quả giải mã sẽ được hiển thị ở ô text phần nội dung kết quả là: Cộng hòa xã hội chủ nghĩa Việt Nam
Hình 3.2: Quá trình giải mã văn bản
Tab thứ hai: Mã hóa tệp tin:
Quá trình mã hóa:
- Bấm vào nút tìm để chọn tệp tin cần mã hóa:
- Chương trình sẽ tự lưu file được mã hóa cùng thư mục của file được mã hóa nhưng đã đổi tên thành file số 2
Hình 3.3: Quá trình mã hóa tệp tin
Quá trình giải mã tệp tin
- Bấm vào nút tìm tệp tin cần giả mã: chọn tệp tin vừa mã hóa
- Chương trình tự động lưu tệp tin giải mã vào cùng thư mục tệp tin đã mã hóa nhưng tên file sẽ được đổi thành tên tệp tin số 2