3.3.1.1. Giới thiệu
Mã dòng 128-EEA3 dùng để mã hóa và giải mã dữ liệu với các dòng dữ liệu liên tục có độ dài từ 1 đến 20000 bit. Đầu vào và đầu ra của giải thuật này nhƣ sau:
Tham số Kích thƣớc
(bits) Ghi chú
Đầu vào
COUNT 32 Biến đếm
BEARER 5 Xác định sóng mang (bearer)
DIRECTION 1 Xác định hƣớng chuyển dữ liệu là upload hay download
CK 128 Khóa mật
LENGTH 32 Chiều dài (bits) của dữ liệu đầu vào
M LENGTH Chuỗi bit đầu vào (bản rõ)
Đầu ra C LENGTH Chuỗi bit đầu ra (bản mã)
Trong bảng trên các biến COUNT, BEARER, DIRECTION là các tham số dùng để thiết lập generator. Bộ ba biến này kết hợp lại tạo thành biến nonce cho quá trình mã hóa, giải mã và đƣợc đính kèm vào bản mã.
3.3.1.2. Tạo keystream
Trong phần thiết lập, 128-EEA3 sẽ tạo ra các đối số để chạy ZUC là: khóa và vector khởi tạo. Biến CK đƣợc dùng làm khóa của ZUC. Quá trình tạo vector khởi tạo đƣợc bắt đầu bằng việc tách các biến COUNT ra thành từng byte:
Trang 111
Dùng biến IV 128-bit làm vector khởi tạo sử dụng cho ZUC. IV sẽ đƣợc tách nhỏ thành từng byte và đƣợc gán giá trị cho từng byte này:
IV = IV0 ║IV1 ║IV2 ║…║IV15
IV0 = COUNT0, IV1 = COUNT1, IV2 = COUNT2, IV3 = COUNT3, IV4 = BEARER║DIRECTION║002, IV5 = IV6 = IV7 = 000000002,
IV8 = IV0, IV9 = IV1, IV10 = IV2, IV11 = IV3, IV12 = IV4, IV13 = IV5, IV14 = IV6, IV15 = IV7.
Lúc bấy giờ hai biến CK và IV sẽ đƣợc nạp để ZUC hoạt động. Sau mỗi vòng lặp, ZUC sẽ tạo ra một word 32-bit. Để tạo đủ keystream để mã hóa dữ liệu có kích thƣớc LENGTH thì cần thực hiện số vòng lặp LLENGTH/32. Sau L vòng lặp ZUC sinh ra keystream z có kích thƣớc LENGTH bit.
3.3.1.3. Mã hóa và giải mã
Trong quá trình mã hóa, ta XOR từng bit của thông tin cần mã hóa M với keystream z
mà ZUC vừa tạo ra. Do đó 128-EEA3 dùng kiến trúc mã dòng đồng bộ cộng. Quá trình mã hóa và giải mã đƣợc tiến hành nhƣ sau:
o Mã hóa: C = M XOR z.
o Giải mã: M = C XOR z.
Trang 112