Không giống như thuật toán toàn vẹn, chỉ tính toán thông tin báo hiệu, kỹ thuật bảo toàn tín hiệu tính toán cả thông tin báo hiệu và thông tin thuê bao bằng thuật toán f8. Nguyên tắc hoạt động như sau [4]:
- Đầu tiên, sử dụng khóa mã hóa CK, và một số thông số khác, f8 (ở thiết bị di động) tính một dòng bit đầu ra.
- Thứ hai, dòng bit này được cộng XOR bit-by-bit với dòng tín hiệu thô, để thu tín hiệu mã hóa.
- Thứ ba, tín hiệu mã hóa được gửi qua kênh vô tuyến.
- Thứ tư, f8 (ở RNC) sử dụng cùng đầu vào như ở thiết bị di động, bao gồm cả khóa CK, để tạo cùng một dòng bit đầu ra.
- Cuối cùng, dòng bit trên được cộng XOR với tín hiệu mã hóa đã nhận được để thu tín hiệu gốc.
Trong đó:
BEARER: 5 bit xác định kênh dữ liệu, CK: khóa mã hóa 128 bit COUNT-C: chuỗi mã hóa 32 bit, DIRECTION: 1 bit xac định hướng
f8: thuật toán mã hóa, LENGTH: 16 bit xác định độ dài khối KEYSTREAM F8 được sử dụng cho việc mã hóa/giải mã các các khối thông tin sử dụng khóa tin cậy CK [3, 4]. Độ dài của các khối này từ 1 đến 20.000 bit. Kasumi được sử dụng trong thuật toán này như một bộ tạo dòng khóa trong chế độ hồi tiếp đầu ra và tạo các khối 64 bit đầu ra. Thông tin hồi tiếp được thay đổi bởi thông tin không đổi trong thay ghi A 64 bit, và bộ đếm BLKCNT 64 bit.
Hình 2.9 Bộ tạo dòng khóa f8
Thiết lập
Thanh ghi A bắt đầu tính COUNT || BEARER || DIRECTION || 0…0 (ví dụ 26 bit bên trái được đặt ở mức 0)
A = COUNT[0]…COUNT[31] BEARER[0]…BEARER[4] DIRECTION[0] 0…0. Bộ đếm BLKCNT cũng được đặc ở mức không.
Bộ chỉnh khóa KM được đặt giá trị 0x55555555555555555555555555555555, KSB0 = 0.
Tạo dòng mã
Thông tin không mã hóa/giải mã được sử dụng trong mã hóa/giải mã có độ dài từ 1 đến 20000 bit trong khi bộ tạo dòng khóa tạo dòng bit với bội số của 64 bit. Các bit được chia thành các khối 64 bit, các bit thừa còn lại được đưa vào làm tròn thành khối 64 bit.
Các khối dòng khóa (Keystream block) được tính theo công thức: Với mỗi số nguyên n: 1 ≤ n ≤ số khối:
KSBn = KASUMI [A BLKCNT KSBn-1]CK với BLKCNT = n-1
Các bit độc lập của dòng khóa được lấy lần lượt từ KSB1 đến KSBBLOCKS, với bit có trọng số cao trước, bằng cách sử dụng công thức sau:
Với n = 1 đến BLOCKS và mỗi số nguyên i với 0 ≤ i ≤ 63: KS [((n-1)*64) +i] = KSBn[i].
Mã hóa/giải mã
Mã hóa/giải mã cũng tương tự và được thực hiện bởi hàm exclusive-OR của thông tin đầu vào với dòng khóa KS.
Với mỗi số nguyên i (0 ≤ i ≤ LENGTH-1):