Русская Википедия:Speck

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Карточка блочного шифра Speck — семейство простых для реализации блочных шифров, опубликованное АНБ США в июне 2013 Шаблон:Sfn. Шифры Speck оптимизированы для программных реализаций, тогда как опубликованный вместе с ним Simon оптимизирован для аппаратных реализаций. Speck относится к семейству ARX (Шаблон:Lang-en).

Варианты

Speck поддерживает несколько размеров блока и ключа. Блок представляет собой два слова, при этом слово может иметь размер 16, 24, 32, 48 или 64 бита. Ключ имеет размер 2, 3 или 4 слова. Раундовая функция состоит из нескольких стадий:

  1. Циклический сдвиг первого слова вправо на 8 бит;
  2. Сложение второго слова с первым по модулю 2 в степени длины слова;
  3. Операция XOR ключа и результата сложения;
  4. Циклический сдвиг второго слова влево на 3 бита;
  5. Операция XOR второго слова и результата предыдущего XOR.

Количество раундов зависит от выбранных размеров слова и ключа:Шаблон:Sfn

Размер блока (бит) Размер ключа (бит) Раундов
2×16 = 32 4×16 = 64 22
2×24 = 48 3×24 = 72 22
4×24 = 96 23
2×32 = 64 3×32 = 96 26
4×32 = 128 27
2×48 = 96 2×48 = 96 28
3×48 = 144 29
2×64 = 128 2×64 = 128 32
3×64 = 192 33
4×64 = 256 34

Для выработки ключей (Шаблон:Нп2) используется та же раундовая функция.

Реализация

Разработчиками шифра в IACR ePrint была опубликована эталонная реализация Speck с 128-битным блоком и ключом. Ключ обозначен как key = (K[1], K[0]).[1]

#include <stdint.h>

#define ROR(x, r) ((x >> r) | (x << (64 - r)))
#define ROL(x, r) ((x << r) | (x >> (64 - r)))
#define R(x, y, k) (x = ROR(x, 8), x += y, x ^= k, y = ROL(y, 3), y ^= x)
#define ROUNDS 32

void encrypt(uint64_t const pt[static 2],
             uint64_t ct[static 2],
             uint64_t const K[static 2])
{
   uint64_t y = pt[0], x = pt[1], b = K[0], a = K[1];

   R(x, y, b);
   for (int i = 0; i < ROUNDS - 1; i++) {
      R(a, b, i);
      R(x, y, b);
   }

   ct[0] = y;
   ct[1] = x;
}

При реализации с 16-битными словами, вращения используют 7-битный циклический сдвиг вправо и 2-битный влево. Для остальных размеров слова, как показано в примере используются сдвиги 8 и 3 соответственно.

Эффективность

Согласно сравнительным тестам «легковесных» шифров, Speck является одним из самых быстрых доступных шифров, однако производительность сильно зависит от архитектуры. Некоторые усредненные показатели для 64-битной версии блока и ключа размером 128: Tmote(18 бит MSP) - 9780 циклов, Raspberry Pi (32 бит ARM) - 35 циклов, что гораздо меньше в сравнении с результатами AES: Tmote(18 бит MSP) - 25350 циклов, Raspberry Pi (32 бит ARM) - 254 цикла. При реализации на Arduino Uno(8 бит AVR) AES занимает 62208 циклов, а Speck - 64768.[2]

При реализации на 8-битном микроконтроллере AVR, Speck с 64-битными блоками и 128-битным ключом потребляет 192 байта Flash, временные переменные занимают 112 байтов ОЗУ и требуется 164 цикла для шифрования каждого байта в блоке. [3]

Salsa20 - это потоковый шифр с сопоставимой производительностью. Однако, часто возникают трудности с безопасным использованием потоковых шифров в некоторых приложениях, в то время как блочные шифры, такие как Speck, работают хорошо. Это привело к тому, что Google добавил реализацию Speck в ядро Linux версии 4.17, планируя предложить ее в качестве варианта для шифрования диска на тех устройствах Android, которые в противном случае были бы незашифрованы из-за низкой производительности AES на процессорах, в которых отсутствует расширение системы команд AES.[4] Speck был позже удален из ядра Linux и вместо этого Google переключился на алгоритм Adiantum.

Безопасность

Криптоанализ

Разработчики утверждают, что Speck, хотя и является «легковесным» шифром, спроектирован таким образом, чтобы обеспечить максимально возможную защищенность от стандартных атак на основе подобранного открытого текста и подобранного шифротекста. Сопротивление атакам на связанных ключах также было целью создания шифра, хотя и менее важной, поскольку атаки в этой модели не относятся к типичным.Шаблон:Sfn Разработчиками не предпринимались попытки противостоять атакам с распознаванием по известному ключу. Кроме того, они не рассматривали использование Speck в качестве хеш-функции. Шаблон:Sfn

По состоянию на 2018 год, не известно ни одной успешной атаки на варианты Speck с полным числом раундов. Из-за интереса к шифрам Simon и Speck было опубликовано около 70 работ по криптоанализу. Шаблон:Sfn Как и для итеративных шифров, атаки на варианты с уменьшенным числом раундов были проведены успешно. Лучшими опубликованными атаками на Speck в стандартной модели атак являются атаки дифференциального криптоанализа; они перехватывают примерно 70–75% раундов большинства вариаций шифров, хотя эти лучшие атаки лишь незначительно быстрее, чем полный перебор. Команда разработчиков подбирала соответствующее количество раундов для фиксированной длины ключа так, чтобы при дифференциальных атаках сохранить запас прочности, аналогичный AES-128, примерно 30%.Шаблон:Sfn

Лучшие опубликованные дифференциальные атаки на Speck в стандартной модели атак
Вариант Взломано раундов Сложность по времени Необходимые данные Байты памяти
Speck128/256 25/34 (74%) 2253.35 2125.35 222
Speck128/192 24/33 (73%) 2189.35 2125.35 222
Speck128/128 23/32 (72%) 2125.35 2125.35 222
Speck96/144 21/29 (72%) 2143.94 295.94 222
Speck96/96 20/28 (71%) 295.94 295.94 222
Speck64/128 20/27 (74%) 2125.56 261.56 222
Speck64/96 19/26 (73%) 293.56 261.56 222
Speck48/96 17/23 (74%) 295.8 247.8 222
Speck48/72 16/22 (73%) 271.8 247.8 222
Speck32/64 15/22 (68%) 263.39 231.39 222

Команда разработчиков Speck утверждает, что излишне большие запасы прочности сопряжены с реальными издержками, особенно на «легких» устройствах. Также они утверждают, что криптоанализ на этапе проектирования позволил правильно установить необходимое количество раундов и что это значение удовлетворяет запасу безопасности AES, поэтому Speck можно считать безопасным, даже с небольшим запасом прочности. Шаблон:Sfn

Разработчики утверждают, что криптоанализ АНБ обнаружил, что алгоритм не имеет слабых мест и его безопасность соизмерима с длиной ключа.Шаблон:Sfn Авторы говорят, что их методы криптоанализа включали линейный и дифференциальный криптоанализ с использованием стандартных методов, таких как алгоритм Мацуи и SAT/SMT solvers, хотя полный список не приводится.Шаблон:Sfn

АНБ одобрило использование Simon128 / 256 и Speck128 / 256 в системах национальной безопасности США, хотя AES-256 по-прежнему рекомендуется для неограниченных применений. [5]

Атаки по побочным каналам

Speck не использует S-блоки(блоки подстановок) или другие таблицы поиска, поэтому он, естественно, неуязвим к атакам по времени. Это отличает его от шифров, использующих таблицы поиска, такие как AES, которые, как было показано, уязвимы для таких видов атак. Однако, как и большинство блочных шифров (включая AES), Speck уязвим для атак по энергопотреблению, если не приняты аппаратные контрмеры.Шаблон:Sfn

Размеры блоков и ключей

Хотя семейство шифров Speck включает в себя варианты с теми же размерами блоков и ключей, что и AES (Speck128 / 128, Speck128 / 192 и Speck128 / 256), оно также включает варианты с размером блока до 32 бит и размером ключа до 64 бит. Эти небольшие размеры блоков и ключей небезопасны для общего использования, поскольку они могут быть уязвимы для атак «дней рождения» и атак методом полного перебора, независимо от формальной безопасности шифра.[6] Разработчики утверждают, что эти размеры блоков и ключей были добавлены для устройств с ограниченными ресурсами, где нет иных вариантов, или когда шифруются только очень небольшие объемы данных, например в протоколах RFID. Только вариант с 128-битным размером блока и 256-битным размером ключа одобрен для использования в системах национальной безопасности США.[5]

Усилия по стандартизации и противоречия

Первые попытки стандартизировать Simon и Speck не увенчались успехом, так как не было получено большинство голосов Международной организации по стандартизации, требуемое для этого решения. Эксперты-делегаты ISO из нескольких стран, включая Германию, Японию и Израиль, выступили против усилий АНБ по стандартизации шифров Simon и Speck, сославшись на то, что АНБ настаивает на их стандартизации, зная об уязвимых местах в шифрах. Позиция была основана на частичном подтверждении нахождения слабых мест в шифрах, отсутствия явной необходимости стандартизации новых шифров и предыдущего участия АНБ в создании и продвижении криптографического алгоритма Dual_EC_DRBG с резервным копированием[7].

После того, как первые попытки стандартизировать шифры потерпели неудачу, ISO стандартизировал Simon и Speck в других рабочих группах. По состоянию на октябрь 2018 года шифры Simon и Speck были стандартизированы ISO как часть стандарта радиоинтерфейса RFID, Международного стандарта ISO / 29167-21 (для Simon) и Международного стандарта ISO / 29167-22 (для Speck). Они стали доступны для использования коммерческими организациями.[8][9]

7 августа 2018 года Speck был полностью удален из версии ядра Linux 4.20.[10]

Примечания

Шаблон:Примечания

Литература


Ссылки

Шаблон:Симметричные криптоалгоритмы