Можно ли разбить SHA1, SHA-256, SHA-512 на несколько ядер/потоков?

Я изучаю скорость (время вычисления хэша) SHA1 , SHA-256 , SHA-512 на разных процессорах

можно ли разбить эти алгоритмы хэширования на несколько ядер / потоков ?

1 ответов


Если вам интересно распараллелить выполнение вычисления одного хэша (независимо от вкуса 1, 256 или 512), то ответ, К сожалению, нет. Это связано с тем, как определена функция преобразования SHA. Он работает на блоках фиксированного размера, но выход преобразования каждого блока требуется next, поэтому вы не можете запускать вычисления параллельно.

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

если все, что вы хотели, это генерировать дайджесты для больших входных данных с использованием базовых преобразований SHA, вы можете определить произвольную схему сегментации входных данных, а затем генерировать блоки дайджеста для каждого сегмента параллельно. Затем объедините их и так далее..

что-то вроде этого:

 | ------------------ large input ---------------------------------------------|

 |    b0     |    b1    |    b2    |          |          |          |    bn    |

вы можете создать H(b0), H(b1), .. H(bn) параллельно.

затем генерировать H_OUT = H(H(b0) + H(b1) + .. + H(bn)) (где + знак может быть конкатенацией или простым XOR но эти, скорее всего,не быть криптографически сильный).

этот метод выиграет от нескольких ядер, но H_OUT не будет эквивалентно вычислению одного хэша исходного большого ввода.