КАСУМИ

редактировать
КАСУМИ
Общие
ДизайнерыMitsubishi Electric
На основеMISTY1
Деталь шифра
Размеры ключей 128 бит
Размеры блоков 64 бита
СтруктураСеть Фейстеля
Раунды8

KASUMI - это блочный шифр используется в системах мобильной связи UMTS, GSM и GPRS . В UMTS KASUMI используется в алгоритмах конфиденциальности (f8) и целостности (f9) с именами UEA1 и UIA1 соответственно. В GSM KASUMI используется в генераторе потока ключей A5 / 3 и в GPRS в генераторе потока ключей GEA3 .

KASUMI был разработан для 3GPP для использования в системе безопасности UMTS (SAGE), частью Европейского органа по стандартизации ETSI. Из-за ограничений графика в стандартизации 3GPP, вместо разработки нового шифра, SAGE согласовала с группой технических спецификаций 3GPP (TSG) системные аспекты безопасности 3G (SA3), чтобы основать разработку на существующем алгоритме, который уже прошел некоторую оценку. Они выбрали алгоритм шифрования MISTY1, разработанный и запатентованный Mitsubishi Electric Corporation. Исходный алгоритм был немного изменен для упрощения аппаратной реализации и соответствия другим требованиям безопасности мобильной связи 3G.

КАСУМИ назван в честь исходного алгоритма MISTY1霞み (хирагана か す み, ромадзи касуми ) - это японское слово для «туман».

В январе 2010 года Орр Дункельман, Натан Келлер и Ади Шамир выпустили документ, в котором показано, что они могут взломать Касуми с помощью атаки с использованием связанных ключей и очень скромных вычислительных ресурсов. ; эта атака неэффективна против MISTY1.

Содержание
  • 1 Описание
    • 1.1 Ключевое расписание
    • 1.2 Алгоритм
      • 1.2.1 Функция FL
      • 1.2.2 Функция FO
      • 1.2.3 Функция FI
      • 1.2.4 Блоки подстановки
  • 2 Криптоанализ
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Описание

Алгоритм KASUMI определен в Техническая спецификация 3GPP. KASUMI - это блочный шифр со 128-битным ключом и 64-битным вводом и выводом. Ядром KASUMI является восьмиэтапная сеть Фейстеля. Функции раунда в основной сети Фейстеля представляют собой необратимые преобразования сети Фейстеля. В каждом раунде функция раунда использует ключ раунда, который состоит из восьми 16-битных подключей, полученных из исходного 128-битного ключа с использованием фиксированного расписания ключей.

Таблица ключей

128-битный ключ K разделен на восемь 16-битных подключей K i:

K = K 1 ‖ K 2 ‖ K 3 ‖ K 4 ‖ K 5 ‖ К 6 ‖ К 7 ‖ К 8 {\ Displaystyle K = K_ {1} \ | K_ {2} \ | K_ {3} \ | K_ {4} \ | K_ {5} \ | K_ {6} \ | K_ {7} \ | K_ {8} \,}K = K_1 \ | К_2 \ | К_3 \ | К_4 \ | К_5 \ | К_6 \ | К_7 \ | K_8 \,

Дополнительно используется модифицированный ключ K ', аналогично разделенный на 16-битные подключа K' i. Модифицированный ключ получается из исходного ключа путем XOR с 0x123456789ABCDEFFEDCBA9876543210 (выбран в качестве «ничего в рукаве» номер ).

Круглые ключи получаются либо из подключаемых ключей побитовым вращением влево на заданное количество, либо из модифицированных подключаемых ключей (без изменений).

Круглые ключи имеют следующий вид:

KL i, 1 = ROL (K i, 1) KL i, 2 = K i + 2 ′ KO i, 1 = ROL (K i + 1, 5) KO i, 2 = ROL (K i + 5, 8) KO i, 3 ​​= ROL (K i + 6, 13) KI i, 1 = K i + 4 ′ KI i, 2 = K i + 3 ′ KI я, 3 знак равно К я + 7 ′ {\ Displaystyle {\ begin {array} {lcl} KL_ {я, 1} = {\ rm {ROL}} (K_ {i}, 1) \\ KL_ { i, 2} = K '_ {i + 2} \\ KO_ {i, 1} = {\ rm {ROL}} (K_ {i + 1}, 5) \\ KO_ {i, 2} = {\ rm {ROL}} (K_ {i + 5}, 8) \\ KO_ {i, 3} = {\ rm {ROL}} (K_ {i + 6}, 13) \\ KI_ {i, 1} = K '_ {i + 4} \\ KI_ {i, 2} = K' _ {i + 3} \\ KI_ {i, 3} = K '_ {i + 7} \ end {array}}} \begin{array}{lcl} KL_{i,1} = {\rm ROL}(K_i,1) \\ KL_{i,2} = K'_{i+2} \\ KO_{i,1} = {\rm ROL}(K_{i+1},5) \\ KO_{i,2} = {\rm ROL}(K_{i+5},8) \\ KO_{i,3} = {\rm ROL}(K_{i+6},13) \\ KI_{i,1} = K'_{i+4} \\ KI_{i,2} = K'_{i+3} \\ KI_{i,3} = K'_{i+7} \end{array}

Добавление индекса подключа является циклическим, так что если i + j больше 8, нужно вычесть 8 из результата, чтобы получить фактический индекс подключа.

Алгоритм

алгоритм КАСУМИ обрабатывает 64-битное слово в двух 32-битных половинах, слева (L i {\ displaystyle L_ {i}}L_i) и вправо (R i {\ displaystyle R_ {i}}R_ {i} ). Входное слово представляет собой объединение левой и правой половин первого раунда:

input = R 0 ‖ L 0 {\ displaystyle {\ rm {input}} = R_ {0} \ | L_ {0} \,}{\ rm input} = R_0 \ | L_0 \, .

В каждом раунде правая половина подвергается операции XOR с выходом раундовой функции, после чего половины меняются местами:

L i = F i (KL i, KO i, KI i, L i - 1) ⊕ р я - 1 р я знак равно L я - 1 {\ displaystyle {\ begin {array} {rcl} L_ {i} = F_ {i} (KL_ {i}, KO_ {i}, KI_ {i}, L_ {i-1}) \ oplus R_ {i-1} \\ R_ {i} = L_ {i-1} \ end {array}}}\ begin {array} {rcl} L_i = F_i (KL_i, KO_i, KI_i, L_ {i -1}) \ oplus R_ {i-1} \\ R_i = L_ {i-1} \ end {array}

где KL i, KO i, KI i - ключи раунда для раунда i.

Функции округления для четного и нечетного округления немного отличаются. В каждом случае функция раунда представляет собой композицию двух функций FL i и FO i. Для нечетного раунда

F i (K i, L i - 1) = FO (KO i, KI i, FL (KL i, L i - 1)) {\ displaystyle F_ {i} (K_ {i}, L_ {i-1}) = FO (KO_ {i}, KI_ {i}, FL (KL_ {i}, L_ {i-1})) \,}F_i (K_i, L_ {i-1}) = FO (KO_i, KI_i, FL (KL_i, L_ {i-1})) \,

и для четного раунда

F я (К я, L я - 1) = FL (KL я, FO (КО я, KI я, L я - 1)) {\ Displaystyle F_ {я} (K_ {я}, L_ {я-1}) = FL (KL_ {i}, FO (KO_ {i}, KI_ {i}, L_ {i-1})) \,}F_i (K_i, L_ {i-1}) = FL (KL_i, FO (KO_i, KI_i, L_ {i-1})) \, .

Результатом является конкатенация результатов последнего раунда.

output = R 8 ‖ L 8 {\ displaystyle {\ rm {output}} = R_ {8} \ | L_ {8} \,}{\ rm output} = R_8 \ | L_8 \, .

Функции FL и FO делят 32-битные входные данные на две 16-битные половинки. Функция FL - это необратимая битовая манипуляция, тогда как функция FO - необратимая трехэтапная сеть типа Фейстеля.

Функция FL

32-битный вход x из FL (KL i, x) {\ displaystyle FL (KL_ {i}, x)}FL (KL_i, x) делится на две 16-битные половины x = l ‖ r {\ displaystyle x = l \ | r}x = l \ | r . Сначала левая половина ввода l {\ displaystyle l}l обрабатывается побитовым AND с круглым ключом KL i, 1 {\ displaystyle KL_ {i, 1}}KL_ {i, 1} и повернут влево на один бит. В результате выполняется операция XOR с правой половиной ввода r {\ displaystyle r}r, чтобы получить правую половину вывода r ′ {\ displaystyle r '}r'.

r ′ знак равно ROL (l ∧ KL я, 1, 1) ⊕ r {\ displaystyle r '= {\ rm {ROL}} (l \ wedge KL_ {i, 1}, 1) \ oplus r}r'= {\rm ROL}(l \wedge KL_{i,1},1) \oplus r

Затем правая половина вывода r ′ {\ displaystyle r '}r'обрабатывается поразрядным OR с ключом раунда KL i, 2 {\ displaystyle KL_ {i, 2}}KL_ {i, 2} и повернут влево на один бит. В результате выполняется операция XOR с левой половиной ввода l {\ displaystyle l}l , чтобы получить левую половину вывода l ′ {\ displaystyle l '}l'.

l ′ = ROL (r ′ ∨ KL i, 2, 1) ⊕ l {\ displaystyle l '= {\ rm {ROL}} (r' \ vee KL_ {i, 2}, 1) \ oplus l}l'= {\rm ROL}(r' \vee KL_{i,2},1) \oplus l

Результатом функции является объединение левой и правой половин x ′ = l ′ ‖ r ′ {\ displaystyle x '= l' \ r '}x'=l'\|r'.

Function FO

32-битный вход x FO (KO i, KI i, x) {\ displaystyle FO (KO_ {i}, KI_ {i}, x)}FO (KO_i, KI_i, x) делится на два 16- бит половинки x = l 0 ‖ r 0 {\ displaystyle x = l_ {0} \ | r_ {0}}x = l_0 \ | r_0 и прошел через три цикла сети Фейстеля.

В каждом из трех раундов (индексированных j, который принимает значения 1, 2 и 3) левая половина модифицируется, чтобы получить новую правую половину, а правая половина становится левой половиной следующего раунда.

rj = FI (KI i, j, lj - 1 ⊕ KO i, j) ⊕ rj - 1 lj = rj - 1 {\ displaystyle {\ begin {array} {lcl} r_ {j} = FI ( KI_ {i, j}, l_ {j-1} \ oplus KO_ {i, j}) \ oplus r_ {j-1} \\ l_ {j} = r_ {j-1} \ end {array}} }\ begin {массив } {lcl} r_j = FI (KI_ {i, j}, l_ {j-1} \ oplus KO_ {i, j}) \ oplus r_ {j-1} \\ l_j = r_ {j- 1} \ end {array}

Результатом функции будет x ′ = l 3 ‖ r 3 {\ displaystyle x '= l_ {3} \ | r_ {3}}x' = l_3\|r_3.

Функция FI

функция FI представляет собой нерегулярную сеть типа Фейстеля.

16-битный ввод x {\ displaystyle x}x функции FI (K i, x) {\ displaystyle FI (Ki, x)}FI (Ki, x) делится на две половины x = l 0 ‖ r 0 {\ displaystyle x = l_ {0} \ | r_ {0}}x = l_0 \ | r_0 из которых l 0 { \ displaystyle l_ {0}}l_0имеет ширину 9 бит, а r 0 {\ displaystyle r_ {0}}r_ {0 } имеет ширину 7 бит.

Биты в левой половине l 0 {\ displaystyle l_ {0}}l_0сначала перетасовываются 9-битным блоком подстановки (S-блок) S9, и результат подвергается операции XOR с расширенной нулевой правой половиной r 0 {\ displaystyle r_ {0}}r_ {0 } , чтобы получить новую 9-битную правую половину r 1 {\ displaystyle r_ {1}}r_ {1} .

r 1 = S 9 (l 0) ⊕ (00 ‖ r 0) {\ displaystyle r_ {1} = S9 (l_ {0}) \ oplus (00 \ | r_ {0})) \,}r_1 = S9 (l_0) \ oplus (00 \ | r_0) \,

Биты правой половины r 0 {\ displaystyle r_ {0}}r_ {0 } перетасовываются 7-битным S-блоком S7, и результат подвергается операции XOR с семь младших значащих битов (LS7) новой правой половины r 1 {\ displaystyle r_ {1}}r_ {1} , чтобы получить новую 7-битную левую половину l 1 {\ displaystyle l_ { 1}}l_ {1} .

l 1 = S 7 (r 0) ⊕ LS 7 (r 1) {\ displaystyle l_ {1} = S7 (r_ {0}) \ oplus LS7 (r_ {1}) \,}l_1 = S7 (r_0) \ oplus LS7 (r_1) \,

Промежуточное слово x 1 = l 1 ‖ r 1 {\ displaystyle x_ {1} = l_ {1} \ | r_ {1}}x_1 = l_1 \ | r_1 подвергается операции XOR с круглым ключом KI, чтобы получить x 2 = l 2 ‖ r 2 {\ displaystyle x_ {2} = l_ {2} \ | r_ {2}}x_2 = l_2 \ | r_2 из которых l 2 {\ displaystyle l_ {2} }l_ {2} имеет ширину 7 бит, а r 2 {\ displaystyle r_ {2}}r_ {2} имеет ширину 9 бит.

x 2 = KI ⊕ x 1 {\ displaystyle x_ {2} = KI \ oplus x_ {1}}x_2 = KI \ oplus x_1

биты в правой половине r 2 {\ displaystyle r_ {2}}Затем r_ {2} перетасовываются 9-битным S-блоком S9, и результат подвергается операции XOR с расширенной нулевой левой половиной l 2 {\ displaystyle l_ {2}}l_ {2} для получения новая 9-битная правая половина вывода r 3 {\ displaystyle r_ {3}}r_3 .

r 3 = S 9 (r 2) ⊕ (00 ‖ l 2) {\ displaystyle r_ {3} = S9 (r_ {2}) \ oplus (00 \ | l_ {2}) \,}r_3 = S9 (r_2) \ oplus (00 \ | l_2) \,

Наконец, биты левой половины l 2 {\ displaystyle l_ {2}}l_ {2} перетасовывается 7-битным S-блоком S7, и результат объединяется с помощью XOR с семью младшими битами (LS7) правой половины вывода r 3 {\ displaystyle r_ {3}}r_3 , чтобы получить 7-битную левую половину l 3 {\ displaystyle l_ {3}}l_3 вывода.

l 3 = S 7 (l 2) ⊕ LS 7 (r 3) {\ displaystyle l_ {3} = S7 (l_ {2}) \ oplus LS7 (r_ {3}) \,}l_3 = S7 (l_2) \ oplus LS7 (r_3) \,

вывод - это конкатенация последних левой и правой половин x ′ = l 3 ‖ r 3 {\ displaystyle x '= l_ {3} \ | r_ {3}}x'=l_3\|r_3.

Блоки подстановки

Блоки подстановки (S-блоки) S7 и S9 определяются как побитовыми выражениями И-ИСКЛЮЧАЮЩЕЕ ИЛИ, так и справочными таблицами в спецификации. Побитовые выражения предназначены для аппаратной реализации, но в настоящее время принято использовать справочные таблицы даже в HW-дизайне.

S7 определяется следующим массивом:

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 определяется следующим массивом:

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,24100,262, 82,216,159,356,177, 175,24100,489, 82,216,159,356,177, 175,24100,489,, 95, 3315245, 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, 501407249265, 89.186.221.428.164, 74.440.196.458.421.350.163, 232158134354, 13.250.491.142.191, 69.193.425.152.227.366.135, 344.300.276.242.437.320.113.278, 11243, 87317, 36, 93496, 27, 487446482, 41, 68.156.457.131.326.403.339, 20, 39115442124, 475384508, 53.112.170.479.151.126.169, 73.268.279.321.168.364, 363292, 46.499.393.327.324, 24.456.267.157.460.488.426.309.229, 439.506.208.271.349.401.434.236, 16209359, 52, 56120199277, 465.416.252.287.246, 6, 83.305.420.345.153.502, 65, 61244282, 173222418, 67.386.368.261.101.476.291.195.430, 49, 79166330, 280.383.373.128.382.408.155.495, 367.388.274.107.459.417, 62454, 132.225.203.316.234, 14301, 91.503.286.424.211.347.307.140.374, 35103125427, 19.214.453.146.498.314.444.230.256.329.198.285, 50116, 78410, 10.205.510.171.231, 45139467, 29, 86505, 32, 72, 26.342.150.313.490.431.238.411.325.149.473, 40119174355, 185233389, 71448273372, 55110178322, 12.469.392.369.190, 1.109.375.137.181, 88, 75308260484, 98.272.370.275.412.111, 336318, 4.504.492.259.304, 77337435, 21.357.303.332.483, 18, 47, 85, 25.497.474.289.100.269.296.478.270.106, 31104433, 84, 414486394, 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, 92404, 485422248297, 23213130466, 22217283, 70.294.360.419.127, 312377, 7468194, 2.117.295.463.258.224.447.247.187, 80398, 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, 4 38,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, 15376,436,464, 59,461};
Криптоанализ

В 2001 году невозможная дифференциальная атака на шесть раундов KASUMI была представлена ​​Кюн (2001).

В 2003 году Элад Баркан, Эли Бихам и Натан Келлер продемонстрировали атаки типа «человек посередине» против протокола GSM, которые избегали шифра A5 / 3 и тем самым нарушали протокол. Однако этот подход не атакует шифр A5 / 3. Полная версия их статьи была опубликована позже в 2006 году.

В 2005 году израильские исследователи Эли Бихам, Орр Дункельман и Натан Келлер опубликовали связанный ключ атака прямоугольником (бумерангом) на КАСУМИ, которая может разбить все 8 раундов быстрее, чем перебор. Атака требует 2 выбранных открытых текстов, каждый из которых зашифрован одним из четырех связанных ключей, и имеет временную сложность, эквивалентную 2 шифрованию KASUMI. Хотя это, очевидно, не практическая атака, она сводит на нет некоторые доказательства безопасности протоколов 3GPP, которые полагались на предполагаемую силу KASUMI.

В 2010 году Дункельман, Келлер и Шамир опубликовали новую атаку, которая позволяет злоумышленнику восстановить полный ключ A5 / 3 с помощью атаки с использованием связанных ключей. Сложность атаки по времени и пространству настолько мала, что авторы провели атаку за два часа на настольном компьютере Intel Core 2 Duo даже с использованием неоптимизированной эталонной реализации KASUMI. Авторы отмечают, что эта атака может быть неприменима к способу использования A5 / 3 в системах 3G; их главная цель заключалась в том, чтобы опровергнуть заверения 3GPP в том, что их изменения в MISTY не окажут существенного влияния на безопасность алгоритма.

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-25 08:02:46
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте