KASUMI
View on Wikipedia| General | |
|---|---|
| Designers | Mitsubishi Electric |
| Derived from | MISTY1 |
| Cipher detail | |
| Key sizes | 128 bits |
| Block sizes | 64 bits |
| Structure | Feistel network |
| Rounds | 8 |
KASUMI is a block cipher used in UMTS, GSM, and GPRS mobile communications systems. In UMTS, KASUMI is used in the confidentiality (f8) and integrity algorithms (f9) with names UEA1 and UIA1, respectively.[1] In GSM, KASUMI is used in the A5/3 key stream generator and in GPRS in the GEA3 key stream generator.
KASUMI was designed for 3GPP to be used in UMTS security system by the Security Algorithms Group of Experts (SAGE), a part of the European standards body ETSI.[2] Because of schedule pressures in 3GPP standardization, instead of developing a new cipher, SAGE agreed with 3GPP technical specification group (TSG) for system aspects of 3G security (SA3) to base the development on an existing algorithm that had already undergone some evaluation.[2] They chose the cipher algorithm MISTY1 developed[3] and patented[4] by Mitsubishi Electric Corporation. The original algorithm was slightly modified for easier hardware implementation and to meet other requirements set for 3G mobile communications security.
KASUMI is named after the original algorithm MISTY1 — 霞み (hiragana かすみ, romaji kasumi) is the Japanese word for "mist".
In January 2010, Orr Dunkelman, Nathan Keller and Adi Shamir released a paper showing that they could break Kasumi with a related-key attack and very modest computational resources; this attack is ineffective against MISTY1.[5]
Description
[edit]KASUMI algorithm is specified in a 3GPP technical specification.[6] KASUMI is a block cipher with 128-bit key and 64-bit input and output. The core of KASUMI is an eight-round Feistel network. The round functions in the main Feistel network are irreversible Feistel-like network transformations. In each round the round function uses a round key which consists of eight 16-bit sub keys derived from the original 128-bit key using a fixed key schedule.
Key schedule
[edit]The 128-bit key K is divided into eight 16-bit sub keys Ki:
Additionally a modified key K', similarly divided into 16-bit sub keys K'i, is used. The modified key is derived from the original key by XORing with 0x123456789ABCDEFFEDCBA9876543210 (chosen as a "nothing up my sleeve" number).
Round keys are either derived from the sub keys by bitwise rotation to left by a given amount and from the modified sub keys (unchanged).
The round keys are as follows:
Sub key index additions are cyclic so that if i+j is greater than 8 one has to subtract 8 from the result to get the actual sub key index.
The algorithm
[edit]KASUMI algorithm processes the 64-bit word in two 32-bit halves, left () and right (). The input word is concatenation of the left and right halves of the first round:
.
In each round the right half is XOR'ed with the output of the round function after which the halves are swapped:
where KLi, KOi, KIi are round keys for the ith round.
The round functions for even and odd rounds are slightly different. In each case the round function is a composition of two functions FLi and FOi. For an odd round
and for an even round
.
The output is the concatenation of the outputs of the last round.
.
Both FL and FO functions divide the 32-bit input data to two 16-bit halves. The FL function is an irreversible bit manipulation while the FO function is an irreversible three round Feistel-like network.
Function FL
[edit]The 32-bit input x of is divided to two 16-bit halves . First the left half of the input is ANDed bitwise with round key and rotated left by one bit. The result of that is XOR'ed to the right half of the input to get the right half of the output .
Then the right half of the output is ORed bitwise with the round key and rotated left by one bit. The result of that is XOR'ed to the left half of the input to get the left half of the output .
Output of the function is concatenation of the left and right halves .
Function FO
[edit]The 32-bit input x of is divided into two 16-bit halves , and passed through three rounds of a Feistel network.
In each of the three rounds (indexed by j that takes values 1, 2, and 3) the left half is modified to get the new right half and the right half is made the left half of the next round.
The output of the function is .
Function FI
[edit]The function FI is an irregular Feistel-like network.
The 16-bit input of the function is divided to two halves of which is 9 bits wide and is 7 bits wide.
Bits in the left half are first shuffled by 9-bit substitution box (S-box) S9 and the result is XOR'ed with the zero-extended right half to get the new 9-bit right half .
Bits of the right half are shuffled by 7-bit S-box S7 and the result is XOR'ed with the seven least significant bits (LS7) of the new right half to get the new 7-bit left half .
The intermediate word is XORed with the round key KI to get of which is 7 bits wide and is 9 bits wide.
Bits in the right half are then shuffled by 9-bit S-box S9 and the result is XOR'ed with the zero-extended left half to get the new 9-bit right half of the output .
Finally the bits of the left half are shuffled by 7-bit S-box S7 and the result is XOR'ed with the seven least significant bits (LS7) of the right half of the output to get the 7-bit left half of the output.
The output is the concatenation of the final left and right halves .
Substitution boxes
[edit]The substitution boxes (S-boxes) S7 and S9 are defined by both bit-wise AND-XOR expressions and look-up tables in the specification. The bit-wise expressions are intended to hardware implementation but nowadays it is customary to use the look-up tables even in the HW design.
S7 is defined by the following array:
int S7[128] = {
54, 50, 62, 56, 22, 34, 94, 96, 38, 6, 63, 93, 2, 18,123, 33,
55,113, 39,114, 21, 67, 65, 12, 47, 73, 46, 27, 25,111,124, 81,
53, 9,121, 79, 52, 60, 58, 48,101,127, 40,120,104, 70, 71, 43,
20,122, 72, 61, 23,109, 13,100, 77, 1, 16, 7, 82, 10,105, 98,
117,116, 76, 11, 89,106, 0,125,118, 99, 86, 69, 30, 57,126, 87,
112, 51, 17, 5, 95, 14, 90, 84, 91, 8, 35,103, 32, 97, 28, 66,
102, 31, 26, 45, 75, 4, 85, 92, 37, 74, 80, 49, 68, 29,115, 44,
64,107,108, 24,110, 83, 36, 78, 42, 19, 15, 41, 88,119, 59, 3
};
S9 is defined by the following array:
int S9[512] = {
167,239,161,379,391,334, 9,338, 38,226, 48,358,452,385, 90,397,
183,253,147,331,415,340, 51,362,306,500,262, 82,216,159,356,177,
175,241,489, 37,206, 17, 0,333, 44,254,378, 58,143,220, 81,400,
95, 3,315,245, 54,235,218,405,472,264,172,494,371,290,399, 76,
165,197,395,121,257,480,423,212,240, 28,462,176,406,507,288,223,
501,407,249,265, 89,186,221,428,164, 74,440,196,458,421,350,163,
232,158,134,354, 13,250,491,142,191, 69,193,425,152,227,366,135,
344,300,276,242,437,320,113,278, 11,243, 87,317, 36, 93,496, 27,
487,446,482, 41, 68,156,457,131,326,403,339, 20, 39,115,442,124,
475,384,508, 53,112,170,479,151,126,169, 73,268,279,321,168,364,
363,292, 46,499,393,327,324, 24,456,267,157,460,488,426,309,229,
439,506,208,271,349,401,434,236, 16,209,359, 52, 56,120,199,277,
465,416,252,287,246, 6, 83,305,420,345,153,502, 65, 61,244,282,
173,222,418, 67,386,368,261,101,476,291,195,430, 49, 79,166,330,
280,383,373,128,382,408,155,495,367,388,274,107,459,417, 62,454,
132,225,203,316,234, 14,301, 91,503,286,424,211,347,307,140,374,
35,103,125,427, 19,214,453,146,498,314,444,230,256,329,198,285,
50,116, 78,410, 10,205,510,171,231, 45,139,467, 29, 86,505, 32,
72, 26,342,150,313,490,431,238,411,325,149,473, 40,119,174,355,
185,233,389, 71,448,273,372, 55,110,178,322, 12,469,392,369,190,
1,109,375,137,181, 88, 75,308,260,484, 98,272,370,275,412,111,
336,318, 4,504,492,259,304, 77,337,435, 21,357,303,332,483, 18,
47, 85, 25,497,474,289,100,269,296,478,270,106, 31,104,433, 84,
414,486,394, 96, 99,154,511,148,413,361,409,255,162,215,302,201,
266,351,343,144,441,365,108,298,251, 34,182,509,138,210,335,133,
311,352,328,141,396,346,123,319,450,281,429,228,443,481, 92,404,
485,422,248,297, 23,213,130,466, 22,217,283, 70,294,360,419,127,
312,377, 7,468,194, 2,117,295,463,258,224,447,247,187, 80,398,
284,353,105,390,299,471,470,184, 57,200,348, 63,204,188, 33,451,
97, 30,310,219, 94,160,129,493, 64,179,263,102,189,207,114,402,
438,477,387,122,192, 42,381, 5,145,118,180,449,293,323,136,380,
43, 66, 60,455,341,445,202,432, 8,237, 15,376,436,464, 59,461
};
Cryptanalysis
[edit]In 2001, an impossible differential attack on six rounds of KASUMI was presented by Kühn (2001).[7]
In 2003 Elad Barkan, Eli Biham and Nathan Keller demonstrated man-in-the-middle attacks against the GSM protocol which avoided the A5/3 cipher and thus breaking the protocol. This approach does not attack the A5/3 cipher, however.[8] The full version of their paper was published later in 2006.[9]
In 2005, Israeli researchers Eli Biham, Orr Dunkelman and Nathan Keller published a related-key rectangle (boomerang) attack on KASUMI that can break all 8 rounds faster than exhaustive search.[10] The attack requires 254.6 chosen plaintexts, each of which has been encrypted under one of four related keys, and has a time complexity equivalent to 276.1 KASUMI encryptions. While this is obviously not a practical attack, it invalidates some proofs about the security of the 3GPP protocols that had relied on the presumed strength of KASUMI.
In 2010, Dunkelman, Keller and Shamir published a new attack that allows an adversary to recover a full A5/3 key by related-key attack.[5] The time and space complexities of the attack are low enough that the authors carried out the attack in two hours on an Intel Core 2 Duo desktop computer even using the unoptimized reference KASUMI implementation. The authors note that this attack may not be applicable to the way A5/3 is used in 3G systems; their main purpose was to discredit 3GPP's assurances that their changes to MISTY wouldn't significantly impact the security of the algorithm.
See also
[edit]References
[edit]- ^ "Draft Report of SA3 #38" (PDF). 3GPP. 2005.
- ^ a b "General Report on the Design, Speification and Evaluation of 3GPP Standard Confidentiality and Integrity Algorithms" (PDF). 3GPP. 2009.
- ^ Matsui, Mitsuru; Tokita, Toshio (Dec 2000). "MISTY, KASUMI and Camellia Cipher Algorithm Development" (PDF). Mitsubishi Electric Advance. 100. Mitsubishi Electric corp.: 2–8. ISSN 1345-3041. Archived from the original (PDF) on 2008-07-24. Retrieved 2010-01-06.
- ^ US 7096369, Matsui, Mitsuru & Tokita, Toshio, "Data Transformation Apparatus and Data Transformation Method", published Sep. 19, 2002, issued Aug. 22, 2006
- ^ a b Orr Dunkelman; Nathan Keller; Adi Shamir (2010-01-10). "A Practical-Time Attack on the A5/3 Cryptosystem Used in Third Generation GSM Telephony".
{{cite journal}}: Cite journal requires|journal=(help) - ^ "3GPP TS 35.202: Specification of the 3GPP confidentiality and integrity algorithms; Document 2: Kasumi specification". 3GPP. 2009.
- ^ Kühn, Ulrich. Cryptanalysis of Reduced Round MISTY. EUROCRYPT 2001. CiteSeerX 10.1.1.59.7609.
- ^ Elad Barkan, Eli Biham, Nathan Keller. Instant Ciphertext-Only Cryptanalysis of GSM Encrypted Communication (PDF). CRYPTO 2003. pp. 600–616. Archived from the original (PDF) on 2020-01-25. Retrieved 2019-09-15.
{{cite conference}}: CS1 maint: multiple names: authors list (link) - ^ Elad Barkan, Eli Biham, Nathan Keller. "Instant Ciphertext-Only Cryptanalysis of GSM Encrypted Communication by Barkan and Biham of Technion (Full Version)" (PDF). Archived from the original (PDF) on 2020-01-25. Retrieved 2019-09-15.
{{cite web}}: CS1 maint: multiple names: authors list (link) - ^ Eli Biham, Orr Dunkelman, Nathan Keller. A Related-Key Rectangle Attack on the Full KASUMI. ASIACRYPT 2005. pp. 443–461. Archived from the original (ps) on 2013-10-11.
{{cite conference}}: CS1 maint: multiple names: authors list (link)
External links
[edit]KASUMI
View on GrokipediaOverview and History
Design Origins and Development
KASUMI, a block cipher integral to 3GPP mobile security, originated as a modification of the MISTY1 cipher developed by Mitsuru Matsui at Mitsubishi Electric in 1997. MISTY1 was designed with provable security against differential and linear cryptanalysis, emphasizing hardware efficiency for embedded applications. In the late 1990s, the European Telecommunications Standards Institute (ETSI) Security Algorithms Group of Experts (SAGE) adapted MISTY1 to create KASUMI, tailoring it to the specific needs of the 3rd Generation Partnership Project (3GPP) for Universal Mobile Telecommunications System (UMTS) security. This derivation preserved MISTY1's core structure while incorporating adjustments for compatibility with international standards.[4][5][6] The primary design goals for KASUMI centered on delivering 64-bit security for both confidentiality (via algorithm f8) and integrity (via algorithm f9) in UMTS/3G networks, ensuring resistance to cryptanalytic attacks while optimizing for resource-constrained mobile devices. It was engineered to withstand workloads exceeding exhaustive key search, with an expected lifespan of over 20 years against emerging threats. Efficiency was paramount, targeting hardware implementations under 10,000 gates and encryption rates of approximately 2 Mbit/s at clock speeds above 20 MHz, making it suitable for low-power environments without compromising security margins. These objectives balanced provable security principles from MISTY1 with practical deployment constraints in global mobile infrastructure.[7][6] Development commenced in mid-August 1999 under the ETSI SAGE 3GPP Task Force, which evaluated several candidates including the original MISTY1 before selecting and refining KASUMI. The design and full specification documents were completed by mid-November 1999, followed by independent evaluations to verify security and performance. KASUMI was formally adopted by 3GPP in late 1999, with its initial specification outlined in 3GPP Technical Specification (TS) 35.202 (version 3.1.2, Release 1999, published August 2001). The standard has evolved through multiple revisions to address minor clarifications and compatibility updates, reaching version 19.0.0 in October 2025.[8][7][9][10] KASUMI's roots in MISTY1 also connect it to Japanese cryptographic standards, where MISTY1 was recommended by the CRYPTREC project for its robust design paradigm focused on higher-order differential security. Matsui's foundational work on MISTY1 influenced KASUMI's iterative Feistel-like structure, ensuring it met both European 3GPP requirements and the broader legacy of secure, efficient ciphers in constrained systems.[11][12][7]Specifications and Parameters
KASUMI is a block cipher that processes 64-bit input blocks to produce 64-bit output blocks under the control of a 128-bit key.[13] It employs an 8-round Feistel-like structure, making it suitable for symmetric encryption in resource-constrained devices.[13] The cipher forms the core of two standardized modes of operation within 3GPP security protocols: the f8 algorithm for confidentiality and the f9 algorithm for integrity.[14] The f8 mode functions as an output feedback (OFB)-like stream cipher, generating a 64-bit keystream by iteratively applying KASUMI to counter blocks derived from a frame sequence number, bearer identity, direction, and length; this keystream is then XORed with plaintext data blocks of variable length (up to 20,000 bits), with partial blocks truncated as needed.[14] In contrast, the f9 mode operates as a truncated CBC-MAC, processing padded input messages in 64-bit blocks through multiple KASUMI invocations with a modified key for the final round, yielding a 64-bit intermediate result from which the leftmost 32 bits serve as the message authentication code (MAC).[14] KASUMI is optimized for low-resource environments, such as those in mobile handsets and smart cards, through its simple key schedule and use of combinational logic for S-boxes, enabling efficient hardware implementations with minimal gate count and power consumption.[13] This design supports backward compatibility with the GSM A5/3 confidentiality algorithm, which employs a truncated 64-bit key version of KASUMI in OFB mode for voice and signaling encryption.[13] It also extends forward to GPRS and EDGE packet data services via the GEA3 algorithm, utilizing the full 128-bit key in the f8 mode for data confidentiality.[13]Key Schedule
Key Expansion Process
The key expansion in KASUMI derives a set of round subkeys from the 128-bit master key to support the cipher's eight rounds. The master key K is first unpacked into eight 16-bit words denoted K_1, K_2, ..., K_8. Each word K_j is then modified by XORing it with a fixed 16-bit constant C_j to produce K_j' for j = 1 to 8, where the constants are defined as C_1 = 0x0123, C_2 = 0x4567, C_3 = 0x89AB, C_4 = 0xCDEF, C_5 = 0xFEDC, C_6 = 0xBA98, C_7 = 0x7654, and C_8 = 0x3210. This initial XOR step introduces nonlinearity and helps diversify the subkey material.[1] For each round i = 1 to 8, the subkeys are generated using circular left rotations (denoted <<<) on the 16-bit words and modular indexing (with indices taken modulo 8, adjusted to 1-8 range). The 32-bit subkey KL_i for the FL/FL^{-1} functions is formed by concatenating two 16-bit parts: KL_{i,1} = K_i <<< 1 and KL_{i,2} = K'{i+2 \mod 8} (with indices cycling from 1 to 8). The 48-bit subkey KO_i for the FO function is composed of three 16-bit parts: KO{i,1} = K_{i+1 \mod 8} <<< 5, KO_{i,2} = K_{i+5 \mod 8} <<< 8, and KO_{i,3} = K_{i+6 \mod 8} <<< 13. Similarly, the 48-bit subkey KI_i for the FI functions within FO is formed as KI_{i,1} = K'{i+4 \mod 8}, KI{i,2} = K'{i+3 \mod 8}, and KI{i,3} = K'_{i+7 \mod 8}. All rotations are performed on 16-bit values.[1] The resulting subkeys—eight 32-bit KL_i, eight 48-bit KO_i, and eight 48-bit KI_i—are stored for use in the cipher rounds. This design ensures efficient key-dependent diffusion without requiring additional computations during encryption or decryption, while the fixed constants and rotations prevent simple related-key vulnerabilities. No explicit weak key checks are performed, as the structure inherently avoids known weak key classes through the derivation process.[1]Subkey Generation
In KASUMI, the subkey generation process assembles round-specific subkeys from the components derived in the key expansion phase, ensuring each of the eight rounds receives unique key material tailored to the FL and FO/FI functions. The 128-bit master key is first expanded into eight 16-bit values $ K_1, K_2, \dots, K_8 $ and their modified counterparts $ K_j' = K_j \oplus C_j $ (where $ C_j $ are fixed 16-bit constants), providing the basis for all subkeys. These components are then rotated and combined to form the per-round subkeys, with circular left shifts applied to promote diffusion and avoid predictable linear relationships between subkeys across rounds.[13] The subkey $ KL_i $ is a 32-bit value used in the FL function for each round i, assembled as the concatenation $ KL_i = KL_{i,1} || KL_{i,2} $, where each part is 16 bits. Specifically, $ KL_{i,1} $ is obtained by rotating the appropriate $ K_j $ left by 1 bit, and $ KL_{i,2} $ uses the unmodified $ K_{j+2}' $ (indices modulo 8). Within the FL function, $ KL_i $ is split into these 16-bit parts for bitwise AND operations, with additional 16-bit rotations applied to the data inputs for further mixing. The subkeys $ KO_i $ and $ KI_i $ consist of two 48-bit values, each split into three 16-bit segments ($ KO_{i,1}, KO_{i,2}, KO_{i,3} $ and similarly for $ KI_i $) for use in the FO function's three internal FI layers. The $ KO_i $ components incorporate left rotations by 5, 8, and 13 bits on selected $ K_j $, while $ KI_i $ draws directly from the $ K_j' $ values without additional shifts. These rotations and selections prevent fixed linear approximations in the subkeys, contributing to the cipher's resistance against related-key attacks.[13] The following table summarizes the assembly of subkeys for each round $ i $, based on the standardized mappings (indices cycle modulo 8, and <<< denotes left circular shift):| Subkey Component | Round 1 | Round 2 | Round 3 | Round 4 | Round 5 | Round 6 | Round 7 | Round 8 |
|---|---|---|---|---|---|---|---|---|
| $ KL_{i,1} $ | $ K_1 \lll 1 $ | $ K_2 \lll 1 $ | $ K_3 \lll 1 $ | $ K_4 \lll 1 $ | $ K_5 \lll 1 $ | $ K_6 \lll 1 $ | $ K_7 \lll 1 $ | $ K_8 \lll 1 $ |
| $ KL_{i,2} $ | $ K_3' $ | $ K_4' $ | $ K_5' $ | $ K_6' $ | $ K_7' $ | $ K_8' $ | $ K_1' $ | $ K_2' $ |
| $ KO_{i,1} $ | $ K_2 \lll 5 $ | $ K_3 \lll 5 $ | $ K_4 \lll 5 $ | $ K_5 \lll 5 $ | $ K_6 \lll 5 $ | $ K_7 \lll 5 $ | $ K_8 \lll 5 $ | $ K_1 \lll 5 $ |
| $ KO_{i,2} $ | $ K_6 \lll 8 $ | $ K_7 \lll 8 $ | $ K_8 \lll 8 $ | $ K_1 \lll 8 $ | $ K_2 \lll 8 $ | $ K_3 \lll 8 $ | $ K_4 \lll 8 $ | $ K_5 \lll 8 $ |
| $ KO_{i,3} $ | $ K_7 \lll 13 $ | $ K_8 \lll 13 $ | $ K_1 \lll 13 $ | $ K_2 \lll 13 $ | $ K_3 \lll 13 $ | $ K_4 \lll 13 $ | $ K_5 \lll 13 $ | $ K_6 \lll 13 $ |
| $ KI_{i,1} $ | $ K_5' $ | $ K_6' $ | $ K_7' $ | $ K_8' $ | $ K_1' $ | $ K_2' $ | $ K_3' $ | $ K_4' $ |
| $ KI_{i,2} $ | $ K_4' $ | $ K_5' $ | $ K_6' $ | $ K_7' $ | $ K_8' $ | $ K_1' $ | $ K_2' $ | $ K_3' $ |
| $ KI_{i,3} $ | $ K_8' $ | $ K_1' $ | $ K_2' $ | $ K_3' $ | $ K_4' $ | $ K_5' $ | $ K_6' $ | $ K_7' $ |
Algorithm Structure
Feistel Network Overview
KASUMI operates as an 8-round generalized Feistel cipher on 64-bit blocks. The input block is divided into two 32-bit halves, denoted as (left) and (right). The core data flow follows a balanced Feistel structure across the eight rounds. For each round (where ), the halves are updated as follows: , , where denotes the round function parameterized by round-specific subkeys . This iterative swapping and XOR operation ensures that each bit influences both halves progressively, promoting avalanche effects. The round function alternates between two forms to introduce structural irregularity: for odd-numbered rounds (1, 3, 5, 7), it employs ; for even-numbered rounds (2, 4, 6, 8), it uses .[1][15] After the eighth round, the output is the 64-bit block . The overall transformation can be sketched as:Round Function Details
KASUMI employs a Feistel network with eight rounds, where each round processes a 64-bit block divided into two 32-bit halves, denoted as the left half and the right half entering round . The update rule follows the standard Feistel construction: the new right half is set to the previous left half, , while the new left half is the previous right half XORed with the output of the round function applied to the previous left half, .[1] The round function alternates between compositions involving the nonlinear FO function and the linear FL function, using round-specific subkeys derived from the 128-bit master key: 32-bit for FL, and 48-bit each and for FO. In odd-numbered rounds (), FL is applied first to the 32-bit input using , and the result is fed into FO using and , yielding . Conversely, in even-numbered rounds (), FO is applied first to using and , followed by FL using , giving . This alternation ensures a balanced integration of linear mixing and nonlinear diffusion across rounds.[1] After eight iterations, the final output is the 64-bit block . The subkeys , , and (for to ) are generated via the key schedule, with the full process operating on the unmodified 64-bit plaintext input split into initial .[1]Core Components
FL Layering Function
The FL layering function serves as a key-dependent linear diffusion layer in the KASUMI block cipher, contributing to the mixing of bits within the Feistel network rounds. It processes a 32-bit input block alongside a 32-bit subkey derived from the overall 128-bit key schedule, utilizing only bitwise logical operations and rotations to ensure efficient implementation.[1] The input to the FL function is a 32-bit value $ I $, treated as two 16-bit halves $ L $ (left, high-order bits) and $ R $ (right, low-order bits), so $ I = L \parallel R $, and a 32-bit subkey $ \mathrm{KL}i = \mathrm{KL}{i,1} \parallel \mathrm{KL}{i,2} $, where each $ \mathrm{KL}{i,j} $ is 16 bits. The computation is as follows: first, compute $ R' = R \oplus \mathrm{ROL}(L \land \mathrm{KL}{i,1}, 1) $, where $ \land $ denotes bitwise AND, $ \oplus $ bitwise XOR, and ROL is left rotation by 1 bit. Then, $ L' = L \oplus \mathrm{ROL}(R' \lor \mathrm{KL}{i,2}, 1) $, where $ \lor $ denotes bitwise OR. The output is $ L' \parallel R' $.[1] This structure imparts an involutory property to the FL function, meaning it is its own inverse under the same subkey: applying FL twice returns the original input. The reliance on bit-level operations—primarily AND, OR, XOR, and single-bit rotations—optimizes the function for hardware efficiency, requiring minimal logic gates and no table lookups or arithmetic beyond bits. In KASUMI's round structure, FL alternates with the FO function to propagate changes across the 64-bit block.[1][16]FO Multiplicative Function
The FO function serves as the core nonlinear component of the KASUMI block cipher, operating on 32-bit inputs to provide substitution through S-boxes and diffusion via key-dependent mixing, ensuring that changes in input bits propagate widely across the output. It is designed to enhance security by integrating the key material directly into the transformation process, drawing from the MISTY architecture while optimizing for 3GPP mobile standards.[1] The input to the FO function is a 32-bit value denoted as $ I $, partitioned into two 16-bit halves $ I = L_0 \parallel R_0 $. The function employs subkeys from the key schedule: 48-bit $ \mathrm{KO}i = \mathrm{KO}{i,1} \parallel \mathrm{KO}{i,2} \parallel \mathrm{KO}{i,3} $ and 48-bit $ \mathrm{KI}i = \mathrm{KI}{i,1} \parallel \mathrm{KI}{i,2} \parallel \mathrm{KI}{i,3} $, where each $ \mathrm{KO}{i,j} $ and $ \mathrm{KI}{i,j} $ is 16 bits. This key-dependent design ensures that the transformation varies with the round subkeys, contributing to resistance against differential and linear cryptanalysis.[1] The structure of FO is a three-round unbalanced Feistel network using the FI function recursively. For $ j = 1 $ to $ 3 $: compute $ R_j = \mathrm{FI}(L_{j-1} \oplus \mathrm{KO}{i,j}, \mathrm{KI}{i,j}) \oplus R_{j-1} $, and set $ L_j = R_{j-1} $. The output is the 32-bit value $ L_3 \parallel R_3 $. This recursive approach leverages the involutory property of FI for efficient computation while promoting avalanche effects across all 32 bits. Each FI call is key-dependent, receiving 16-bit subkeys $ \mathrm{KO}{i,j} $ and $ \mathrm{KI}{i,j} $ to modulate the nonlinear substitution and mixing within FI, thereby embedding the round key deeply into the computation. This construction provides robust nonlinear diffusion over the 32 bits, critical for KASUMI's overall security margin against known attacks.[1]FI Involutory Function
The FI function serves as the fundamental nonlinear component within the KASUMI block cipher, implementing substitution through S-boxes and key mixing via XOR operations, while incorporating diffusion through bit manipulations. It processes a 16-bit input divided into an upper 9-bit portion (L₀) and a lower 7-bit portion (R₀), along with a 16-bit subkey split into a 9-bit portion (KI_{i,j,2}) and a 7-bit portion (KI_{i,j,1}). This design forms a compact, unbalanced four-round Feistel network that contributes to KASUMI's overall resistance to cryptanalytic attacks by ensuring rapid mixing of data and key material.[1] The computation proceeds in four iterative steps, leveraging two specialized S-boxes: S₉ for 9-bit inputs and S₇ for 7-bit inputs. Auxiliary operations include zero-extension (ZE), which appends two zero bits to a 7-bit value to produce a 9-bit result, and truncation (TR), which discards the two most significant bits of a 9-bit value to yield a 7-bit result. The rounds are defined as:- Round 1: L₁ = R₀; R₁ = S₉(L₀) ⊕ ZE(R₀).
- Round 2: L₂ = R₁ ⊕ KI_{i,j,2}; R₂ = S₇(L₁) ⊕ TR(R₁) ⊕ KI_{i,j,1}.
- Round 3: L₃ = R₂; R₃ = S₉(L₂) ⊕ ZE(R₂).
- Round 4: L₄ = S₇(L₃) ⊕ TR(R₃); R₄ = R₃.
S-Box Definitions
KASUMI utilizes two substitution boxes, S7 and S9, within the FI function to introduce nonlinearity and confusion. These S-boxes are adaptations of the corresponding components from the MISTY1 block cipher, with adjustments made to bolster resistance against emerging cryptanalytic techniques during the 3GPP standardization process. S7 operates on 7-bit inputs to produce 7-bit outputs, while S9 handles 9-bit inputs and outputs. Although specified via lookup tables in the official documentation, their underlying construction leverages power functions defined over finite fields for efficient implementation and strong cryptographic characteristics.[18][12] The S7 S-box is realized through a 128-entry lookup table, where each entry maps an input value (0 to 127 in decimal) to an output. Representative values include:| Input (decimal) | Output (decimal) |
|---|---|
| 0 | 54 |
| 1 | 50 |
| 2 | 62 |
| 3 | 56 |
| 4 | 22 |
| 5 | 34 |
| 6 | 94 |
| 7 | 96 |
| Input (decimal) | Output (decimal) |
|---|---|
| 0 | 167 |
| 1 | 239 |
| 2 | 161 |
| 3 | 379 |
| 4 | 391 |
| 5 | 334 |
| 6 | 340 |
| 7 | 238 |