Chương 2. Lí THUYẾT MÃ DềNG
2.3. Một số kiến trúc mã dòng
2.3.4. Phương pháp mã dòng sử dụng mã khối
Có một số loại kiểu hoạt động (mode of operation) của mã khối. Phổ biến là bốn loại:
Electronic Codebook (ECB), Cipher Block Chaining (CBC), Cipher Feedback Chaining (CFB) và Output Feedback Chaining (OFB).
Trong kiểu ECB, quá trình mã (mã hóa, giải mã) được áp dụng theo từng khối độc lập.
Cho M = M1 M2 … Mt là bản rừ, sau khi mó húa thu được kết quả theo [4]:
) ( i
k
i E M
C = với i = 1, 2, …, t
Vì vậy bản mã tương ứng là C = C1C2 … Ct. Sự giải mã được mô tả bởi:
) ( i
k
i D C
M = với i = 1, 2, …, t,
ở đây Dk(x) là hàm ngược của Ek(x). Kiểu hoạt động này khá đơn điệu và cứng nhắc.
Trong kiểu CBC các khối được kết lại nhau với một giá trị khởi tạo IV. Trong kiểu này ta giả sử rằng khụng gian bản rừ và bản mó là đồng nhất, và khụng gian khối (block space) này là một nhóm Aben (Abelian group) với toán tử +. Khối bản mã đầu tiên được xác định như [4]:
), ( 1
1 E M IV
C = k +
ở đây IV là một giá trị khởi tạo thuộc không gian khối. Các khối bản mã khác sau đó được tính như sau:
) ( + −1
= k i i
i E M C
C với i = 2, 3, …, t
Để giải mó, khối bản rừ đầu tiờn thu được như:
, ) ( 1
1 D C IV
M = k −
ở đõy “–“ là toỏn tử ngược của “+”. Những khối bản rừ khỏc sau đú được tớnh như:
, ) ( − −1
= k i i
i D C C
M với i = 2, 3, …, t.
Nếu ta so sánh các công thức mã của CBC trên với công thức mã của mã dòng tổng quỏt ở Hỡnh 2, rừ ràng cú thể xem kiểu CBC làm cho mó khối trở thành mó dũng với bộ nhớ nội tại (internal memory). Bộ nhớ nội tại trong CBC ở đây, có thể hiểu là để mã hóa Ci phải cần đến Ci-1, vậy phải cần một sự nhớ lại khối bản mã đã mã hóa được trước đó, điều này cần đến một “bộ nhớ”. Đối với mã dòng đồng bộ cộng, bộ nhớ nội tại này nằm trong phần tử sinh dòng khóa của hệ thống, mà một ví dụ điển hình là LFSR (xem thêm ở các phần sau của luận văn). LFSR chính là thanh ghi (register) nếu hiện thực bằng phần cứng, nó đóng vai trò quan trọng trong việc tạo ra dòng khóa [4].
Kiểu CFB ở một mã khối còn được dùng cho quá trình thực hiện mã dòng. Giả sử rằng ta cú một mó khối với khụng gian khối bản rừ và bản mó là An, ở đõy (A, +) là một nhóm Aben. Cho Ek(x) là hàm mã hóa, rchopu(x) là ký hiệu hàm có chức năng xóa bỏ u ký tự phải nhất của đối số x, và lchopu(x) là ký hiệu hàm có chức năng xóa bỏ u ký tự trái nhất của đối số x. Một biến thể của kiểu CFB được mô tả như sau. Chọn m là số
nguyên nằm giữa 1 và n. Mã dòng dựa trên mã khối xét trên (Am, +), ở đây toán tử “+”
trên Am là toán tử mở rộng của “+” trên A. Ví dụ:
), ,...,
( ) ,.., ( ) ,...,
(x1 xm + y1 ym = x1+ y1 xm+ ym
ở đây (x1,...,xm)∈Am và (y1,...,ym)∈Am. Chọn một giá trị khởi tạo X1, việc mã húa ký tự bản rừ thứ i (Mi∈Am) như sau [4]:
)), ( ( k i
m n i
i M rchop E X
C = + − Xi+1 =lchopm(Xi)||Ci,
ở đây || là ký hiệu phép ghép (hai chuỗi dữ liệu). Còn giải mã như sau:
)), ( ( k i
m n i
i C rchop E X
M = − − Xi+1 =lchopm(Xi)||Ci.
Trong trường hợp này, kiểu CFB được thực hiện như mã dòng, cũng cần đến một thanh ghi nội tại. Thanh ghi nội tại (internal register) này được dùng để cập nhật Xi như theo công thức Xi+1 =lchopm(Xi)||Ci. Công thức này là một công thức quy nạp, rừ ràng việc tớnh giỏ trị Xi+1 phải dựng đến giỏ trị của Xi. Do vậy giỏ trị Xi này phải được lưu trữ ở bước trước đó bởi thanh ghi và được cập nhật sau đó bởi Xi+1.
Kiểu OFB ở một mã khối cũng được dùng cho quá trình thực hiện mã dòng. Như trong kiểu CFB, ban đầu một mó khối với khụng gian cả bản rừ và bản mó là An, ở đõy (A, +) là một nhúm Aben. Mó dũng dựa trờn mó khối được mụ tả như sau. Khụng gian bản rừ và bản mã của mã dòng là Am, ở đây m có thể được chọn tùy ý giữa 1 và n. Mã dòng có một thanh ghi nội tại để cập nhật giá trị Xi∈An. Cho X1 là giá trị khởi tạo của thanh ghi. Việc mó húa ký tự bản rừ thứ i (Mi∈Am) như [4]:
)), ( ( k i
m n i
i M rchop E X
C = + − Xi+1 =Ek(Xi),
Giải mã được định nghĩa bởi:
)), ( ( k i
m n i
i C rchop E X
M = − − Xi+1 =Ek(Xi).
Dễ thấy sự khác nhau duy nhất giữa CFB và OFB là sự cập nhật của thanh ghi nội tại.
Trong bốn kiểu hoạt động của mã khối như ở trên, đã có ba kiểu có thể dùng để thực hiện mã dòng. Như vậy có rất nhiều cách sử dụng mã khối cho mã dòng. Ngay cả mã dòng đồng bộ không cộng như đã được đề cập ở phần trước cũng dựa trên mã khối.
Kiến trúc mã phân phối hợp tác được trình bày ngay ở phần dưới đây cũng sử dụng đến mã khối.