Практический ответ: нет.Если используемая вами хеш-функция хороша, то она должна выглядеть как Случайный Оракул , выход которого на конкретном заданном входе полностью неизвестен, пока этот вход не будет опробован.Таким образом, вы не сможете получить ничего из вычисляемых хэшей, пока не достигнете точного порядка ввода, который ищете.(Строго говоря, может существовать хеш-функция, которая имеет обычные свойства хеш-функции, а именно сопротивления столкновению и прообразу, не будучи случайным оракулом, но отход от модели RO по-прежнему рассматривается как хешслабость функции.) (Строго говоря, немного неправильно говорить о случайном оракуле для одной функции без ключа.)
Теоретический ответ: это зависит.Предполагая, для простоты, что у вас есть N порций по 512 битов, тогда вы можете принять меры, чтобы стоимость не превышала N * 2 160 элементарных оценок SHA-1, что ниже N! , когда N> = 42 .Идея состоит в том, что рабочее состояние SHA-1 между двумя последовательными блоками ограничено 160 битами.Конечно, эта стоимость смехотворно невозможна в любом случае.В более общем плане, ваша проблема заключается в поиске прообраза для SHA-1 с входными данными в пользовательском наборе S ( N! последовательностей ваших N кусков), поэтомустоимость имеет нижнюю границу размера S и сопротивление прообразу SHA-1, в зависимости от того, что ниже.Размер S равен N! , который очень быстро растет при увеличении N .SHA-1 не имеет известных недостатков в отношении прообразов, поэтому предполагается, что его сопротивление по-прежнему составляет около 2 160 (поскольку он имеет 160-битный выход).
Редактировать: Этот тип вопроса будет уместен на предложенном обмене стеками "криптографии" , когда (если) он будет создан.Пожалуйста, помогите создать его!