SHA-1 해시 생성기 (160비트 레거시)
SHA-1 해시를 브라우저에서 무료로 생성합니다. 40자리 16진수 출력, 업로드 없음. Git 지문 조회, 구형 인증서 검사, 마이그레이션 감사용 레거시 도구입니다.
SHA-1이란 무엇인가요?
SHA-1(Secure Hash Algorithm 1)은 NIST가 1995년 FIPS 180-1로 발표한 160비트 암호 해시 함수입니다. 1993년 빠르게 철회된 결함 있는 초기 버전 SHA-0을 대체하기 위해 미국 국가안보국(NSA)이 설계했으며, 2000년대까지 디지털 서명, TLS 인증서, 코드 서명의 지배적인 해시 알고리즘이었습니다.
폐기 역사: 2005년 Xiaoyun Wang 팀이 SHA-1 충돌 저항성을 예상되는 2^80에서 2^63 연산으로 낮추는 이론적 공격을 발표했습니다. 2017년 2월 Google과 CWI 암스테르담이 약 110 GPU-년의 연산으로 서로 다른 두 PDF 문서에 동일한 SHA-1 해시를 생성하는 SHAttered 공격을 공개했습니다. 이것이 결정적인 실용적 폐기였습니다. NIST는 이미 2011년 서명에서 SHA-1을 비권장했고(NIST SP 800-131A), 브라우저 공급업체와 CA들은 2016~2017년에 SHA-1 인증서 지원을 제거했습니다.
현재 상태: SHA-1은 디지털 서명, 인증서 지문, 비밀번호 저장, 코드 서명 등 보안이 중요한 모든 용도에서 폐기된 알고리즘입니다. Git의 객체 ID 형식(커밋 해시)에서는 보안이 아닌 콘텐츠 주소 지정에 사용되어 남아 있으며, 관리자가 아직 마이그레이션하지 않은 레거시 소프트웨어 체크섬에도 존재합니다. Git 프로젝트는 Git 2.29(2020년 10월)에서 SHA-256 객체 형식 지원을 추가했습니다. 모든 새 프로젝트는 SHA-256 이상을 사용해야 합니다.
이 도구는 Web Crypto API의 crypto.subtle.digest('SHA-1', ...)를 사용해 브라우저 내부에서 SHA-1을 완전히 계산합니다. 40자리 16진수 출력은 sha1sum, openssl dgst -sha1, git hash-object의 출력과 동일합니다. 바이트는 서버로 전송되지 않습니다.
SHA-1 대 SHA-2 계열: SHA-1은 40자리 16진수(160비트)를 만듭니다. SHA-256은 64자리(256비트)이며 알려진 약점이 없습니다. MD5는 32자리(128비트)이며 더 일찍(2004년) 폐기되었습니다. 새 해싱 작업에는 SHA-256이 표준 선택입니다.
// Hash text using Web Crypto API (SHA-1 — legacy use only)
async function sha1(text) {
const data = new TextEncoder().encode(text);
const hash = await crypto.subtle.digest('SHA-1', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
await sha1('Hello, World!');
// → '0a0a9f2a6772942557ab5355d76af442f8f65e01'
// ⚠️ SHA-1 is broken — use SHA-256 for new work. SHA-1 예시
Git 커밋 지문 조회
tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 author A Dev <dev@example.com> 1716854400 +0000 committer A Dev <dev@example.com> 1716854400 +0000 Initial commit
Git은 모든 커밋을 커밋 헤더와 내용을 합친 형식으로 SHA-1을 계산한 blob으로 저장합니다. `git log`가 보여주는 40자리 16진수 문자열은 직접적인 SHA-1 지문입니다. 여기에 raw 커밋 객체 텍스트를 붙여넣으면 동일한 해시를 재현할 수 있습니다. `git cat-file` 출력을 디버깅하거나 미러 저장소의 기록이 변조되지 않았는지 검증할 때 유용합니다. 참고: Git 2.29+는 SHA-256 모드(git init --object-format=sha256)를 지원합니다.
레거시 TLS 인증서 지문 검증
-----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAKlL... -----END CERTIFICATE-----
2017년 이전에는 브라우저가 인증서 지문을 40자리 SHA-1 16진수 문자열로 표시했습니다. CA는 2016년 1월부터 SHA-1 서명 인증서 발급을 중단했고, 주요 브라우저는 2017년 초까지 지원을 제거했습니다. 구형 내부 인증서나 레거시 IoT 장치를 감사할 때 PEM 본문을 붙여넣어 SHA-1 지문을 재현할 수 있습니다. 현대 워크플로에서는 64자리 SHA-256 지문을 사용합니다.
구형 소프트웨어 다운로드 검증
node-v0.12.7-linux-x64.tar.gz
일부 구형 소프트웨어 아카이브는 SHA-1 체크섬만 게시합니다. 변조 감지는 아니지만 우발적 손상을 탐지하는 데에는 여전히 유용합니다. 파일 탭을 사용해 아카이브를 끌어다 놓고 SHA-1을 계산한 뒤 배포자 게시 값과 비교하십시오. SHA-256도 제공된다면 항상 그것을 우선하십시오. 새 아카이브에는 SHA-256 또는 SHA-512 체크섬을 요구하십시오.
SHAttered 충돌 시연
(파일 탭을 통해 Google/CWI shattered-1.pdf 파일 내용 붙여넣기)
2017년 2월 Google과 CWI 암스테르담은 SHAttered 공격을 공개했습니다. 동일한 SHA-1 값(38762cf7f55934b34d179ae6a4c80cadccbb7f0a)을 가진 서로 다른 두 PDF 파일을 만들어냄으로써 최초의 실용적 SHA-1 충돌을 입증했습니다. 이 도구의 파일 탭에 두 PDF 중 하나를 끌어다 놓으면 정확히 그 해시가 나옵니다. 두 다른 문서가 같은 지문을 가진다는 것은 그 지문이 더 이상 신뢰할 수 있는 신원 증명이 아님을 의미합니다. 모든 새 문서 무결성 워크플로에 SHA-256을 사용하십시오.
SHA-1 해시 생성 방법
- 1
텍스트 붙여넣기 또는 파일 끌어다 놓기
텍스트 탭을 선택하고 커밋 메시지, 인증서 본문, 레거시 체크섬 입력 등 임의의 문자열을 입력란에 붙여넣으십시오. SHA-1 해시가 입력과 동시에 갱신됩니다. 파일은 파일 탭으로 전환해 파일을 끌어다 놓으면 업로드 없이 로컬에서 해싱됩니다.
- 2
40자리 해시 복사
해시 출력 옆의 복사 버튼을 클릭하십시오. 40자리 소문자 16진수 문자열이 클립보드에 복사됩니다. 레거시 시스템이 대문자를 요구한다면 대문자 토글을 사용하십시오. 일부 구형 도구와 Windows API는 기본적으로 대문자를 사용합니다.
- 3
레거시 지문과 비교
비교 탭으로 전환해 두 SHA-1 해시를 나란히 붙여넣어 일치 여부를 확인하십시오. 레거시 배포자 체크섬 검증, 미러 Git 저장소 감사, SHA-256 도입 이전 구형 TLS 인증서 지문 확인에 유용합니다.
기술 세부사항
- 알고리즘: Merkle-Damgård 구조, 80라운드
- SHA-1은 입력을 512비트(64바이트) 블록으로 처리하며, 각각 다른 논리 함수(Ch, Parity, Maj, Parity)와 작은 정수의 제곱근에서 도출된 가산 상수를 가진 4단계 20라운드씩 80라운드의 비트 연산을 적용합니다. 초기 해시 상태는 다섯 개의 32비트 워드(A-E)이며, 최종 해시는 마지막 블록 처리 후 이 워드들의 연결입니다. FIPS 180-1(1995)에 정의되었고, FIPS 180-4(2015)로 공식적으로 대체되었습니다.
- 출력: 160비트, 40자리 16진수
- 항상 정확히 40자리 소문자 16진수(160비트 = 20바이트, 바이트당 2자리 16진수 인코딩)입니다. 입력 크기와 관계없이 출력 길이는 고정됩니다. SHA-256의 64자리에 비해 짧은 출력은 충돌 저항성이 더 약한 이유 중 하나입니다. 가능한 값이 적을수록 충돌을 찾기가 통계적으로 더 쉽습니다.
- 성능: 빠르지만 그것이 문제의 일부
- SHA-1은 빠릅니다. 브라우저에서 Web Crypto를 사용하면 일반적으로 400~700 MB/s로 SHA-256과 경쟁합니다. 공격자에게 이 속도는 이점입니다. 현대 GPU 클러스터는 초당 수십억 개의 SHA-1 해시를 계산할 수 있어 무차별 대입과 충돌 검색을 가속화합니다. 속도가 SHA-1(MD5와 마찬가지로)을 비밀번호 저장에 절대 사용해서는 안 되는 이유입니다. 비밀번호에는 bcrypt, scrypt 또는 Argon2를 사용하십시오.
- 표준: FIPS 180-1(1995) — FIPS 180-4 맥락에서 비권장
- SHA-1은 FIPS 180-1(1995)에서 표준화되어 결함 있는 SHA-0을 대체했습니다. NIST는 NIST SP 800-131A(2011)에서 디지털 서명에 SHA-1 사용을 비권장하고 FIPS 186-5(2023)에서 모든 디지털 서명 생성에 공식 금지했습니다. RFC 6194(2011)는 알려진 보안 고려사항을 문서화했습니다. W3C WebCrypto API는 레거시 호환을 위해 SHA-1을 여전히 포함하고 있으며, 이것이 브라우저 도구가 SHA-1을 계산할 수 있는 이유입니다.
모범 사례
- 보안이 중요한 작업에는 SHA-1 절대 사용 금지
- SHA-1은 디지털 서명, TLS 인증서, 코드 서명, 비밀번호 저장, 충돌 저항성이 중요한 모든 워크플로에서 폐기된 알고리즘입니다. 2017년 SHAttered 공격은 실용적 충돌을 시연했습니다. 모든 보안 용도에는 SHA-256 또는 SHA-3으로 마이그레이션하십시오. 현대 하드웨어에서 성능 차이는 미미합니다. SHA-256은 모든 현재 CPU와 GPU 파이프라인에서 하드웨어 가속됩니다.
- 레거시 지문 조회에는 SHA-1 허용 가능
- 2017년 이전 파일 체크섬을 검증하거나 Git 커밋 ID를 조회하거나 감사 목적으로 구형 인증서 지문을 검사해야 한다면 SHA-1이 적절합니다. 해시 자체가 신뢰 결정에 사용되는 것이 아니라 교차 참조를 위해 알려진 지문을 재현하는 것입니다. 감사 로그에 명시적으로 문서화하십시오: 'SHA-1은 레거시 참조 목적으로만 사용되며 보안 검증에는 사용되지 않습니다.'
- 항상 유니코드 코드 포인트가 아닌 UTF-8 바이트를 해싱
- SHA-1은 모든 해시 알고리즘과 마찬가지로 문자가 아닌 바이트에 작동합니다. 동일한 문자열이 UTF-8과 UTF-16으로 인코딩되면 다른 해시가 나옵니다. 이 도구는 해싱 전에 입력을 항상 BOM 없는 UTF-8로 인코딩합니다. 다른 인코딩(Windows UTF-16-LE, Latin-1)을 사용하는 시스템과 일치시켜야 한다면 해시를 비교하기 전에 외부에서 입력을 미리 인코딩해야 합니다.
- 코드에서 해시 검증 시 상수 시간 비교 사용
- 코드에서 두 SHA-1 해시를 비교할 때는 단순 문자열 동등 비교(=== 또는 ==) 대신 상수 시간 동등 검사를 사용하십시오. Node.js의
crypto.timingSafeEqual(), Python의hmac.compare_digest()를 사용하십시오. 단순 비교는 공격자가 예상 해시를 바이트 단위로 재구성할 수 있는 타이밍 정보를 누출합니다. 이는 레거시 SHA-1 검증에도 심층 방어 조치입니다.
SHA-1 자주 묻는 질문
SHA-1은 아직도 안전한가요?
Git은 왜 여전히 SHA-1을 사용하나요?
--object-format=sha256 지원을 추가해 마이그레이션 중입니다. GitHub와 대형 저장소 서비스도 SHA-256 모드를 점진적으로 도입하고 있습니다. 기존 리포지토리 변환은 수십억 개의 기존 커밋 ID 때문에 복잡하지만, 현재 대부분의 Git 기록은 SHA-1 커밋 ID로 저장되어 있어 이 도구가 유용합니다. SHA-1에서 SHA-256으로 마이그레이션해야 하나요?
SHAttered 공격이란 무엇인가요?
SHA-1 충돌이 우발적으로 발생할 수 있나요?
체크섬 같은 비보안 용도에 SHA-1을 사용해도 되나요?
SHA-1 해시의 길이는 얼마인가요?
입력 데이터가 서버로 전송되나요?
crypto.subtle.digest('SHA-1', data))를 사용해 브라우저 내부에서 완전히 계산됩니다. 해싱하는 동안 DevTools → 네트워크 탭을 열면 외부 요청이 전혀 없음을 확인할 수 있습니다. 파일 탭에서 끌어다 놓은 파일은 FileReader API로 읽혀 로컬에서 해싱되므로 바이트가 기기를 떠나지 않습니다. 기밀 문서, 레거시 인증서, 독점 소스 코드 지문 해싱에 안전하게 사용할 수 있습니다. SHA-1 출력이 커맨드라인 sha1sum과 왜 다른가요?
echo 'hello' | sha1sum은 'hello' 뒤에 줄 바꿈(\n)을 포함하므로 'hello\n'을 해싱합니다. 줄 바꿈을 제거하려면 echo -n 'hello' | sha1sum 또는 printf '%s' 'hello' | sha1sum을 사용하십시오. 다른 원인: Windows 줄 바꿈(\r\n vs \n), 파일 시작 부분의 UTF-8 BOM, 인코딩 차이(UTF-8 vs Latin-1). 이 도구는 해싱 전에 입력을 BOM 없는 UTF-8로 인코딩합니다. 관련 도구
모든 도구 보기 →JWT 디코더 (JWT Decoder)
보안 도구
무료 JWT 디코더로 JWT 토큰을 온라인에서 즉시 디코딩. 헤더, 페이로드, 서명, 만료, 클레임 확인. 100% 브라우저 기반 — 토큰이 기기를 떠나지 않음. 가입·추적 없음.
MD5 해시 생성기 · 파일 체크섬 도구
보안 도구
MD5, SHA-256, SHA-1, SHA-512 해시를 온라인에서 무료로 생성합니다. 브라우저에서 텍스트나 파일을 해싱하고 체크섬을 검증하며 결과를 복사할 수 있습니다.
무작위 비밀번호 생성기 (Random Password Generator)
보안 도구
강력한 무작위 비밀번호를 즉시 만드는 무료 온라인 도구. 길이와 문자 종류를 지정해 최대 50개까지 일괄 생성하고 엔트로피 분석을 확인할 수 있습니다.
SHA-256 해시 생성기 및 체크섬 도구
보안 도구
SHA-256 해시를 브라우저에서 생성·검증합니다. 64자리 16진수 출력, 파일·텍스트 지원. 가입 불필요, 데이터 미전송.
SHA-3 해시 생성기 (Keccak SHA3-256)
보안 도구
SHA-3(NIST FIPS 202 Keccak) 해시를 브라우저에서 생성합니다. 64자리 16진수 SHA3-256, js-sha3 지연 로딩. 미전송.
SHA-384 해시 생성기 (TLS Suite B 해시)
보안 도구
SHA-384 해시를 브라우저에서 생성합니다. 96자리 16진수, 길이 확장 면역, NSA Suite B, TLS AES-256-GCM. 미전송.