Описание алгоритма
Нужно подтвердить гипотезу о том, что хэш-функции при малом измени входящего сообщения сильно меняется.
Для это предлагается исследовать множество “точек” и их окрестности.
Например, мы берём входящее сообщение с1=00000(это 5-ть бит), ищем все сообщения отличающиеся на один бит(с11=00001, с12=00010,с13=00100,с14=01000,с15=10000).
Далее ищем хэш-функцию (h) от с11, с12 и т.д.
Вычисляем среднее H(c1)=(R(h(c1),h(c11))+ R(h(c1),h(c12))+ R(h(c1),h(c13))+ R(h(c1),h(c14))+ R(h(c1),h(c15)))/5
десь R(h(c1),h(c11)) - количество битов, в которых отличаются результаты хэш-функции h, вычисленной от исходных сообщений c1 и c11.
Берём другое сообщение например 001100(или любое другое) и повторяем пред. шаги .
Далее отмечаем “точки” с1, с2… на числовой оси и откладываем среднее значение по оси ординат H(c1),H(c2)… . Получаем кривую.
Количество точек должно быть велико.
Поступление входящих сообщений рандомно-равномерное.
О сортировке:
Если ведущие нули в битовой строке исходного сообщения не влияют на значение результата, то можно дополнить все сообщения нулями слева до сообщения максимальной длины из группы рассматриваемых сообщений и упорядочивать исходные сообщения, рассматривая их как целые двоичные числа.
Если ведущие нули влияют на значение хэш-функции, т.е. h(10110)<>h(00010110), то логично сообщения упорядочить по длине, а внутри сообщений одной длины упорядочить их как в предыдущем случае.
Ещё надо будет нарисовать не двумерный график, а 3-мерную поверхность, где по 3-й оси откладывать размер сообщений
Тексты программ для хэш-функций я предоставлю.
Реализация -- С++ в объектно-ориентированном стиле.
время не горит