Các phần tử và kiến trúc của f8

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

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

2.2.2Các phần tử và kiến trúc của f8

Bộ tạo dòng khoá mật mã dựa trên bộ mã khối KASUMI hoạt động theo chế độ phản hồi ởđầu ra, để tạo dòng khoá mã đầu ra bằng bội số của 64 bit. Dự

liệu phản hồi được biến đổi bởi dự liệu tĩnh và được lưu giữ trên thanh ghi A có độ dài 64 bit, và một bộ đếm (tăng) BLKCNT có độ dài 64 bit. Bộ tạo dòng khoá mã f8 được mô tả trên hình 2.1. Thuật toán f8 sử dụng 2 thanh ghi 64 bit: thanh ghi tĩnh A và 1 bộđếm BLKCNT. Thanh ghi A sử dụng giá trị khởi đầu 64 bit:

IV = COUNT || BEARER || DIRECTION || 0…0 (2.1)

IV nhận được nhờ móc nối 32 bit COUNT, 5 bit BEARER,1 bit

DIRECTION, một chuỗi 26 bit 0. Bộ đếm BLKCNT được thiết lập bằng 0. Thuật toán f8 sử dụng một hằng số bộ biến đổi khoá (KM) bằng 0 x 55 = 01010101 lặp lại 16 lần (KM = 0x55555555555555555555555555555555), trong đó 0x là ký hiệu các số hexadecimal). Một toán tử KASUMI được áp dụng cho thanh ghi A, trong đó sử dụng một phiên bản biến đổi của khoá bí mật:

W được lưu giữ trên thanh ghi A.

Hình 2.1- Bộ tạo dòng khoá mã f8. 2.2.3 Tạo dòng khoá mã

Chỉ khi bộ tạo dòng khoá mã được khởi tạo, nó mới sẵn sàng tạo ra các bit dòng khoá mã. Bản tin đã mật mã hoá có độ dài LENGTH giữa (1¸ 20000) bit, còn bộ tạo dòng khoá mã cung cấp các bit dòng khoá bằng bội số của 64 bit. Số lượng giữa 0 và 63 bit có trọng số thấp nhất sẽ bị loại khỏi khối cuối cùng, điều này phụ thuộc vào tổng số bit được yêu cầu của LENGTH.

Số bit dòng khoá mã yêu cầu được ký hiệu là BLOCKS. BLOCKS= (LENGTH/64) và được làm tròn tới số nguyên gần nhất (ví dụ, nếu LENGTH=128 thì BLOCKS=2; nếu LENGTH=129 thì BLOCKS=3). Các khối dòng khoá được biểu thị là KSB1, KSB2,…, KSBBLOCKS. KSB0 được thiết lập bằng 0.

Để tạo ra một khối dòng khoá (KSB), ta thực hiện toán tử sau: Với mỗi số nguyên n, 1 ≤ n ≤ BLOCKS, ta xác định:

KSBn = KASUMI[ W ⊕ BLKCNT ⊕ KSBn-1]CK (2.3)

Trong đó: BLKCNT = n-1

COUNT || BEARER || DIRECTION || 0…0

A CK BLKCNT=0 KASUMI CK CK KASUMI KASUMI CK KS[0]…KS[63] KS[64]…KS[127] KS[128]…KS[191] KASUMI KASUMI CK ⊕ KM BLKCNT=1 BLKCNT=2 BLKCNT=BLOCKS-1

Các bit riêng lẻ KS[0], KS[1], …, KS[LENGTH-1] của dòng khoá được tách ra từ KSB1 đến KSBBLOCKS, trong đó bit có trọng số lớn nhất được tách ra

đầu tiên, bằng cách áp dụng toán tử:

Với n=1 đến BLOCKS, và với mỗi số nguyên i, 0 ≤ i ≤ 63, thiết lập:

KS[((n-1)*64)+i] = KSBn[i] (2.4)

2.2.4 Mật mã hoá và giải mật mã

Các toán tử mật mã hoá và giải mật mã là đồng nhất (như nhau) và được thực hiện bởi toán tử OR cho dữ liệu đầu vào (IBS), với dòng khoá được tạo ra (KS). Với mỗi số nguyên i, 0 ≤ i ≤ LENGTH-1, thì:

OBS[i] = IBS[i] ⊕ KS[i] (2.5)

2.3 THUẬT TOÁN TOÀN VẸN DỰ LIỆU f9 [06]

Thuật toán toàn vẹn dữ liệu f9 dựa trên bộ mật mã khối KASUMI để tính toán một mã nhận thực bản tin (MAC) trên một bản tin đầu vào, dưới sự điều khiển của một khoá toàn vẹn IK. Trong thuật toán f9 không giới hạn về độ dài bản tin.

2.3.1 Các tham sốđầu vào và đầu ra của f9

Các tham sốđầu vào và đầu ra của f9 được mô tả trong bảng 2.3, và 2.4.

2.3.2 Các phần tử và kiến trúc của f9

KASUMI được sử dụng trong chế độ chuỗi để tạo ra 64 bit digest từ bản tin

đầu vào. Đầu ra 64 bit sau đó được cắt cụt, để cung cấp 32 bit MAC-I.

Hình 3.2 mô tả hàm toàn vẹn f9. Hàm f9 sử dụng 2 thanh ghi 64 bit là A và B. Giá trị khởi đầu của cả hai thanh ghi được thiết lập bằng 0: A = 0 và B = 0. Hàm f9 cũng sử dụng 1 giá trị hằng số của bộ biến đổi khoá (KM) = 16 lần của octet 0xAA = 10101010.

(KM = 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) (adsbygoogle = window.adsbygoogle || []).push({});

Các số liệu đầu vào của f9 gồm: 32 bit COUNT, 32 bit FRESH, một chuỗi bản tin MESSAGE có độ dài LENGTH vô hạn, và 1 bit DIRECTION. Tất cả đầu vào được móc nối với nhau, sau đó một bit “1” được bổ sung vào

chuỗi móc nối này, theo sau là số lượng giữa 0 và 63 bit “0”, sao cho độ dài tổng của chuỗi kết quả là một số nguyên bằng bội lần của 64 bit. Chuỗi này

được gọi là chuỗi được đệm (PS):

PS = COUNT[0]…COUNT[31] FRESH[0]…FRESH[31]

MESSAGE[0]… MESSAGE[LENGTH-1] DIRECTION[0] 1 0*

Trong đó 0* chỉ thị số bit “0” trong trường đệm (giữa 0 và 63).

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

Tham số Kích thước (bits)

Ý nghĩa

COUNT-I 32 Đầu vào khung COUNT-I[0]…COUNT-I[31]

FRESH 32 Số ngẫu nhiên FRESH[0]…FRESH[31]

DIRECTION 1 Hướng truyền dẫn DIRECTION[0]

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

LENGTH X19 Số lượng bit ‘MAC’

MESSAGE LENGTH Dòng bit đầu vào

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

Tham số Kích thước (bits)

Ý nghĩa

MAC-I 32 Mã nhận thực bản tin MAC-I[0]…MAC-I[31]

C O U N T || F R E S H || M E S S A G E || D I R E C T I O N || 1 || 0 … 0 K A S U M I K A S U M I K A S U M I I K I K I K I K K A S U M I K A S U M I I K ⊕ K M M A C -I ( le ft 3 2 -b it s ) P S0 P S1 P S2 P SB L O C K S - 1 Hình 2.2- Hàm toàn vẹn f9.

Chuỗi PS sau đó được tách thành các khối 64 bit PSi. Ký hiệu BLOCKS là số lượng các khối 64 bit kết quả, thì:

PS = PS0 || PS1 || PS2 || …. || PSBLOCKS-1 (2.7)

PS là dữ liệu đầu vào của thuật toán MAC. Khối đầu tiên PS0 của PS có thể

xem như là giá trị khởi đầu, bởi vì PS0 = COUNT || FRESH và giá trị khởi

đầu này sẽ khác nhau đối với mỗi bản tin.

Với mỗi số nguyên n, 0 ≤ n ≤ BLOCKS-1, các toán tử sau được thực hiện:

A = KASUMI[ A ⊕ PSn ]IK (2.8)

B = B ⊕ A (2.9)

Sau cùng, một ứng dụng của KASUMI được thực hiện sử dụng một dạng biến đổi của khoá toàn vẹn IK như sau:

B = KASUMI[ B ]IK ⊕ KM (2.10) (adsbygoogle = window.adsbygoogle || []).push({});

Đầu ra từ KASUMI có 64 bit, thì 32 bit MAC-I là 32 bit bên trái nhất của kết quả: MAC-I = lefthalf[ B ] (2.11) Tức là, với mỗi số nguyên i, 0 ≤ i ≤ 31, thì: MAC-I[i] = B[i] (2.12) Các bit B[32]…B[63] bị loại bỏ.

2.4 THUẬT TOÁN KASUMI [07] 2.4.1 Giới thiệu chung 2.4.1 Giới thiệu chung

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) (adsbygoogle = window.adsbygoogle || []).push({});

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á (adsbygoogle = window.adsbygoogle || []).push({});

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

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