개발자 도구 · SHA 해시 계산기
SHA-256 대 SHA-512: 단어 크기, 라운드 및 512가 더 빠를 수 있는 이유
· 작동 방식
샤-256 암호화 실적 브라우저 API
SHA-512는 더 긴 다이제스트를 생성하지만 64비트 하드웨어에서 더 빠르게 실행되는 경우가 많습니다. 이 게시물에서는 둘 사이의 구조적 차이점과 SHA-384가 어떻게 적합한지 설명하므로 사실에 따라 선택할 수 있습니다.
해시가 길어지고 실행 속도가 빨라지나요? — 비교를 시작하는 반직관적인 관찰
SHA-512는 더 긴 다이제스트를 생성하지만 64비트 하드웨어에서 SHA-256보다 빠르게 실행되는 경우가 많습니다. 반직관적인 관찰은 CPU 설계에서 비롯됩니다. 64비트 산술에 최적화된 프로세서는 동일한 데이터에 대해 32비트 작업보다 64비트 작업을 더 빠르게 실행합니다. SHA-256은 32비트 단어에서 작동하는 반면 SHA-512은 64비트 단어에서 작동합니다. 64비트 CPU에서는 후자가 하드웨어에 더 자연스럽게 맞고 단어 크기 변환 및 패딩에 더 적은 시간을 소비합니다.
이것이 모든 사용 사례에 대해 SHA-512을 본질적으로 더 좋게 만드는 것은 아닙니다. 다이제스트가 길수록 더 많은 저장 공간과 대역폭이 필요합니다. 둘 사이의 선택은 "더 새로운" 또는 "더 강력한"이라는 모호한 의미가 아니라 출력 크기 요구 사항과 플랫폼을 기준으로 이루어져야 합니다.
32비트 대 64비트 단어 — 핵심 구조적 차이점과 최신 CPU에 적합한 이유
SHA-256은 알고리즘 전체에서 32비트 단어에 대해 작동합니다. 메시지 일정은 16 32비트 단어를 64 32비트 단어로 확장합니다. 각 라운드마다 8개의 32비트 작업 변수가 업데이트됩니다. 메시지 블록은 512비트(16개의 32비트 단어)입니다. 출력은 256비트(8개의 32비트 단어)입니다. 모든 산술은 32비트 값에서 수행되며 2^32에서 오버플로 래핑이 수행됩니다.
SHA-512은 64비트 단어에서 작동합니다. 메시지 일정은 16 64비트 단어를 80 64비트 단어(SHA-256에서와 같이 64 아님)로 확장합니다. 각 라운드마다 8개의 64비트 작업 변수가 업데이트됩니다. 메시지 블록은 1024비트(16개의 64비트 단어)입니다. 출력은 512비트(8개의 64비트 단어)입니다. 모든 산술은 64비트 값에서 수행되며 오버플로 래핑은 2^64에서 이루어집니다.
64 라운드 대 80, 512비트 대 1024비트 블록 — 블록당 및 바이트당 변경 사항
SHA-256는 블록당 64 라운드를 실행합니다. SHA-512는 블록당 80 라운드를 실행합니다. 이는 SHA-512가 블록당 더 많은 믹싱을 수행한다는 의미입니다. 언뜻 보면 이 소리가 더 느리게 들립니다. 그러나 단어 크기와 블록 크기가 클수록 SHA-512는 라운드당 더 많은 비트를 처리합니다. 1 메가바이트 파일의 경우 SHA-256는 1048576 / 512 = 2048 블록을 각각 64 라운드로 총 131072 라운드로 처리합니다. SHA-512는 1048576 / 1024 = 1024 블록을 각각 80 라운드로 총 81920 라운드로 처리합니다. SHA-512는 블록당 더 많은 라운드를 수행하더라도 총 라운드 수는 더 적습니다.
벽시계 시간의 차이는 단어 크기에 대한 CPU 최적화에 따라 달라집니다. 64비트 ALU(산술 논리 장치)가 있는 CPU는 64비트 작업을 효율적으로 실행합니다. 동일한 CPU가 32비트 SHA-256 작업을 여러 마이크로 작업으로 나누거나 더 작은 실행 단위에서 실행해야 하는 경우 작업당 비용이 더 높습니다. 최신 프로세서는 64비트 작업에 최적화되어 블록당 추가 라운드에도 불구하고 SHA-512을 더 빠르게 만드는 경우가 많습니다.
블록 크기 및 라운드 수는 바이트당 작업을 설명합니다. 실제 처리량에는 플랫폼 벤치마크가 필요합니다.
블록 산술은 더 긴 출력이 바이트당 더 많은 작업을 의미할 필요가 없는 이유를 설명합니다. SHA-256는 모든 512비트 블록에 대해 64라운드를 수행하는 반면, SHA-512는 모든 1,024비트 블록에 대해 80라운드를 수행합니다. 두 번째 디자인은 각 블록에서 더 많은 라운드를 수행하지만 하나를 처리할 때마다 두 배의 입력을 소비합니다.
이러한 구조적 비교는 특정 브라우저 벤치마크를 예측하지 않습니다. Web Crypto는 기본 지침, 운영 체제 라이브러리 또는 기타 최적화된 코드를 사용할 수 있으며 입력 길이는 설정에 소비되는 공유를 변경합니다. 처리량이 중요한 경우 실제 대상 환경을 측정합니다. 저장소는 더 넓은 단어가 64비트 하드웨어에 적합할 수 있다는 정성적 주장만 지원합니다.
출력 길이는 소스가 지정되지 않은 공격 작업 추정 없이 표현 및 보안 속성에 영향을 미칩니다.
SHA-384은 별도의 알고리즘이 아닙니다. 두 가지 변경 사항이 있는 SHA-512입니다. 초기 해시 상수가 다르며 출력이 전체 512 비트 대신 384 비트(48 바이트)로 잘립니다. 이러한 잘림은 길이 확장 공격에 대해 이점이 있습니다. 전체 512비트 상태를 알 수 없기 때문에 공격자는 원본 메시지에 데이터를 추가하여 다이제스트를 확장할 수 없습니다(그 중 384비트만 공개됨).
SHA-256은(는) 길이 확장 공격에 취약합니다. 메시지의 다이제스트와 메시지 길이를 알고 있는 경우 원본 메시지 내용을 알지 못한 채 메시지에 데이터를 추가하고 확장된 메시지의 다이제스트를 계산할 수 있습니다. 이는 약한 구성을 사용하는 HMAC 구현과 같은 특정 보안 컨텍스트에서 중요합니다. SHA-384은(는) SHA-512을 기반으로 함에도 불구하고 전체 상태가 노출되지 않으므로 취약하지 않습니다. 이는 SHA-256이 위험하다고 간주되는 상황에서 SHA-384을 유용하게 만듭니다.
실제 예 — 하나의 입력을 세 개 모두로 해싱하고 다이제스트 길이를 나란히 비교
출력 크기는 가장 직접적인 구별입니다. SHA-256는 32 바이트(64 16진수 문자)를 생성합니다. SHA-384은 48 바이트(96 16진수 문자)를 생성합니다. SHA-512는 64바이트(128 16진수 문자)를 생성합니다. URL 또는 JSON에 저장하려면 다이제스트가 길수록 더 많은 공간을 차지합니다. 충돌 저항의 경우 출력이 길어질수록 충돌을 찾기가 기하급수적으로 어려워집니다. 더 넓은 출력은 더 큰 결과 공간을 제공하는 반면 즉각적인 제품 결과는 측정하기가 더 간단합니다. 즉, 저장소, URL 및 프로토콜 필드의 바이트가 더 많아집니다. 이 기사에서는 저장소 증거에서 파생된 공격 작업 추정치가 없기 때문에 공격 작업 추정치를 첨부하지 않습니다.
일부 시스템 및 표준은 SHA-256을 명시적으로 지정합니다. 다른 사람들은 SHA-512을 사용하거나 선택을 허용합니다. SSH 지문의 기본값은 SHA-256입니다. 컨테이너 이미지 다이제스트는 SHA-256 또는 SHA-512일 수 있습니다. npm과 같은 패키지 관리자는 하위 리소스 무결성을 위해 SHA-512를 사용합니다. 스스로 선택하는 경우가 많지만, 차이점을 이해하면 발언권이 있을 때 현명하게 선택할 수 있습니다.
여기서 다루지 않는 내용 — CPU, 컴파일러 및 입력 크기에 따라 달라지는 처리량 수치입니다. 게시물의 품질이 유지됩니다
ToolAcre SHA 해시 계산기는 SHA-256, SHA-384 및 SHA-512를 제공합니다. 세 가지 모두로 동일한 입력을 해시하고 출력 길이를 관찰합니다. 다이제스트는 모두 서로 완전히 다를 것이며 이는 예상됩니다. 알고리즘은 서로 다른 라운드 상수, 서로 다른 메시지 일정 및 서로 다른 혼합 작업을 사용합니다. 다이제스트 옆에 표시되는 바이트 수는 출력 크기가 아닌 입력 크기만 반영합니다. 세 가지 알고리즘 모두 해당 라운드 시퀀스를 통해 동일한 입력 바이트를 동일하게 처리합니다.
자체 하드웨어에서 테스트하면 성능 차이가 드러납니다. 각 알고리즘을 사용하여 대용량 파일(수 메가바이트 테스트 사례)을 해시하고 결과 시간을 측정합니다. 최신 64비트 시스템에서 SHA-512은 바이트 수로 볼 때 그렇지 않은 경우에도 더 짧은 벽시계 시간 내에 완료되는 경우가 많습니다. 32비트 시스템 또는 내장 프로세서에서는 CPU의 ALU가 32비트 작업에 최적화되어 있으므로 SHA-256이 더 빠를 수 있습니다.
요약: 출력 크기 및 플랫폼별로 선택 - ToolAcre SHA 해시 계산기는 SHA-256, SHA-384 및 SHA-512를 제공하므로 동일한 입력에서 세 가지를 모두 볼 수 있습니다.
암호화 강도는 성능과 별개입니다. 저장소는 SHA-256을(를) 손상된 것으로 표시하지 않고 이를 범용 기본값으로 선택합니다. 그 제품 증거는 원시적인 것을 보편적으로 안전하다고 부르는 것을 정당화하지 않습니다. 적합성은 여전히 구성 및 위협 모델에 따라 달라집니다. SHA-256에서 SHA-512로 전환하는 것은 보안 업그레이드가 아닙니다. 이는 스토리지와 성능의 균형입니다. 시스템이 SHA-256을 지정하고 정확한 알고리즘이 필요한 경우 이를 사용하십시오. 선택할 수 있고 더 긴 다이제스트를 원하거나 플랫폼이 64비트임을 알고 있는 경우 SHA-512가 유효한 선택입니다.
브라우저의 웹 암호화 구현은 crypto.subtle.digest를 통해 세 가지를 모두 계산합니다. 귀하의 장치, 브라우저 버전 및 백그라운드 시스템 로드는 모두 관찰된 성능에 영향을 미칩니다. 그러나 핵심은 여전히 남아 있습니다. SHA-256 및 SHA-512은 "최고의 해시 함수"라는 타이틀을 놓고 경쟁하지 않습니다. 이는 다양한 출력 요구 사항에 맞게 설계된 도구이며 일반화된 성능 주장이 아닌 시스템 요구 사항을 기준으로 선택이 이루어집니다.