source

x86에서 SHA(SHA1/2/256/512) 인코딩을 가속화하기 위한 지침이 있습니까?

ittop 2023. 10. 9. 23:34
반응형

x86에서 SHA(SHA1/2/256/512) 인코딩을 가속화하기 위한 지침이 있습니까?

예를 들어, x86의 명령어 Set to hardware acceleration AES가 있습니다.그러나 x86에서 SHA(SHA1/2/256/512) 인코딩을 가속화하기 위한 지침이 있으며 x86에서 SHA를 인코딩하기 위한 가장 빠른 라이브러리는 무엇입니까?

Intel은 SHA1/256 해시 계산을 가속화하기 위한 지침을 곧 제공합니다.

enter image description here

여기에서는 CPU가 이를 지원하는지 감지하는 방법과 사용 방법에 대한 자세한 내용을 볼 수 있습니다.

(그러나 SHA-512가 아니라 일반 SIMD 명령을 사용하여 수동으로 벡터화해야 합니다.AVX512는 SHA-512(그리고 SHA 확장이 아닌 AVX512가 있는 CPU의 SHA-1/SHA-256)에 도움이 될 것이며, SIMD 회전 및 시프트(예: https://github.com/minio/sha256-simd) )를 제공합니다.

인텔의 스카이레이크 마이크로아키텍처가 그것들을 가질 것이라고 기대했지만, 그렇지 않습니다.인텔 CPU는 2016년 저전력 골드몬트, 2017년 골드몬트 플러스입니다.SHA 확장 기능을 갖춘 인텔의 첫 번째 메인스트림 CPU는 Cannon Lake가 될 것입니다.스카이레이크 / 케이비레이크 / 커피레이크는 그렇지 않습니다.

AMD 라이젠(2017)은 SHA 확장 기능을 갖추고 있습니다.

C/C++ 프로그래머는 CPU 기능이 무엇이든 사용하여 빠르게 해시할 수 있는 OpenSSL을 사용하는 것이 최선일 것입니다.(오픈SSL 버전이 충분히 새로 나온 경우에는 해당 기능이 있는 CPU의 SHA 확장도 포함됩니다.)

x86에서 SHA(SHA1/2/256/512) 인코딩을 가속화하기 위한 지침이 있습니까?

2016년 11월인데 드디어 '네'라는 답이 나왔습니다.그러나 그것은 SHA-1과 SHA-256뿐입니다 (그리고 SHA-224.

최근 SHA 확장 기능을 갖춘 인텔 CPU가 시장에 출시되었습니다.이를 지원하는 프로세서가 Goldmont 마이크로아키텍처인 것 같습니다.

  • 펜티엄 J4205 (데스크탑)
  • 펜티엄 N4200 (모바일)
  • 셀러론 J3455 (데스크탑)
  • 셀러론 J3355 (데스크탑)
  • 셀러론 N3450 (모바일)
  • 셀러론 N3350 (모바일)

아마존에서 아키텍처나 프로세서 번호가 있는 기계를 찾아봤지만, (아직) 사용 가능한 것을 찾지 못했습니다.믿어요 HP Acer는 Pentium N4200이 탑재된 노트북 1대를 보유하고 있었습니다. 2016년11월 2016년 12월 테스트 요구사항 충족

SHA-1, SHA-224 및 SHA-256뿐인 이유에 대한 일부 기술적 세부 사항은 crypto: arm64/sha256 - 커널 암호 메일링 목록의 NEON 지침을 사용하여 SHA256 지원 추가를 참조하십시오.단답형은 SHA-256 이상에서는 쉽게 병렬화할 수 없다는 것입니다.


Nloader GitHub | SHA-Intrinsics에서 Intel SHA 고유성과 ARMv8 SHA 고유성에 대한 소스 코드를 찾을 수 있습니다.C 소스 파일이며, SHA-1, SHA-224, SHA-256의 압축 기능을 제공합니다.고유 기반 구현은 SHA-1의 경우 약 3배에서 4배로, SHA-224 및 SHA-256의 경우 약 6배에서 12배로 처리량이 증가합니다.

2019 업데이트:

OpenSSL은 H/W 가속을 사용합니다.

Intel의 Goldmont µarch는 (Atom 시리즈)를 보유하고 있으며 Cannonlake(데스크탑/모바일, 10nm) 이후 제품은 SHA-NI를 지원하며 Cascade Lake 서버 CPU 이상은 이를 지원하지 않습니다.예, 병렬 CPU/ µarch 라인이 존재하기 때문에 타임라인에서 지원이 비선형적입니다.

2017년 AMD는 Zen µarch를 출시하여 Zen을 기반으로 하는 현재의 모든 서버 및 데스크톱 CPU가 이를 완벽하게 지원합니다.


OpenSSL speed SHA256는 8KiB의 블록 크기로 550%의 속도 증가를 나타냈습니다.

RAM에 로드된 실제 1GB 및 5GB 파일의 경우 해싱 속도가 약 3배 빠릅니다.

(Ryzen 1700 @ 3.6GHz, 2933CL16 RAM 벤치마크, OpenSSL: 지원 없음 vs 지원 있음 1.1.1)


다른 해시 함수와의 비교를 위한 절대값:

sha1   (1.55GHz):  721,1 MiB/s
sha256 (1.55GHz):  668.8 MiB/s
sha1   (3.8GHz) : 1977,9 MiB/s
sha256 (3.8GHz) : 1857,7 MiB/s

SO에 테이블을 추가하는 방법이 있을 때까지 자세한 내용은 이 항목을 참조하십시오.


CPUID 식별, EAX의 페이지 298:07h EBX Bit 29 == 1

인텔의 명령어 집합 참조 1264ff 페이지

명령 지연 시간/µops 등을 벤치마크하는 Agner Fog의 명령어 테이블(현재 Zen, Goldmont, Goldmont Plus 사용 가능)

코드 예제, SIMD 비교: minio/sha256-simd

OpenSSL과 같은 오픈 소스를 사용해 보십시오. 개인적으로 MD5 해싱 기능을 사용했는데 꽤 잘 작동했습니다.hashlib2++를 확인해 볼 수도 있습니다.

인텔은 SHA-1이나 2개를 위한 전용 명령어 세트를 만들지 않은 것으로 알고 있습니다.CodesInChaos가 주석에 표시한 대로 향후 아키텍처에서 사용할 수 있습니다.대부분의 해싱 알고리즘의 주요 구성 요소는 명령어 집합에 이미 있는 XOR 연산입니다.

언급URL : https://stackoverflow.com/questions/20692386/are-there-in-x86-any-instructions-to-accelerate-sha-sha1-2-256-512-encoding

반응형