id: Гость   вход   регистрация
текущее время 00:20 27/12/2024
Автор темы: Morfeys, тема открыта 07/02/2018 13:10 Печать
Категории: криптография, алгоритмы, хэширование, эцп
http://www.pgpru.com/Форум/Криптография/КриптоПримитивХэш160CTea128
создать
просмотр
ссылки

Крипто примитив Хэш160 c Tea128


Продолжаю делать велосипеды, в прошлой теме Простой потоковый шифр (сжатие хэша в 1 символ) был реализован интересный шифр, построенной на проблеме сжатия хэша.
Читая форум, бороздя интернет часто сталкиваюсь с еще одним "велосипедом", но уже одноколесным. С утверждением, что можно получить потоковый шифр, используя
криптографический хэш. Давая на его вход номер гаммы(N) и пароль. К примеру Потоковый шифр на основе хеш-функции и Counter Mode Encryption CTR.
Во всех мануалах описания хэшей прямо говорится, что хэши не испытываются в качестве шифра. Так проблема хэша как шифра- что он почти не имеет коллизий.
Так к примеру хакеры и другие структуры собирают 128 битные значения на входе MD5 и их хэши соответственно в радужные таблицы. Никто не поручится, что не собирают и 256 или 512 входящие значения и их хэши в свои базы.
И если сейчас вы сложили пароль и номер гаммы, то через год другой это значение может появится в огромной "радужной" базе и будет сломано за пару минут поиска.
Вот плюс шифра, тут возможна куча коллизий. К примеру зашифрованный блок №23=блоку№2694 и равен блоку№ 3698. Но при этом дойти до пароля и расшифровать не возможно, или очень хлопотно.
Как и составить годами собираемую со всех "темных" ресурсов интернета радужную таблицу из за коллизий уже бред и утопия.


 
Комментарии
— Morfeys (07/02/2018 13:25, исправлен 07/02/2018 13:27)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0

Поэтому сделаем этот самый пятиколесный велосипед.
Криптопримитив для лепки своих шифров или чего там вам вздумается. Выберем нестойкий хэш и сростим его на выходе с проверенным криптографическим алгоритмом.
Ну и по меньше кода, чтобы все наглядно.
Хэш 160 битный MurmurHash2_160
он быстрый, не крипто, но даст нам необходимые значения
Крипто алгоритм TEA
методом взлома 32 раундов не существует, есть что то только для 17 раундов, по всем тестам TEA примерно равен IDEA, и наврятли будет взломан в обозримое время.
И MurmurHash и TEA посторены на беззнаковых 4 байтных числах. Что удобно.
Если с выхода хэша с его 160 бит 128 подать на вход пароля, то нужно еще какое то значение (хотя бы 4+4 бита) для прокрутки TEA.
128 бит псевдо текста можно набить при промежуточных расчетах MurmurHash. Только бы значения были не совпадающими при большом массиве- выборке. Хотя это не важно, т к атака на TEA требует или кучу открытых известных до шифрования текстов, или еще большую кучу времени (из вики: Атака на 10 раундов TEA требует 2 на 52.5 выбранных открытых текстов и имеет временную сложность 2 на 84. Лучший результат — криптоанализ 17 раундов TEA. Данная атака требует всего 1920 выбранных открытых текстов, однако имеет временную сложность 2 на 123.37)

— Morfeys (07/02/2018 13:29)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0
MurmurHash2_160.h
— Morfeys (07/02/2018 13:48)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0
Что тут уже можно?

1) Пройтись хэшем по номеру гаммы N и паролю (NNNN+password).
И получить на выходе 128 битный TEA блок.
Это не лучший вариант, т к хэш состоит на основе 4 байтных слов, а тут у нас, как обычно, 4 байта int будут повторятся и иметь вид для 1 и 2 номера 0001.0001.0001.0001 и
0002.0002.0002.0002. Что даст мало различий в хэше MurmurHash2_160.

2) Пройтись с тем же по такой конструкции ((счетчик от N)+password).Уже не плохая идея. Если этот счетчик инициируется от пароля, имеет как минимум различных 8 символов, которые с каждым шагом меняются не зависимо друг от друга. К примеру счетчик из прошлой статьи (вверху Простой потоковый шифр).
Если счетчик будет еще и менять размер, и быть не четным по количеству символов (опять вспоминаем, что хэш построен на 4 байтных словах), то совсем хорошо.

3) Использовать в функции переменную int seed88=1;
При ее изменении можно проходить хэш по одному тексту с различными значениями. Как бы заменитель счетчика блока гаммы. Можно, но я бы выбрал 2)

Советы, как (а, да, с++)-

инклюдим к проекту #include "MurmurHash2_160.h" //хэш

ну и вызываем, как описано в примере-
// текст
unsigned char text88[19]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
// длинна текста
int int_text88=19;

// это ""семя" меняет хэш при одном и том же тексте
unsigned int seed88=1;
// тут будет сам 160 битный хэш
unsigned int hash32_88[5]={0,0,0,0,0};
// тут будет шифрованная гамма 128 бит TEA
unsigned int tea7[4] ={0,0,0,0};

//вызов функции хэша-Tea
MurmurHash2_160(text88,int_text88,seed88,hash32_88,tea7);

Помним!
Что это заготовка под потоковый шифр и еще боги знают какие извращения.
Делалась на скорую руку, вроде работает, еще позже проверю, пройдусь еще раз.
И да, солим наши пароли хотя бы 160 (в тему :) битными значениями!
— Morfeys (13/02/2018 03:04)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0
Разобравшись немного с тем, что написал в коде, понял две вещи

*) Что происходит не внятно и не понятно, поэтому может быть нестойким
**) В описании к MurmurHash2_160 говорится, что параметр seed, который мог бы дать много хэшей при одном тексте работает криво. И с ним и без него у MurmurHash2_160 ищутся коллизии довольно быстро.

Поэтому пришлось составлять логическую схему
1) генерации 4-х int ов от хэша для "псевдо текста" через TEA шифр с паролем от хэша и seed
(т е получаем различный текст, зависящий от seed и хэша)
2) генерации выходного значения 4 int Tea шифра, как пароль хэш MurmurHash2_160, а текст, который шифруем, от пункта 1)

В итоге получили зашифрованный TEA текст 128 бит
а) до исходного текста 1) не добраться, не сломав TEA, и исходный текст пункта 1) все равно ничего не даст, т к.-т к "атака на TEA требует или кучу открытых известных до шифрования текстов, или еще большую кучу времени из вики"
б) до пароля, входящего в TEA тоже не добраться.
с) если а) и б) верны, то взлом крипто примитива Murmur160Tea128 v.02
сводится к взлому шифра TEA.

Кроме того получил 160 бит крипто хэша
схорив значения из 1) с хэшем

Итого, вот
потоковый шифр hifr_TEA128
крипто хэш 160бит
генератор псевдо случайных последовательностей
и это все на основе-
крипто примитива Murmur160Tea128 v.02
(все на c++)
— Morfeys (13/02/2018 03:06)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0
файл
Murmur160_Tea128.h
— Morfeys (13/02/2018 03:12, исправлен 13/02/2018 03:13)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0

шифрование:
инклюдим к проекту-


#include "Murmur160_Tea128.h"


само шифрование пример описан в коде Murmur160_Tea128.h внизу:


как программа для теста


//пароль
unsigned char password55[10]={0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x10};
//длинна пароля
int int_passw55=10;
// текст для шифрования
unsigned char text55[20]={0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x10,
0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x10};
// длинна текста
int int_text55=20;
//шифрование
hifr_TEA128 (password55,int_passw55,
text55,int_text55);


И не забываем, что это потоковый шифр, солите пароли 160 битным значением. К примеру тем же хэшем от не зашифрованного текста :)

— Morfeys (15/02/2018 23:18)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0
Нашел 1 ошибку, устранил 2 слабости алгоритма
версия 02_1

Murmur160_Tea128.h
— Morfeys (28/02/2018 15:57)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0
Далее смотрите мою модификацию RC4 шифра-
Потоковый шифр RC4 s256, возрождение RC4
и пишите, если есть какие то идеи или заметили ошибки в реализации! Больше народу крепче наши ряды киберпанков!!!
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3