Подтвердить что ты не робот

Есть ли в x86 любые инструкции для ускорения кодирования SHA (SHA1/2/256/512)?

Например, в x86 приведены инструкции для аппаратного ускорения AES. Но есть ли в x86 любые инструкции для ускорения кодирования SHA (SHA1/2/256/512), а какая библиотека является быстрым для кодирования SHA на x86?

4b9b3361

Ответ 1

Есть ли в x86 любые инструкции для ускорения кодирования SHA (SHA1/2/256/512)?

Это ноябрь 2016 года, и наконец ответ: Да. Но его единственные SHA-1 и SHA-256 (и, как правило, SHA-224).

Процессоры Intel с расширениями SHA недавно появились на рынке. Похоже, что процессоры, которые его поддерживают, микроархитектура Goldmont:

  • Pentium J4205 (рабочий стол)
  • Pentium N4200 (мобильный)
  • Celeron J3455 (рабочий стол)
  • Celeron J3355 (рабочий стол)
  • Celeron N3450 (мобильный)
  • Celeron N3350 (мобильный)

Я просмотрел предложения на Amazon для машин с архитектурой или номерами процессоров, но я не нашел доступных (пока). Я полагаю, что HP у Acer был один ноутбук с Pentium N4200, который, как ожидается, будет доступен в ноябрь 2016 декабрь 2016 года, который соответствовал бы потребностям тестирования.

Для некоторых технических деталей, почему это только SHA-1, SHA-224 и SHA-256, см. crypto: arm64/sha256 - добавить поддержку для SHA256 с использованием инструкций NEON в списке рассылки криптографического ядра. Короткий ответ, выше SHA-256, вещи нелегко распараллеливаются.


Вы можете найти исходный код для встроенных функций Intel SHA и свойств ARMv8 SHA на Noloader GitHub | SHA-Intrinsics. Они являются исходными файлами C и предоставляют функцию сжатия для SHA-1, SHA-224 и SHA-256. Встроенные реализации увеличивают пропускную способность приблизительно от 3 × до 4 × для SHA-1 и приблизительно от 6 × до 12 × для SHA-224 и SHA-256.

Ответ 2

У Intel есть предстоящие инструкции по ускорению вычисления хэшей SHA1/256.

enter image description here

Вы можете узнать больше о них, как определить, поддерживает ли их ваш ЦП, и как их использовать здесь.

(Но не SHA-512, вам все равно придется вручную векторизовать это с помощью обычных инструкций SIMD. AVX512 должен помочь для SHA-512 (и для SHA-1/SHA-256 на процессорах с AVX512, но не с расширениями SHA), обеспечивая SIMD вращается, а также смены, например, https://github.com/minio/sha256-simd)

Была надежда, что у микроархитектуры Intel Skylake они будут, но это не так. Процессоры Intel с ним - это маломощные Goldmont в 2016 году, а затем Goldmont Plus в 2017 году. Первым основным процессором Intel с расширениями SHA будет Cannon Lake. Скайлэйк /Kaby Lake/Кофейное озеро нет.

AMD Ryzen (2017) имеет расширение SHA.

Программист AC/C++, вероятно, лучше всего использует OpenSSL, который будет использовать все возможности ЦП, которые он может быстро хэшировать. (Включая расширения SHA на процессорах, которые их имеют, если ваша версия OpenSSL достаточно новая.)

Ответ 3

2019 Обновление:

OpenSSL использует ускорение H/W, когда оно присутствует.

Со стороны Intel Goldmont µarch (Atom-series) имеет и от Cannonlake (настольный/мобильный, 10 нм) и далее поддержку SHA-NI, серверные процессоры Cascade Lake и более старые не поддерживают ее.

В 2017 году AMD выпустила Zen µarch, поэтому все современные процессоры для серверов и настольных ПК на базе Zen полностью поддерживают его.


Мой тест OpenSSL speed SHA256 показал увеличение скорости на 550% при размере блока 8 КБ.

Для настоящих 1 ГБ и 5 ГБ файлов, загруженных в ОЗУ, хеширование было примерно в 3 раза быстрее.

(Бенчмарк для Ryzen 1700 при 3,6 ГГц, 2933CL16 RAM; OpenSSL: 1.0.1 без поддержки против 1.1.1 с поддержкой)


Идентификация CPUID, стр. 298: 07h в EAX → EBX Бит 29 == 1.

Справочник по инструкциям Intel, стр. 1264ff.

Пример кода, сравнение SIMD: minio/sha256-simd

Ответ 4

Попробуйте что-то с открытым исходным кодом, например OpenSSL Я лично использовал свои функции хэширования MD5, и они работали очень хорошо. Вы также можете взглянуть на hashlib2 ++.

Насколько я знаю, Intel не сделала выделенный набор инструкций для SHA-1 или двух. Они могут появляться на будущих архитектурах, как указано в комментарии CodesInChaos. Основным компонентом большинства алгоритмов хэширования является операция XOR, которая уже находится в наборе команд.