Speck | |
---|---|
| |
Создатель | АНБ |
Опубликован | 2013 г. |
Размер ключа | 64, 72, 96, 128, 144, 192 или 256 бит |
Размер блока | 32, 48, 64, 96 или 128 бит |
Число раундов | 22-34, зависит от размера блока и ключа |
Тип | ARX |
Speck — семейство простых для реализации блочных шифров, опубликованное АНБ США в июне 2013[1]. Шифры Speck оптимизированы для программных реализаций, тогда как опубликованный вместе с ним Simon оптимизирован для аппаратных реализаций. Speck относится к семейству ARX (англ. add-rotate-xor).
В 2017 году стало известно, что шифры АНБ Speck и Simon получили отказ в стандартизации от организации ISO[2]. Однако в октябре 2018 года стандарт всё же был принят[3].
Speck поддерживает несколько размеров блока и ключа. Блок представляет собой два слова, при этом слово может иметь размер 16, 24, 32, 48 или 64 бита. Ключ имеет размер 2, 3 или 4 слова. Раундовая функция состоит из двух вращений, сложения правого слова с левым, операцию xor ключа key и левого слова, операцию xor левого и правого слова. Количество раундов зависит от выбранных размеров слова и ключа:[4]
Размер блока (бит) | Размер ключа (бит) | Раундов |
---|---|---|
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 |
Для выработки ключей (развёртки ключа (англ. key schedule)) используется та же раундовая функция.
Разработчиками шифра в IACR ePrint была опубликована эталонная реализация Speck с 128-битным блоком и ключом. Ключ обозначен как key = (K[1], K[0]).[4]
#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 соответственно.
Если ключ состоит более чем из 2 слов, в коде должно быть 2 или 3 значения a
, используемых в сдвигах.
Дифференциальный криптоанализ может взломать 17 раундов Speck128/128 с 2113 данных, 222 байтов памяти и сложностью по времени в 2113.[5] Атака «Rectangle attack» (прямоугольная атака, вариация метода бумеранга) может взломать 18 раундов Speck128/192,256 с 2121.9 данных, 2125.9 байтов памяти и сложностью по времен в 2182.7.[6]
Это заготовка статьи по криптографии. Вы можете помочь проекту, дополнив её. |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .