-
Notifications
You must be signed in to change notification settings - Fork 31
Проверка NIST тестом. #38
Comments
Я не склонен воспринимать эти результаты всерьез по двум причинам:
|
Реализация тестов NIST есть и на Си, в т.ч. официальная, доступная по ссылке https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software - можно проверить на ней. Есть еще какие-то сторонние реализации, например https://github.com/stamfest/randomtests https://github.com/terrillmoore/NIST-Statistical-Test-Suite Еще можно почитать описание самого теста "Random Excursions Variant Test", и что конкретно проверяется им, вот ссылка на соответствующую статью: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-22r1a.pdf - можно написать свою реализацию данного теста, если есть какие-то сомнения.
Не совсем. Малый параметр J говорит о том, что результаты теста могут быть необъективны, но этот параметр J выводоится на основе содержимого анализируемого файла (хотя тут конечно и размер играет роль). J это количество переходов через 0 если битовую последовательность представить как последовательность -1, 1 и просуммировать это. Вот простейшая программа, которая принимает поток байтов в stdin и считает только лишь параметр J для него: #include <stdio.h>
const char pos_neg[2] = {-1, +1};
int main(void)
{
int acc = 0;
unsigned zero_cross = 0;
int c;
while((c = getchar()) != EOF)
{
for(int i = 7; i != -1; --i)
{
acc += pos_neg[ ((unsigned char)c >> i) & 1 ];
if (acc == 0)
{
zero_cross++;
}
}
}
printf("J = %u\n", zero_cross+1);
return 0;
} Для последовательности, полученной с сидом 1234, это самое значение J не меняется очень длительный период времени. Попробуйте в оригинальной программе заменить условие цикла |
В общем тут есть подозрительные моменты, но данная хэш-функция вроде бы и не задумывалась как криптостойкая, так что это проблемой не является. |
Тогда я понял о чем вы. t1ha не является хеш-функцией криптографического качества, т.е. при некоторых значениях в результатах могут быть статистические сдвиги и другие закономерности. От этих недостатков можно избавиться ценой дополнительных операций, т.е. падением скорости. Другими словами, для быстрых хеш-функцией всегда есть некий компромисс между скоростью и качеством. Соответственно, если предлагаемое "дешевое" (с точки быстродействия) качество не подходит, то нужно подбирать другую хеш-функцию (или другой ГПСЧ). Если говорить о недостатках t1ha, то сейчас я считаю что мне не следовало использовать MUL-XOR (aka MUM) миксер (умножение 64x64=>128 с последующим XOR-ом старшей и младшей частей). Этот миксер, кроме очевидной не-инъективности, сложен для анализа и поэтому привнес еще несколько недочетов (см #36). |
Здравствуйте, хочу сообщить о своих провеках хэш функции t1ha2.
Код:
Вывод программы сохраняется в файл
my_test > randdata
. Компилировалось и запускалось на x86-64 архитектуре, если это важно.Таким образом я делаю ГПСЧ из хеш-функции. Так вот, такой ГПСЧ проваливает тест NIST. Я взял https://github.com/dj-on-github/sp800_22_tests и запустил это таким образом:
/sp800_22_tests-master/sp800_22_tests.py -t random_excursion_variant_test rand_data_test
Результат:
Тест провален. Может быть эти требования не стоит предьявлять к данной хеш функции, но я просто собщаю.
The text was updated successfully, but these errors were encountered: