Thuật toán KASUMI

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin Nghiên cứu an toàn và bảo mật thông tin trong môi trường di động 3G (Trang 57 - 62)

2 THUẬT TOÁN BẢO MẬT THÔNG TIN CHO MẠNG D

2.4.2Thuật toán KASUMI

2.4.2.1 Cu trúc tng quát

Thuật toán KASUMI là một bộ mật mã Feistel có 8 vòng, với đầu vào là một khối dữ liệu 64 bit và một khoá mã 128 bit. Hàm vòng (hàm f) được sử dụng

ở vòng thứ i của bộ mật mã Feistel, ký hiệu là fi. Hàm f có 32 bit đầu vào và 32 bit đầu ra. Mỗi hàm f của thuật toán KASUMI gồm 2 hàm: Hàm FL và Hàm FO. Hàm FO là một mạng sử dụng 3 ứng dụng của hàm FI có 16 bit

đầu vào và 16 bit đầu ra. Mỗi hàm FI gồm một mạng, sử dụng 2 ứng dụng của một hàm S9 và 2 ứng dụng của một hàm S7. Các chức năng S7 và S9

được gọi là “Các hộp S của KASUMI”. Cấu trúc của hàm mật mã KASUMI

được mô tả trên hình 2.3.

Từ hình 3.3 ta thấy KASUMI được tách thành một số hàm con (FL, FO và FI), có sử dụng kết hợp với các khoá con (KL, KO và KI). Mạng Feistel gồm 8 vòng ngoài và được đánh số bằng các chỉ số i, i=1, 2, ..., 8. Các hàm FL và FO trong mỗi vòng của mạng Feistel, được đánh số tương ứng theo các chỉ

số i (FLi và FOi là các hàm trong vòng thứ i của mạng bên ngoài). Hàm FLi

được sử dụng kết hợp với khoá con KLi và hàm FOi được sử dụng kết hợp với 2 khoá con KOi và KIi

Các mạng được hình thành từ 8 hàm FO, được gọi là các mạng bên trong, mỗi mạng có 3 vòng được đánh chỉ số j, j=1, 2, 3. Mỗi vòng của mạng bên trong sử dụng một một khoá KO và một hàm FI; hàm FI được sử dụng kết hợp với một khoá KI. Khoá KO, hàm FI và khoá KI được sử dụng ở hàng thứ j của FOi ký hiệu là KOi,j, FIi,j và KIi,j tương ứng (ví dụ hàm FI được sử

dụng ở vòng thứ 3 của hàm FO trong vòng thứ 5 của KASUMI, ký hiệu là FI5,3). Khoá KIi,j được chia thành hai nửa là KIi,j,1 và KIi,j,2.

2.4.2.2 Hàm mt mã hoá KASUMI a) Mng Feistel bên ngoài

KASUMI hoạt động dựa trên một tín hiệu đầu vào 64 bit (INPUT) và một khoá 128 bit (K) để tạo tín hiệu đầu ra 64 bit (OUTPUT) như sau:

Đầu vào I được chia thành hai chuỗi 32 bit L0 và R0, trong đó:

I = L0 || R0 (2.13)

Với mỗi số nguyên i, 1 ≤ i ≤ 8, ta xác định:

C F ig . 1 : K A S U M I F O 1 F L 1 F O 3 F L 3 F O 5 F L 5 F O 7 F L 7 F O 2 F L 2 F O 4 F L 4 F O 6 F L 6 F O 8 F L 8 K L1 K O1, K I1 F I i1 K Ii ,1 K Oi,1 F I i2 K Ii ,2 K Oi,2 F I i3 K Ii ,3 K Oi,3 S 9 S 9 z e r o - e x te n d z e r o - e x te n d t r u n c a t e K Ii,j ,1 K Ii ,j,2 3 2 3 2 6 4 1 6 1 6 3 2 1 6 9 7 F i g . 2 : F O F u n c ti o n F ig .3 : F I F u n c ti o n F ig .4 : F L F u n c t io n b it w i s e A N D o p e r a t io n b it w i s e O R o p e r a t io n o n e b i t le f t r o t a t i o n 3 2 1 6 1 6 K Li ,1 K Li,2 K L6 K L8 K L7 K L2 K L5 K L4 K L3 K O2, K I2 K O3, K I3 K O4, K I4 K O5, K I5 K O6, K I6 K O7, K I7 K O8, K I8 t r u n c a t e S 7 S 7 L0 L8 R0 R8

Hình 2.3- Thuật toán KASUMI

Điều này tạo thành hàm vòng thứ i của KASUMI, trong đó fi là hàm vòng có

đầu vào Li-1 và khoá vòng RKi là bộ ba khoá con (KLi, KOi, KIi). Các khoá con nhận được từ khoá K bằng thuật toán định trình khoá (key-scheduling). Khối dữ liệu đầu ra OUTPUT có độ dài 64 bit được lấy từ cuối của vòng 8:

OUTPUT = (L8 || R8) (2.15) Trong các đặc tả cho các hàm f8 và f9, chuyển đổi này được biểu diễn như

sau:

OUTPUT = KASUMI[ I ]K (2.16)

b) Các hàm fi( )

Hàm fi( ) nhận 32 bit đầu vào I và đưa ra 32 bit đầu ra O dưới sựđiều khiển của khoá vòng RKi, trong đó khoá vòng gồm bộ 3 khoá con (KLi, KOi, KIi).

Hàm fi( ) xây dựng từ 2 hàm con: Hàm FLi và Hàm FOi, được kết hợp với các khoá con KLi (sử dụng với FLi) và các khoá con KOi và KIi (sử dụng với FOi). Hàm fi( ) có hai dạng khác nhau, phụ thuộc vào vòng là chẵn hay lẻ.

Đối với các vòng lẻ i =1, 3, 5, 7, hàm fi( ) được xác định là:

fi(I, RKi) = FO( FL( I, KLi), KOi, KIi ) (2.17)

Đối với các vòng chẵn i =2, 4, 6, 8, hàm fi( ) được xác định là:

fi(I, RKi) = FL( FO( I, KOi, KIi ), KLi ) (2.18)

Như vậy, đối với các vòng lẻ thì dự liệu được xử lý bởi hàm FL, sau đó mới (adsbygoogle = window.adsbygoogle || []).push({});

được xử lý bởi hàm FO; trong khi đó, đối với các vòng chẵn thì dự liệu đi qua hàm FO, sau đó mới đến hàm FL.

c) Các hàm FL

Đầu vào hàm FLi gồm 32 bit dữ liệu và 32 bit khoá con KLi. Các khoá con

được chia thành hai khoá con 16 bit, KLi,1 và KLi,2, trong đó:

KLi = KLi,1 || KLi,2 (2.19)

Dữ liệu đầu vào I được chia thành hai nửa 16 bit, L và R, trong đó I = L || R.

Đầu ra 32 bit của hàm FLi là (L′ || R′),trong đó:

R′ = R ROL( L KLi,1 ) (2.20)

L′ = L ROL( R′ KLi,2 ) (2.21)

Các toán tửđược xác định như sau:

ROL (D): quay vòng trái khối dữ liệu D bởi 1 bit; D1 ∪D2 là toán tử OR giữa hai khối dữ liệu D1 và D2 D1 ∩D2 là toán tử AND giữa hai khối dữ liệu D1 và D2

d) Các hàm FO

Đầu vào hàm FOi gồm dữ liệu đầu vào I có độ dài 32 bit và 2 tập khoá con, một khoá KOi 48 bit, và một khoá KIi 48 bit. Dự liệu đầu vào 32 bit được chia thành hai nửa, L0 và R0, trong đó I = L0 || R0.

Các khoá con 48 bit được chia thành 3 khoá con 16 bit như sau:

KOi = KOi,1 || KOi,2 || KOi,3 và KIi = KIi,1 || KIi,2 || KIi,3 (2.22)

Với mỗi số nguyên j, 1 ≤ j ≤ 3, toán tử của vòng thứ j của hàm FOiđược xác

định như sau:

Rj = FI(Lj-1 KOi,j , KIi,j ) ⊕ Rj-1 (2.23) Lj = Rj-1 (2.24)

e) Các hàm FI

Các hàm FI được mô tả trên hình 2.3. Các đường tô đậm và mỏng được sử

dụng để mô tả sự khác biệt giữa các đường dữ liệu 9 bit và 7 bit tương ứng.

Đầu vào của hàm FIi,j là 16 bit dữ liệu đầu vào I và 16 bit khoá con KIi,j. Đầu vào I được chia thành 2 phần không bằng nhau, nửa bên trái L0 có độ dài 9 bit và nửa bên phải R0 có độ dài 7 bit, trong đó I = L0 || R0. Tương tự, khoá

KIi,j được chia thành khoá con KIi,j,1 có độ dài 7 bit và khoá con KIi,j,2 có độ

dài 9 bit, trong đó KIi,j = KIi,j,1 || KIi,j,2.

Mỗi hàm FIi,j sử dụng hai hộp S: S7 ánh xạ 7 bit đầu vào thành 7 bit đầu ra, và S9 ánh xạ 9 bit đầu vào thành 9 bit đầu ra. Các hàm FIi,j cũng sử dụng hai hàm phụ, ký hiệu là ZE( ) và TR( ):

- ZE(x) nhận chuỗi dữ liệu 7 bit vào, biến đổi thành chuỗi dữ liệu 9 bit ra bằng cách bổ sung 2 bit zero vào cuối bit có trọng số lớn nhất.

- TR(x) nhận chuỗi dữ liệu 9 bit vào, biến đổi thành chuỗi dữ liệu 7 bit ra bằng cách loại bỏ 2 bit có trọng số lớn nhất.

Hàm FIi,j được xác định bởi các toán tử sau đây:

L1 = R0 R1 = S9[L0] ⊕ ZE(R0) L2 = R1 KIi,j,2 R2 = S7[L1] ⊕ TR(R1) ⊕ KIi,j,1 L3 = R2 R3 = S9[L2] ⊕ ZE(R2) L4 = S7[L3] ⊕ TR(R3) R4 = R3 Đầu ra của hàm FIi,j là khối dữ liệu 16 bit (L4 || R4). g) Các hp S:

Hai hộp S được thiết kế để thực hiện được dễ dàng bằng logic tổ hợp và bằng một bảng tìm kiếm. Mỗi hộp S sử dụng một bảng tìm kiếm riêng. Đầu vào x gồm 7 hoặc 9 bit, bằng với số bit tương ứng ởđầu ra y. (adsbygoogle = window.adsbygoogle || []).push({});

Do đó, ta có:

x = x8 || x7 || x6 || x5 || x4 || x3 || x2 || x1 || x0 (2.25)

y = y8 || y7 || y6 || y5 || y4 || y3 || y2 || y1 || y0 (2.26)

trong đó các bit x8, y8 và x7,y7 chỉ áp dụng cho S9, và các bit x0 và y0 là các bit có trọng số nhỏ nhất.

Hp S7

Các toán tử sau đây được sử dụng trong các phương trình logic: với 2 bit u và v bất kỳ, toán tử logic AND giữa u và v được biểu diễn là uv ; toán tử

XOR của u và v được biểu diễn là u⊕v.

2.4.2.3 Định trình khoá

KASUMI có một khoá K độ dài 128 bit. Mỗi vòng của KASUMI sử dụng khoá 128 bit nhận được từ K. Trước khi tính toán các khoá vòng, hai mảng 16 bit Kj và Kj (j=1 đến 8) nhận được như sau :

Khoá K độ dài 128 bit được chia thành 8 khoá K1...K8 có độ dài 16 bit :

K = K1 || K2 || K3 ||…|| K8 (2.28)

Mảng khoá con thứ hai, Kj nhận được từ Kj bằng cách áp dụng:

Kj′ = Kj ⊕ Cj (2.29)

trong đó Cj là giá trị hằng sốđược xác định theo bảng 2.6.

Sau đó, các khoá con (KL, KO, và KI) nhận được từ bảng 2.5 sử dụng dịch vòng, trong đó ký hiệu sau được sử dụng:

D<<<n là quay vòng trái của D bởi n bit;

D<<<1 = ROL(D) là quy vòng trái của D bởi 1 bit.

Bảng 2.5: Các khoá vòng con 1 2 3 4 5 6 7 8 KLi,1 K1<<<1 K2<<<1 K3<<<1 K4<<<1 K5<<<1 K6<<<1 K7<<<1 K8<<<1 KLi,2 K3′ K4′ K5′ K6′ K7′ K8′ K1′ K2′ KOi,1 K2<<<5 K3<<<5 K4<<<5 K5<<<5 K6<<<5 K7<<<5 K8<<<5 K1<<<5 KOi,2 K6<<<8 K7<<<8 K8<<<8 K1<<<8 K2<<<8 K3<<<8 K4<<<8 K5<<<8 KOi,3 K7<<<13 K8<<<13 K1<<<13 K2<<<13 K3<<<13 K4<<<13 K5<<<13 K6<<<13 KIi,1 K5′ K6′ K7′ K8′ K1′ K2′ K3′ K4′ KIi,2 K4′ K5′ K6′ K7′ K8′ K1′ K2′ K3′ KIi,3 K8′ K1′ K2′ K3′ K4′ K5′ K6′ K7′ Bảng 2.6: Các hằng số Cj C1 0x0123 C2 0x4567 C3 0x89AB C4 0xCDEF C5 0xFEDC C6 0xBA98 C7 0x7654 C8 0x3210

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin Nghiên cứu an toàn và bảo mật thông tin trong môi trường di động 3G (Trang 57 - 62)