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 56 - 95)

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

2.4 THUẬT TOÁN KASUMI

KASUMI là một bộ mật mã khối được sử dụng trong các mạng di động. 1) Trong mạng 3G, KASUMI được sử dụng trong 2 thuật toán bí mật

(f8) và toàn vẹn (f9) với tên là UEA1 và UIA1 tương ứng;

2) Trong mạng GSM, KASUMI được sử dụng ở bộ tạo dòng khoá A5/3; 3) Trong mạng GPRS, KASUMI được sử dụng ở bộ tạo khoá GEA3.

KASUMI do nhóm chuyên gia về thuật toán (SAGE) thiết kế cho hệ thống bảo mật UMTS.

2.4.2 Thuậ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

đượ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.

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

2.5 THUẬT TOÁN TẠO MÃ NHẬN THỰC [09] 2.5.1 Giới thiệu 2.5.1 Giới thiệu

Trong kiến trúc bảo mật mạng 3G có dùng các hàm f1, f2, f3, f4, f5 để tạo khóa nhận thực. Hoạt động của các hàm này nằm trong miền của một nhà khai thác, vì vậy, không cần thiết chuẩn hoá chúng; nhà khai thác mạng 3G có quyền lựa chọn thuật toán truy nhập mạng và nhận thực cuộc gọi cho riêng mình. Các thuật toán tạo khoá và nhận thực (AKA) được thực hiện ở

các trung tâm nhận thực (AuC) của nhà khai thác và ở các khối (mô đun) đặc tả thuê bao di động (USIM) thuộc mạng của nhà khai thác đó. Tuy nhiên, để đạt được sự liên kết hoạt động giữa các USIM khác nhau và AuC, thì cần sử

dụng một thuật toán tiêu chuẩn chung, vì vậy, nhóm nghiên cứu SA3 đã đề

nghị dùng chung một thuật toán MILENAGE cho các nhà khai thác mạng.

2.5.2 Thuật toán MILENAGE

2.5.2.1 Các đầu vào và đầu ra

Các tham vào và ra của thuật toán được mô tảở bảng 2.3, 2.4, 2.5 và 2.6. Tập thuật toán MILENAGE sử dụng các phần tử sau:

- Một hàm mật mã khối với 128 bit đầu vào và một khoá có độ dài 128 bit. Nếu đầu vào là X, khoá là K, thì đầu ra Y = E[x]k.

- 128 bit OP. Đây là trường cấu hình thuật toán có thể thay đổi do nhà khai thác lựa chọn.

2.5.2.2 Các phn t và kiến trúc ca thut toán

Tập thuật toán được đặc tả bằng một hàm mật mã khối E. Bộ mật mã khối

được chọn là Rijndael và đây là thuật toán mật mã hoá tiên tiến AES, có kích thước 128 bit, sử dụng khoá có độ dài 128 bit.

E[x]k = kết quả của việc áp dụng thuật toán mật mã Rijndael đến 128 bit X bằng cách sử dụng khoá K có độ dài 128 bit.

Các đầu vào và đầu ra của Rijndael được xác định như là chuỗi các byte. Chuỗi 128 bit x = x[0] || x[1] || … x[127] được xem như là chuỗi các byte trong đó x[0] || x[1] || … x[7] là byte đầu tiên, x[8] || x[9] || … x[15] là byte thứ hai,... Khoá và chuỗi đầu ra được biến đổi theo cách tương tự.

128 bit OPc nhận được từ OP và K như sau:

OPC = OP ⊕ E[OP]K (2.30)

Bảng 2.7: Các tham số đầu vào của f1

Tham số Độ dài (bits) Chú thích

K 128 Khoá thuê bao K[0]…K[127]

RAND 128 Thách thức ngẫu nhiên RAND[0]…RAND[127]

SQN 48 Số thứ tự SQN[0]…SQN[47]

AMF 16 Trường quản lý nhận thực AMF[0]…AMF[15]

Bảng 3.8: Các tham số đầu vào của f2, f3, f4 và f5

Tham số Độ dài (bits) Chú thích

K 128 Khoá thuê bao K[0]…K[127]

RAND 128 Thách thức ngẫu nhiên RAND[0]…RAND[127]

Bảng 2.9: Các tham sốđầu ra của f1

Tham số Độ dài (bits) Chú thích

MAC-A 64 Mã nhận thực mạng MAC-A[0]…MAC-A[63]

Bảng 2.10: Các tham số đầu ra của f2

Tham số Độ dài (bits) Chú thích

RES 64 Đáp ứng RES[0]…RES[63]

Bảng 2.11: Các tham số đầu ra của f3

Tham số Độ dài (bits) Chú thích

CK 128 Khoá bí mật CK[0]…CK[127]

Bảng 2.12: Các tham số đầu ra của f4

Tham số Độ dài (bits) Chú thích

IK 128 Khoá toàn vẹn IK[0]…IK[127]

Bảng 2.13: Các tham số đầu ra của f5

Tham số Độ dài (bits) Chú thích

AK 48 Khoá che dấu AK[0]…AK[47]

Một giá trị 128 bit TEMP trung gian được tính như sau:

Một giá trị 128 bit IN1được xây dựng như sau:

IN1[0] .. IN1[47] = SQN[0] .. SQN[47] IN1[48] .. IN1[63] = AMF[0] .. AMF[15] IN1[64] .. IN1[111] = SQN[0] .. SQN[47] IN1[112] .. IN1[127] = AMF[0] .. AMF[15]

Năm hằng số 128 bit c1, c2, c3, c4, c5 được xác định như sau:

c1[i] = 0 với 0 ≤ i ≤ 127

c2[i] = 0 với 0 ≤ i ≤ 127, ngoại trừ c2[127] = 1 c3[i] = 0 với 0 ≤ i ≤ 127, ngoại trừ c3[126] = 1 c4[i] = 0 với 0 ≤ i ≤ 127, ngoại trừ c4[125] = 1 c5[i] = 0 với 0 ≤ i ≤ 127, ngoại trừ c5[124] = 1

Năm số nguyên r1, r2, r3, r4, r5 được định nghĩa như sau:

r1 = 64; r2 = 0; r3 = 32; r4 = 64; r5 = 96

Năm khối 128 bit OUT1, OUT2, OUT3, OUT4, OUT5 dược tính như sau:

OUT1 = E[TEMP ⊕ rot(IN1 ⊕ OPC, r1) ⊕ c1]K⊕ OPC OUT2 = E[rot(TEMP⊕ OPC, r2) ⊕ c2]K⊕ OPC OUT3 = E[rot(TEMP⊕ OPC, r3) ⊕ c3]K⊕ OPC OUT4 = E[rot(TEMP⊕ OPC, r4) ⊕ c4]K⊕ OPC OUT5 = E[rot(TEMP⊕ OPC, r5) ⊕ c5]K⊕ OPC (2.32) R A N D EK S Q N ||A M F ||S Q N ||A M F ro ta te b y r1 EK ro ta te b y r3 EK ro ta te b y r2 EK ro ta te b y r5 EK ro tate b y r4 EK O PC c 1 f1 f1 * f5 f2 f3 f4 f5 * O PC O PC O PC O PC c 2 c 3 c4 c5 O PC O PC O PC O PC O PC O PC O P EK O PC

Các đầu ra của các hàm khác nhau được định nghĩa như sau:

Đầu ra của f1 = MAC-A, trong đó MAC-A[0] .. MAC-A[63] = OUT1[0] .. OUT1[63]

Đầu ra của f1* = MAC-S, trong đó MAC-S[0] .. MAC-S[63] = OUT1[64] .. OUT1[127]

Đầu ra của f2 = RES, trong đó RES[0] .. RES[63] = OUT2[64] .. OUT2[127]

Đầu ra của f3 = CK, trong đó CK[0] .. CK[127] = OUT3[0] .. OUT3[127]

Đầu ra của f4 = IK, trong đó IK[0] .. IK[127] = OUT4[0] .. OUT4[127]

Đầu ra của f5 = AK, trong đó AK[0] .. AK[47] = OUT2[0] .. OUT2[47]

Đầu ra của f5* = AK, trong đó AK[0] .. AK[47] = OUT5[0] .. OUT5[47]

(f1* là hàm nhận thực bản tin trong trường hợp phải đồng bộ lại, f5* là hàm tạo khoá dùng để tính toán khoá AK khi cần đồng bộ lại)

2.5.3 Thuật toán mật mã khối Rijndeal

Hàm lõi (kernel) là bộ mật mã khối Rijndael, có độ dài khối và một khoá mã thay đổi. Độ dài khối và độ dài khoá có thểđến 128, 192 hoặc 256 bit.

2.5.3.1 Trng thái và các giao din bên ngoài ca Rijndael

Rijndael gồm một chuỗi các vòng chuyển đổi đầu vào thành đầu ra. Kết quả

trung gian được gọi là trạng thái, như là một mảng các byte chữ nhật 4x4 (tổng cộng 128 bit). Khoá mật mã cũng tương tự như một mảng chữ nhật 4x4.

Rijndael nhận các byte bản tin P0, P1, …,P15 và các byte khoá K0, K1, …K15 như là tham số đầu vào và các byte mật mã C0, C1, …, C15 như là tham số đầu ra. Các byte bản tin được ánh xạ thành các byte trạng thái theo thứ tự

a0,0, a1,0, a2,0, a3,0, a0,1, a1,1, a2,1, a3,1,…và các byte khoá theo thứ tự k0,0, k1,0, k2,0, k3,0, k0,1, k1,1, k2,1, k3,1,…Ở cuối toán tử mật mã hoá, bản tin mật mã

được trích ra từ trạng thái bằng cách đặt các byte trạng thái theo cùng thứ tự, do đó, nếu chỉ số một chiều của một byte trong một khối là n và chỉ số hai chiều là (i, j), thì:

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 56 - 95)

Tải bản đầy đủ (PDF)

(95 trang)