id: Гость   вход   регистрация
текущее время 16:19 13/12/2019
Автор темы: Onix, тема открыта 25/11/2015 16:24 Печать
Категории: криптография
http://www.pgpru.com/Форум/Криптография/QF-ХешНа256-512БитСШагомВ64Бит
создать
просмотр
ссылки

qF – хэш на 256-512 бит, с шагом в 64 бит


Хотя faq и говорит, что не стоит придумывать свое, но всё же.
На пробу, хэш для генерации 256-512 бит, с шагом в 64 бита. Исходный код: https://yadi.sk/d/J3k__RJGkiTLV


Сам хеш выполняется за несколько шагов:


1. rtea подобным алгоритмом, генерируется промежуточный код Y

for(n=0; n<16; n+=2) //1) y=s+e+m+c
{
y.Q[n+0] =e->C[1] +=S(0) +e->Q.Q[n+0] +m->Q[n+0] +0;
y.Q[n+1] =e->C[0] +=S(1) +e->Q.Q[n+1] +m->Q[n+1] +1; // +1 не трогать
}

2. выполняется хеш Y (salsa подобным алгоритмом)

for(n=0; n<_N0; n++) //2) y=mix(y)
{
G( 0, 7,14,15,45);G( 1, 8,15, 0,39);G( 2, 9, 0, 1,35);G( 3,10, 1, 2,29);
G( 4,11, 2, 3,39);G( 5,12, 3, 4,35);G( 6,13, 4, 5,29);G( 7,14, 5, 6,23);
G( 8,15, 6, 7,35);G( 9, 0, 7, 8,29);G(10, 1, 8, 9,23);G(11, 2, 9,10,14);
G(12, 3,10,11,29);G(13, 4,11,12,23);G(14, 5,12,13,14);G(15, 6,13,14, 5);
}

3. завершение работы

for(n=0; n<16; n+=2) //3) e=e+y
{
e->Q.Q[n+0] += y.Q[n+0];
e->Q.Q[n+1] += y.Q[n+1];
}

определения:
typedef union { word64_t Q[16]; byte_t B[128]; word32_t W[32]; } qFbyte_t;


typedef struct __ctqF_t
{

qFbyte_t Q,T; //hash, tmp
word64_t L,C[2]; //общая длина сообщения в байтах, +генератор

} ctqF_t;


#define S(x) (e->C[x]+<< 15)^(e->C[x] <!--escaped--><div class="center"> 10)<br />
#define L(x,n) </div><!--escaped--> (n|>> (64-(n)
#define G(a,b,c,d,r) y.Q[a]^=L((y.Q[b]+y.Q[c]+y.Q[d]), r)
* что то разметка портит определения, лучше глянуть код


Данная схема позволяет использовать внутреннее состояние любой размерности
и соответственно стоить хеши до размера в 1/2 от состояния.



 
Комментарии
— pgprubot (04/12/2015 17:07, исправлен 04/12/2015 17:08)   профиль/связь   <#>
комментариев: 511   документов: 2   редакций: 70

Если вы считаете, что несмотря на FAQ ваши изыскания полезны для криптографической науки, то выкладывайте их на IACR.org, публикуйте в тематических научных журналах и конференциях, а сюда, на форум, достаточно будет скинуть ссылку на ваши оформленные, как следует, труды. Начать придётся с того, что алгоритм записывается не в виде кода, а в виде последовательности математических преобразований — смотрите примеры в похожих статьях по крипто.

Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3