Skip to content

SHA-1 해시 생성기 (160비트 레거시)

SHA-1 해시를 브라우저에서 무료로 생성합니다. 40자리 16진수 출력, 업로드 없음. Git 지문 조회, 구형 인증서 검사, 마이그레이션 감사용 레거시 도구입니다.

트래킹 없음 브라우저 실행 무료
⚠️ SHA-1은 레거시 알고리즘입니다. 새 작업에는 SHA-256을 사용하세요. 모든 해싱은 로컬에서 실행됩니다 — 데이터가 업로드되지 않습니다.
알고리즘
NIST FIPS 180-1 테스트 벡터 대조로 SHA-1 정확성 검토 완료; NIST SP 800-131A 기준 폐기 프레이밍 검증 완료 — Go Tools 엔지니어링 팀 · May 28, 2026

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. 1

    텍스트 붙여넣기 또는 파일 끌어다 놓기

    텍스트 탭을 선택하고 커밋 메시지, 인증서 본문, 레거시 체크섬 입력 등 임의의 문자열을 입력란에 붙여넣으십시오. SHA-1 해시가 입력과 동시에 갱신됩니다. 파일은 파일 탭으로 전환해 파일을 끌어다 놓으면 업로드 없이 로컬에서 해싱됩니다.

  2. 2

    40자리 해시 복사

    해시 출력 옆의 복사 버튼을 클릭하십시오. 40자리 소문자 16진수 문자열이 클립보드에 복사됩니다. 레거시 시스템이 대문자를 요구한다면 대문자 토글을 사용하십시오. 일부 구형 도구와 Windows API는 기본적으로 대문자를 사용합니다.

  3. 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은 아직도 안전한가요?
아니요. SHA-1은 2005년 이론적으로 약화되었고, 2017년 2월 Google과 CWI 암스테르담이 SHAttered 공격을 통해 최초의 실용적 충돌을 시연했습니다. 두 개의 서로 다른 PDF 파일이 동일한 SHA-1 해시를 가집니다. NIST는 2011년 디지털 서명에서 SHA-1 사용을 비권장했고(NIST SP 800-131A), 모든 주요 브라우저와 인증 기관은 2017년까지 SHA-1 인증서 지원을 중단했습니다. SHA-1은 서명, 인증서, 비밀번호 저장 등 보안이 중요한 모든 용도에서 폐기된 알고리즘입니다. 새 작업에는 SHA-256으로 전환하십시오.
Git은 왜 여전히 SHA-1을 사용하나요?
Git은 2005년에 설계되었을 때 SHA-1이 여전히 널리 신뢰받았기 때문에 객체 ID(커밋 해시, 트리 해시, blob 해시)에 SHA-1을 사용했습니다. Git의 사용은 암호 서명이 아니라 우발적 손상을 감지하기 위한 콘텐츠 주소 지정 방식입니다. Git 프로젝트는 Git 2.29(2020)부터 --object-format=sha256 지원을 추가해 마이그레이션 중입니다. GitHub와 대형 저장소 서비스도 SHA-256 모드를 점진적으로 도입하고 있습니다. 기존 리포지토리 변환은 수십억 개의 기존 커밋 ID 때문에 복잡하지만, 현재 대부분의 Git 기록은 SHA-1 커밋 ID로 저장되어 있어 이 도구가 유용합니다.
SHA-1에서 SHA-256으로 마이그레이션해야 하나요?
예, 보안이 중요한 시스템에서는 반드시 해야 합니다. 마이그레이션 체크리스트: (1) TLS 인증서 — SHA-1 서명 인증서가 있다면 즉시 교체하십시오; CA는 더 이상 발급하지 않습니다. (2) API 서명과 HMAC — HMAC-SHA-256으로 교체하십시오. (3) SHA-1로 저장된 비밀번호 해시 — bcrypt나 Argon2로 마이그레이션하십시오. (4) 문서나 패키지 체크섬 — SHA-256으로 재발행하십시오. (5) Git 저장소 — 도구체인이 지원한다면 새 저장소에 SHA-256 모드를 선택하십시오. 아카이브 다운로드의 레거시 체크섬은 우발적 손상 감지만 필요하므로 그대로 두어도 됩니다.
SHAttered 공격이란 무엇인가요?
SHAttered(shattered.io, 2017년 2월)는 Google Security와 CWI 암스테르담이 만들어낸 실용적 SHA-1 충돌입니다. 약 110 GPU-년의 연산(2017년 클라우드 가격 기준 약 $110,000)이 소요되었으며, 동일한 SHA-1 해시(38762cf7f55934b34d179ae6a4c80cadccbb7f0a)를 가진 두 개의 서로 다른 PDF 파일을 만들었습니다. 이로써 SHA-1 충돌이 이론에 불과하다는 가정을 무너뜨렸습니다. 2020년까지 선택 접두사 SHA-1 충돌 비용은 약 $45,000으로 낮아졌습니다. 반면 SHA-256은 어떤 종류의 충돌도 발견된 적이 없습니다.
SHA-1 충돌이 우발적으로 발생할 수 있나요?
의도하지 않은 SHA-1 충돌은 여전히 천문학적으로 낮은 확률입니다. SHA-1 가능 값은 2^160개이므로 임의의 두 입력에 대한 충돌 확률은 약 10^24분의 1입니다. 위험은 공격자가 의도적으로 충돌을 만들 수 있다는 데 있습니다. 현재 약 $45,000에 충돌을 만들 수 있습니다. Git 기록의 우발적 손상은 SHA-1 약점으로 인한 현실적 위협이 아닙니다. 진짜 위험은 공격자가 신뢰된 문서와 같은 해시를 가진 악성 문서를 대체할 수 있는 디지털 서명, 인증서, 코드 서명 워크플로에 있습니다.
체크섬 같은 비보안 용도에 SHA-1을 사용해도 되나요?
우발적 데이터 손상 감지(손상된 다운로드, 디스크에서 뒤집힌 비트)에는 기술적으로 여전히 충분합니다. 우발적 충돌은 사실상 불가능하기 때문입니다. 하지만 오늘날 비보안 체크섬에도 SHA-1을 사용할 이유가 거의 없습니다. SHA-256은 하드웨어 가속으로 성능 차이가 미미하고 범용적으로 지원되며 미래에도 안전하기 때문입니다. SHA-1을 사용해야 하는 유일한 정당한 이유는 40자리 16진수 지문만 허용하는 레거시 시스템과의 호환성입니다.
SHA-1 해시의 길이는 얼마인가요?
SHA-1 해시는 항상 정확히 160비트로, 40자리 16진수 문자(바이트당 2자리 16진수 × 20바이트)로 표현됩니다. 입력 크기와 관계없이 출력 길이는 고정입니다. 단일 문자나 10 GB 파일을 해싱해도 정확히 40자리 16진수가 나옵니다. 비교: MD5는 32자리(128비트), SHA-256은 64자리(256비트), SHA-512는 128자리(512비트)를 만듭니다.
입력 데이터가 서버로 전송되나요?
아니요. SHA-1은 Web Crypto API(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로 인코딩합니다.