3.3.1.1. Giới thiệu
Mã hóa dòng 128-EEA3 dùng để mã hóa và giải mã dữ liệu có độ dài từ 1 đến 2000 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 COUNTBEARER 325 Biến đếmThe bearer identity
DIRECTION 1 The direction of transmission
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. Giá trị của các biến này sẽ được gửi kèm cùng với 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à vectơ khởi tạo. Biến CK được dùng làm khóa của ZUC. Quá trình tạo vectơ 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:
COUNT=COUNT0 ║COUNT1 ║COUNT2 ║COUNT3
Dùng biến IV 128-bit làm vectơ 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:
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 L=LENGTH/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á trinh 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.