МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Хеш-функции с повышенной криптостойкостью





 

Whirlpool криптографическая хеш-функция, разработанная Vincent Rijmen и Paulo S. L. M. Barreto. Впервые опубликована в ноябре 2000 года. Осуществляет хеширование входного сообщения с длиной до 2256 бит. Выходное значение хеш-функции Whirlpool, называемое хешем, составляет 512 бит.

3.1 История Whirlpool

Хеш-функция Whirlpool названа в честь Галактики Водоворот (M51) в созвездии Гончие Псы первой галактики с наблюдаемой спиральной структурой.

С момента создания в 2000 году Whirlpool дважды подвергалась модификации.

Первая версия, WHIRLPOOL-0, была представлена в качестве кандидата в проекте NESSIE (англ. New European Schemes for Signatures, Integrity and Encryption, новые европейские проекты по цифровой подписи, целостности и шифрованию).

Модификация WHIRLPOOL-0, названная WHIRLPOOL-T, в 2003 году была добавлена в перечень рекомендованных к использованию криптографических функций NESSIE. Изменения касались блока подстановки ( S-box ) Whirlpool: в первой версии структура S-box не была описана, и он генерировался совершенно произвольно, что создавало определённые проблемы при аппаратной реализации Whirlpool. В версии WHIRLPOOL-T S-box «приобрёл» чёткую структуру.

Дефект в диффузных матрицах WHIRLPOOL-T, обнаруженный Taizo Shirai и Kyoji Shibutani , был впоследствии исправлен, и конечная (третья) версия, названная для краткости просто WHIRLPOOL, была принята ISO (англ. International Organization for Standardization, международная организация по стандартизации) в стандарте ISO/IEC 10118-3:2004 в 2004 году.

3.2 Описание Whirlpool

В отличие от первой версии, в последней (третьей) S-box определен, а диффузная матрица заменена на новую после доклада Taizo Shirai и Kyoji Shibutani.

Whirlpool состоит из повторного применения функции сжатия, основой которой является специальный 512-битный блочный шифр W с 512-битным ключом.

В алгоритме используются операции в поле Галуа по модулю неприводимого многочлена

Многочлены для краткости записываются в шестнадцатеричном представлении. Например, запись означает.

Символом _ обозначается оператор композиции. Выражение _ означает композицию функций и.

Для обозначения композиции последовательности функций используется символ:

- множество матриц над;

- циркулянтная матрица, первая строка которой состоит из элементов.

Как уже говорилось выше, Whirlpool построена на специальном блочном шифре W, который работает с 512-битными данными.

В преобразованиях промежуточный результат вычисления хеша называется хеш-состоянием или просто состоянием. При вычислениях состояние обычно представляется матрицей состояния. Для Whirlpool это матрица в. Следовательно, 512-битные блоки данных должны быть преобразованы в этот формат перед дальнейшими вычислениями.

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

 

3.3 Преобразования Whirlpool

Функция состоит из параллельного применения блока подстановки (S-box) ко всем байтам матрицы состояния:

Блок подстановки описывается в таблице 1.

Перестановка циклически сдвигает каждый столбец матрицы состояния так, что столбец j сдвигается вниз на j позиций:

Задача данного преобразования перемешать байты строк матрицы состояния между собой.

Линейная диффузия это линейное преобразование, матрицей которого является MDS матрица , то есть:

Другими словами, матрица состояния умножается справа на матрицу C. MDS матрица это такая матрица над конечным полем K, что если взять её в качестве матрицы линейного преобразования из пространства в пространство, то любые два вектора из пространства вида будут иметь как минимум различий в компонентах. То есть набор векторов вида образует код, обладающий свойством максимальной разнесённости (англ. Maximum Distance Separable code). Таким кодом является, например, код Рида-Соломона. В Whirlpool свойство максимальной разнесённости MDS матрицы означает, что общее количество меняющихся байт вектора и вектора не меньше . Другими словами, любое изменение только одного байта приводит к изменению всех 8 байтов . В этом и состоит задача линейной диффузии.

Как уже упоминалось выше, MDS матрица в последней (третьей) версии Whirlpool была изменена благодаря статье Taizo Shirai и Kyoji Shibutani. Они проанализировали MDS матрицу второй версии Whirlpool и указали на возможность повышения устойчивости Whirlpool к дифференциальному криптоанализу. Также они предложили 224 кандидата на место новой MDS матрицы. Из этого списка авторы Whirlpool выбрали вариант, наиболее легко реализуемый в аппаратном обеспечении.

Функция добавления ключа представляет собой побитовое сложение (XOR) матриц состояния и ключа.

Первая строка матрицы cr является результатом применения блока подстановки S к байтовым числам.

Остальные 7 строк нулевые.

Таким образом, из известного ключа K производится необходимая последовательность K0,...,KR ключей для каждого раунда блочного шифра W.

Специальный 512-битный блочный шифр в качестве параметра использует 512-битный ключ K и выполняет следующую последовательность преобразований, где ключи K0,...,KR порождены описанной выше процедурой расширения ключа. В хеш-функции Whirlpool число раундов R = 10.

 

 

Таблица 1- Блок подстановки

00x 01x 02x 03x 04x 05x 06x 07x 08x 09x 0Ax 0Bx 0cx 0dx 0Ex 0Fx
00x 18x 23x c6x E8x 87x B8x 01x 4Fx 36x A6x d2x F5x 79x 6Fx 91x 52x
10x 60x Bcx 9Bx 8Ex A3x 0cx 7Bx 35x 1dx E0x d7x c2x 2Ex 4Bx FEx 57x
20x 15x 77x 37x E5x 9Fx F0x 4Ax dAx 58x c9x 29x 0Ax B1x A0x 6Bx 85x
30x Bdx 5dx 10x F4x cBx 3Ex 05x 67x E4x 27x 41x 8Bx A7x 7dx 95x d8x
40x FBx EEx 7cx 66x ddx 17x 47x 9Ex cAx 2dx BFx 07x Adx 5Ax 83x 33x
50x 63x 02x AAx 71x c8x 19x 49x d9x F2x E3x 5Bx 88x 9Ax 26x 32x B0x
60x E9x 0Fx d5x 80x BEx cdx 34x 48x FFx 7Ax 90x 5Fx 20x 68x 1Ax AEx
70x B4x 54x 93x 22x 64x F1x 73x 12x 40x 08x c3x Ecx dBx A1x 8dx 3dx
80x 97x 00x cFx 2Bx 76x 82x d6x 1Bx B5x AFx 6Ax 50x 45x F3x 30x EFx
90x 3Fx 55x A2x EAx 65x BAx 2Fx c0x dEx 1cx Fdx 4dx 92x 75x 06x 8Ax
A0x B2x E6x 0Ex 1Fx 62x d4x A8x 96x F9x c5x 25x 59x 84x 72x 39x 4cx
B0x 5Ex 78x 38x 8cx d1x A5x E2x 61x B3x 21x 9cx 1Ex 43x c7x Fcx 04x
c0x 51x 99x 6dx 0dx FAx dFx 7Ex 24x 3Bx ABx cEx 11x 8Fx 4Ex B7x EBx
d0x 3cx 81x 94x F7x B9x 13x 2cx d3x E7x 6Ex c4x 03x 56x 44x 7Fx A9x
E0x 2Ax BBx c1x 53x dcx 0Bx 9dx 6cx 31x 74x F6x 46x Acx 89x 14x E1x
F0x 66x 3Ax 69x 09x 70x B6x d0x Edx ccx 42x 98x A4x 28x 5cx F8x 86x

 

Whirlpool, как и любая другая хеш-функция, должна осуществлять хеширование сообщения произвольной длины. Поскольку внутренний блок шифрования W работает с 512-битными входными сообщениями, то исходное сообщение необходимо разбить на блоки по 512 бит. При этом последний блок, который содержит конец сообщения, может оказаться не полным.

Для решения данной задачи Whirlpool использует алгоритм Меркле-Дамгаарда дополнения входного сообщения. Результатом дополнения сообщения является сообщение, длина которого кратна 512. Пусть L длина исходного сообщения. Тогда получается в несколько шагов:

- к концу сообщения приписать бит «1»;

- приписать x битов «0» так, чтобы длина полученной строки L + 1 + x была кратна 256 нечетное число раз;

- наконец, приписать 256-битное представление числа L.

Дополненное сообщение записывается в виде

и разбивается на 512-битные блоки для дальнейшей обработки.

В Whirlpool применяется схема хеширования Miyaguchi-Preneel блоков дополненного сообщения последовательно шифруются блочным шифром W:

Е?Е??????????????????????????7?

где IV (англ. initialization vector, вектор инициализации) 512-битная строка, заполненная "0".

Дайджестом для сообщения M является выходное значение Ht функции сжатия, преобразованное обратно в 512-битную строку.

 

3.4 Криптостойкость Whirlpool

Хеш-функция H считается криптографически стойкой, если она удовлетворяет трём основным требованиям, на которых основано большинство применений хеш-функций в криптографии: необратимость, стойкость к коллизиям первого рода и стойкость к коллизиям второго рода.

Пусть hn произвольная n-битная подстрока 512-битного хеша Whirlpool.

Авторы Whirlpool утверждают, что созданная ими хеш-функция удовлетворяет следующим требованиям криптостойкости:

- генерация коллизии требует порядка 2n / 2 вычислений хеша WHIRLPOOL (стойкость к коллизиям второго рода);

- для заданной hn поиск такого сообщения M, что H(M) = hn, потребует порядка 2n вычислений хеша WHIRLPOOL (необратимость);

- для заданного сообщения M обнаружение другого сообщения N, для которого H(N) = H(M), потребует порядка 2n вычислений хеша WHIRLPOOL (стойкость к коллизиям первого рода);

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

К данному заявлению авторы Whirlpool добавили примечание:

Эти утверждения вытекают из значительного запаса прочности относительно всех известных атак. Тем не менее, мы понимаем, что невозможно сделать не спекулятивные утверждения о неизвестных вещах.

 

Таблица 2 - Результаты криптоанализа хеш-функций Whirlpool и Grшstl по методу Th Rebound Attack

Хеш-функция Число раундов Сложность Требуемый объём памяти Тип коллизии
Whirlpool 4.5 / 10 коллизия
  5.5 / 10 Полусвободная коллизия
  7.5 / 10 Полусвободная почти коллизия
Grшstl-256 6 / 10 полусвободная коллизия

ЗАКЛЮЧЕНИЕ

 

В ходе лабораторной работе были изучены вычисление вручную значение хеш-функции Adler-32, составление программы на VBA для вычисления значения хеш-функции Adler-32 заданного текстового файла.


ПРИЛОЖЕНИЕ 1

(обязательное)

Прямая реализация алгоритма

uint32_t adler32(unsigned char *data, int len){

 

uint32_t sum1 = 1;

uint32_t sum2 = 0;

 

for (i = 0; i < len; i++){

sum1 = (sum1 + buf[i]) % BASE;

sum2 = (sum2 + sum1) % BASE;

}

 

return (sum2 << 16) | sum1;

}

Более эффективная реализация алгоритма Adler32 из библиотеки zlib:

uint32_t adler32(uint32_t adler, const unsigned char* buf,

unsigned len){

 

uint32_t sum2;

unsigned n;

 

/* Обработка частных случаев...*/

 

/* do length NMAX blocks -requires just one modulo operation */

while (len >= NMAX) {

len -= NMAX;

n = NMAX / 16; /* NMAX is divisible by 16 */

do {

DO16(buf); /* 16 sums unrolled */

buf += 16;

} while (--n);

adler %= BASE;

sum2 %= BASE;

}

 

/* Обработка оставшихся элементов массива...*/

 

/* return recombined sums */

return adler | (sum2 << 16);

}

 

ПРИЛОЖЕНИЕ 2

(обязательное)

Превращение Adler32 в кольцевой хеш

inline uint32_t roll(int32_t adler, unsigned char oldbyte,

unsigned char newbyte, unsigned len){

 

int32_t sum2 = (adler >> 16) & 0xffff;

adler &= 0xffff;

 

adler += newbyte oldbyte;

if(adler >= (int32_t) BASE)

adler -= BASE;

else if(adler < 0)

adler += BASE;

 

sum2 = (int32_t) (sum2 len * oldbyte + adler 1) %

(int32_t) BASE;

if(sum2 < 0){

sum2 += BASE;

 

return adler | (sum2 << 16);

}

 





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.