LINUX.ORG.RU

NIST объявляет открытым конкурс по созданию нового HASH алгоритма


0

0

Беря во внимание увеличивающуюся мощь компьютеров и вполне успешные атаки по уменьшению сложности подбора хэшей по алгоритмам SHA-1 и SHA-2, американский Национальный Институт по Стандартам и Технологиям (NIST) объявил открытым конкурс по созданию алгоритма хеширования третьего поколения SHA-3. Крайний срок подачи заявок и более подробную информацию о конкурсе можно найти здесь.

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Нада будет подумать!

SergeDaniloff ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

/*
 * Если этот алгоритм будет использоваться американскими военными,
 * а также госструктурами, то предлагаю свой вариант.
 */

int sha3_digest(char *text) {
    int digest = 0;
    // patented mega-security(tm) hashing algorhythm
    for (int i = 0; i < strlen(text), i++)
    {
        digest += text[i];
    }
    return digest;
}

eveel ★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

безотносительно знания автоором определения слова "хеш", за такой код предлагаю расстреливать не месте.

Legioner ★★★★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Как все вышеперечисленые варианты будут считать хэш от бинарника где может встретится '\0'?

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Я бы делал
char* t;

for (t = text; *t; ++t) {
}

Суть в том, что вызов strlen (которая имеет сложность O(N)) в цикле чудесным образом превращает линейный алгоритм в квадратичный.

Legioner ★★★★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Си устарел, вы ничего не понимаете в программировании. Надо переписать на жабе, мне говорили это круто и энтерпрайзъ.

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

В комментах - зачотный детский сад.

Deleted ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

>Суть в том, что вызов strlen (которая имеет сложность O(N)) в цикле чудесным образом превращает линейный алгоритм в квадратичный.

С чего это? Значение вычисляется один раз и сохраняется в стеке или регистре, после чего с ним сравнивается переменная в цикле. Как был O(N) так и останется. Может оказаться даже эффективнее, т.к. запрос из памяти байта при каждой итерации вызовет чтение бОльших блоков, которые хоть и сохранятся в кеше, но могут быть оттуда удалены...

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

>strlen вызывается при каждой итерации

Перепутал с shell:

#!/bin/sh

for f in `ls -1 && echo qwe > /dev/stderr`; do echo $f > /dev/null done

$ /bin/sh ./test.sh qwe

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

>Господа! Не обижайтесь, но Вы идиоты, господа.

+1. Я бы сказал д@лбаебы! гении нах не позорьтесь! Позорище!

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Так есть уже и SHA-384 и SHA-512. Чего им ещё надо?

AlannY ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

молодец, осталось только разработать легенду и заслать тебя туда к ним для построения у них светлого мега-защищеного будущего

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

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

Звучит как-то странно, но польза от этого со всех сторон есть.

skwish ★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

> Суть в том, что вызов strlen (которая имеет сложность O(N)) в цикле чудесным образом превращает линейный алгоритм в квадратичный.

Суть в том, что компилятор - не дурак и производит банальную оптимизацию, вызывая strlen() единственный раз - перед началом цикла:

8048379: 8b 5d 08 mov 0x8(%ebp),%ebx
804837c: fc cld
804837d: b9 ff ff ff ff mov $0xffffffff,%ecx
8048382: 31 c0 xor %eax,%eax
8048384: 89 df mov %ebx,%edi
8048386: f2 ae repnz scas %es:(%edi),%al
8048388: f7 d1 not %ecx
804838a: 83 e9 01 sub $0x1,%ecx
804838d: 31 d2 xor %edx,%edx
804838f: 31 ff xor %edi,%edi
8048391: eb 09 jmp 804839c <digest+0x28>
8048393: 0f be 04 1a movsbl (%edx,%ebx,1),%eax
8048397: 01 c7 add %eax,%edi
8048399: 83 c2 01 add $0x1,%edx
804839c: 39 ca cmp %ecx,%edx
804839e: 75 f3 jne 8048393 <digest+0x1f>

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

предлагаю такой алгоритм:

#!/bin/bash

md5sum $0

Spinal ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Гарантировать, что вызов strlen всегда возвращает одну и ту же длину можно было бы, если бы для строки использовался immutable-тип. А здесь в процессе выполнения цикла содержание строки может измениться.

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Если может измениться, то пишем словечко volatile (изменяемый) перед именем переменной.

Vshmuk

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

>Гарантировать, что вызов strlen всегда возвращает одну и ту же длину можно было бы, если бы для строки использовался immutable-тип. А здесь в процессе выполнения цикла содержание строки может измениться.

Рискну предположить, что компилятор не такой дурак, и отслеживает возможность изменения длины строки.

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

>Если может измениться, то пишем словечко volatile (изменяемый) перед именем переменной.

На сколько я знаю, квалификатор volatile указывает, что значение переменной может измениться независимо от программы. Тот anonymous имел в виду изменение длины строки в теле цикла самой программой. В этом случае см. мой предыдущий пост.

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

А как надо объявлять strlen, чтобы сказать компилятору, что она всегда для одного и того же аргумента возвращает одно и то же значение?

yz ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

> Суть в том, что компилятор - не дурак и производит банальную оптимизацию

О да! Надеяться на оптимизации компилятора это высший пилотаж. К сожалению я пока не достиг просветления, и не возьмусь даже перечислить компиляторы, которые умеют подобное делать, не говоря уже о том, чтобы быть уверенным, что в данной конкретной ситуации он сможет провести эту (нифига не банальную, и, как мне кажется, некорректную) оптимизацию. Так что мы лучше по старинке, будем писать код, который гарантированно быстр, а не теоретически под gcc-5 -O999

Legioner ★★★★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Предлагаю модераторам снести всё вышесказанное как злостный оффтоп. Господа раздули слона не из мухи, а из пустого места. Апплодирую стоя.

const86 ★★★★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

>Предлагаю модераторам снести всё вышесказанное как злостный оффтоп. Господа раздули слона не из мухи, а из пустого места. Апплодирую стоя.

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

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

/me подумывает о разработке алгоритма под кодовым названием "Red Hash", действующего по принципу: всё отнять и поделить. :)

atrus ★★★★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Даёшь ГОСТовскую имитовставку в качестве стандарта хеширования!

Macil ★★★★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

>А как надо объявлять strlen, чтобы сказать компилятору, что она всегда для одного и того же аргумента возвращает одно и то же значение?

Для GCC кажись так:

size_t strlen(const char *s) __attribute__ ((const));

smartly ★★★ ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Спасибо, человече, что поднял настроение. Уважаю.

>int sha3_digest(char *text) {
    int digest = 0;
    // patented mega-security(tm) hashing algorhythm
    for (int i = 0; i < strlen(text), i++)
    {
        digest += text[i];
    }
    return digest;
}

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

> А здесь в процессе выполнения цикла содержание строки может измениться.

Покажи где в данном случае оно может измениться? :)

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

> К сожалению я пока не достиг просветления, и не возьмусь даже перечислить компиляторы, которые умеют подобное делать

Компиляторы тупы, к тому же не используют MMX и SSE-регистры. Так что самый верный способ - писать все на ассемблере. ;)

> нифига не банальную, и, как мне кажется, некорректную

Исправьте gcc. ;)

> а не теоретически под gcc-5 -O999

Практически - gcc3+ -O2+.

anonymous ()

Re: NIST объявляет открытым конкурс по созданию нового HASH алгоритма

Предлагаю суперустойчивый мегаинновационный алгоритм хеширования:

unsigned long* digest(char* str)
{
char *dig;
int i,len;

len=strlen(str);

dig = (char*)malloc(len);
if (!dig) return NULL;

memset(dig,0,len);

for(i=0;i<len;i++) {
dig[i]=str[i];
}

return (unsigned long*)dig;
}

И специальную модификацию алгоритма тройной надежности для военного и космического применения:

unsigned long* digest(char* str)
{
char *dig;
int i,j,len;

len=strlen(str);

dig = (char*)malloc(len);
if (!dig) return NULL;

memset(dig,0,3*len);

for(i=0;i<3;i++)
for(j=0;j<len;j++) {
dig[i*len+j]=str[j];
}

return (unsigned long*)dig;
}

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.