ToolDeck

SHA-1 Hash Generator

Generate SHA-1 hash from any text

Input Text

로컬에서 실행 · 시크릿 붙여넣기 안전

SHA-1 Hash

SHA-1 hash will appear here…

SHA-1 해싱이란 무엇입니까?

SHA-1(Secure Hash Algorithm 1)은 모든 입력에서 고정된 160비트(20바이트) 다이제스트를 생성하는 암호화 해시 함수입니다. NSA가 개발하고 NIST가 1995년 FIPS PUB 180-1로 표준화했으며, 이후 RFC 3174에 문서화된 SHA-1은 SHA-0과 MD5의 더 강력한 후속 알고리즘으로 설계되었습니다. 이 알고리즘은 512비트 블록 단위로 입력을 처리하며, 80라운드의 비트 연산을 통해 40자 16진수 지문을 생성합니다. 이 지문은 10년 이상 SSL/TLS, PGP, SSH, IPsec의 핵심으로 사용되었습니다.

모든 암호화 해시 함수와 마찬가지로 SHA-1은 단방향 변환입니다. 입력에서 해시를 계산하는 것은 빠르지만, 해시만으로 원래 입력을 복구하는 것은 계산상 불가능합니다. 입력의 단 1비트 변경만으로도 완전히 다른 160비트 다이제스트가 생성됩니다. 이를 눈사태 효과(avalanche effect)라고 합니다. SHA-1은 무한히 큰 입력 공간을 고정된 160비트 출력으로 매핑하므로, 서로 다른 두 입력이 동일한 해시를 생성하는 충돌(collision)은 수학적으로 반드시 존재합니다. 안전한 해시 함수의 보안 요건은 이러한 충돌을 찾는 데 출력 비트 길이의 절반에 해당하는 약 2^80번의 연산이 필요해야 한다는 것입니다.

2017년 Google과 CWI 암스테르담은 SHAttered 공격을 공개하며, 서로 다른 두 PDF 파일이 동일한 다이제스트를 갖도록 만드는 최초의 실용적 SHA-1 충돌을 입증했습니다. 이 공격에는 약 2^63.1번의 SHA-1 연산이 필요했으며, 이는 이론적 한계인 2^80을 크게 밑도는 수치입니다. 2020년에는 Gaetan Leurent와 Thomas Peyrin이 약 2^63.4번의 연산으로 선택 접두사 충돌 공격 비용을 추가로 낮췄습니다. 그 결과, 모든 주요 브라우저, 인증 기관, 표준 기관은 디지털 서명과 TLS 인증서에서 SHA-1 지원을 중단했습니다. 그러나 SHA-1은 비보안 목적으로는 여전히 사용됩니다. Git 객체 ID(단, Git은 SHA-256으로 이전 중), 레거시 HMAC 구성, 그리고 적대적 충돌 저항성이 필요 없는 파일 무결성 체크섬에서 계속 활용됩니다.

NIST FIPS 180-4 — Secure Hash Standard →

이 SHA-1 생성기를 사용하는 이유

아무것도 설치하거나 코드를 작성하지 않고 즉시 SHA-1 해시를 생성합니다. 텍스트를 붙여넣으면 40자 16진수 다이제스트가 실시간으로 표시됩니다. 레거시 체크섬 검증, Git 내부 디버깅, 또는 해시 기반 워크플로우 테스트에 유용합니다.

⚡
즉각적인 해싱
입력하는 즉시 출력이 업데이트됩니다. 버튼 클릭이나 대기 없이 — 입력을 수정하는 동시에 SHA-1 다이제스트가 문자 단위로 표시됩니다.
🔒
개인정보 우선 처리
모든 해싱은 Web Crypto API를 사용하여 브라우저에서 로컬로 실행됩니다. 입력 텍스트는 기기를 떠나지 않으며 어떤 서버로도 전송되지 않습니다.
📋
원클릭 복사
클릭 한 번으로 해시를 클립보드에 복사합니다. 시스템에서 요구하는 형식에 맞게 소문자와 대문자 16진수 출력 사이를 전환할 수 있습니다.
🔍
계정 불필요
가입, 로그인, 사용 제한이 없습니다. 페이지를 열고 즉시 해싱을 시작합니다. 최신 브라우저가 있는 모든 기기에서 작동합니다.

SHA-1 활용 사례

Git 내부 구조 및 디버깅
Git은 모든 객체(커밋, 트리, 블롭, 태그)를 SHA-1 해시로 식별합니다. Git 플러밍 명령 디버깅, 팩 파일 검증, 또는 사용자 정의 Git 도구 개발 시 SHA-1 생성기로 객체 ID를 예상값과 빠르게 비교할 수 있습니다.
레거시 시스템 검증
많은 구형 시스템, 패키지 레지스트리, 펌웨어 업데이트 메커니즘은 여전히 다운로드와 함께 SHA-1 체크섬을 공개합니다. SHA-256 다이제스트를 사용할 수 없는 경우 SHA-1 해시를 생성하고 비교하여 파일 무결성을 검증합니다.
서브리소스 무결성(SRI)
HTML 스크립트 및 링크 태그의 SRI 해시에는 sha256과 sha384가 선호되지만, 일부 레거시 CDN 설정은 여전히 SHA-1에 의존합니다. 예상 다이제스트를 생성하여 기존 SRI 속성을 감사하거나 전환합니다.
QA 및 회귀 테스팅
테스트 실행 간 API 응답, 빌드 아티팩트, 데이터베이스 스냅샷의 SHA-1 해시를 비교하여 대용량 출력의 전체 바이트 비교 없이도 예상치 못한 변경을 감지합니다.
데이터 중복 제거
ETL 파이프라인에서 파일 내용이나 데이터 레코드의 SHA-1 해시를 계산하여 중복을 식별합니다. 160비트 출력은 비적대적 중복 제거 시나리오에서 MD5보다 강력한 고유성을 보장합니다.
학습 및 교육
SHA-1은 방대한 학술 문헌을 갖춘 잘 정리된 알고리즘입니다. 이를 통해 Merkle-Damgård 구조, 메시지 스케줄링, 그리고 출력 길이가 현대 컴퓨팅 성능에 비해 너무 짧을 때 충돌 저항성이 무너지는 이유를 이해할 수 있습니다.

SHA-1과 다른 해시 알고리즘 비교

SHA-1은 160비트 다이제스트를 생성합니다 — MD5(128비트)보다 길지만 SHA-2 계열 알고리즘보다는 현저히 짧습니다. 아래 표는 각 알고리즘의 다이제스트 크기, 표준, 적합한 활용 사례를 비교합니다.

알고리즘다이제스트 크기16진수 길이표준최적 용도
SHA-1160 bits40 hex chars1995 / RFC 3174Deprecated — legacy git commits, old TLS
SHA-256256 bits64 hex chars2001 / FIPS 180-4TLS certificates, blockchain, JWTs
SHA-384384 bits96 hex chars2001 / FIPS 180-4Government systems, higher security margin
SHA-512512 bits128 hex chars2001 / FIPS 180-4Digital signatures, HMAC with large keys
MD5128 bits32 hex chars1992 / RFC 1321Checksums only — broken since 2004
SHA-3256 bits64 hex chars2015 / FIPS 202Post-quantum readiness, alternative to SHA-2
BLAKE3256 bits64 hex chars2020High-performance checksums, Merkle trees

SHA-1의 동작 원리

SHA-1은 Merkle-Damgård 구조를 따릅니다. 메시지는 패딩 처리되어 512비트 블록으로 분할되고, 각 블록은 해당 블록에서 파생된 메시지 스케줄과 입력을 혼합하는 80라운드의 비트 연산을 거칩니다. 다섯 개의 32비트 상태 워드(H0부터 H4)가 현재 해시 상태를 유지하며, 이 워드들의 최종 연결이 160비트 다이제스트를 생성합니다.

Input: "hello world"
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
단계설명
PaddingAppend a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer.
Block splittingDivide the padded message into 512-bit (64-byte) blocks.
ExpansionExpand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule.
CompressionProcess 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79.
OutputConcatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters.

SHA-1과 MD5의 핵심 차이는 상태 워드 수(5개 대 4개), 블록당 라운드 수(80개 대 64개), 그리고 왼쪽 회전 피드백을 포함한 메시지 스케줄 사용입니다. 이러한 차이점으로 SHA-1은 더 큰 출력(160비트 대 128비트)을 제공하고 원래 더 높은 보안 여유를 제공했지만, 두 알고리즘 모두 현재 충돌 저항성이 취약한 것으로 간주됩니다.

코드 예제

인기 있는 언어 및 환경에서 SHA-1 해시를 생성하는 방법입니다. MD5와 달리 SHA-1은 브라우저 Web Crypto API에서 사용할 수 있어 브라우저와 Node.js 환경 모두에서 외부 라이브러리 없이 사용 가능합니다.

JavaScript (Web Crypto API — browser & Node.js)
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
  const data = new TextEncoder().encode(text)
  const hashBuffer = await crypto.subtle.digest('SHA-1', data)
  const hashArray = Array.from(new Uint8Array(hashBuffer))
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}

await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
Python
import hashlib

# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result)  # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

# Hash a file in chunks
with open('file.bin', 'rb') as f:
    sha1 = hashlib.sha1()
    for chunk in iter(lambda: f.read(8192), b''):
        sha1.update(chunk)
    print(sha1.hexdigest())
Go
package main

import (
    "crypto/sha1"
    "fmt"
)

func main() {
    data := []byte("hello world")
    hash := sha1.Sum(data)
    fmt.Printf("%x\n", hash)
    // → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}
CLI (Linux / macOS)
# Using sha1sum (Linux) or shasum (macOS)
echo -n "hello world" | sha1sum
# → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed  -

# macOS
echo -n "hello world" | shasum -a 1
# → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed  -

# Hash a file
sha1sum package.json
# → a1b2c3d4e5f6...  package.json

# Using openssl (cross-platform)
echo -n "hello world" | openssl sha1
# → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed

자주 묻는 질문

SHA-1은 아직 안전하게 사용할 수 있습니까?
보안 민감 애플리케이션에서는 안전하지 않습니다. 2017년 SHAttered 공격은 실용적인 충돌 생성을 입증했고, 2020년 선택 접두사 공격은 비용을 추가로 낮췄습니다. 디지털 서명, TLS 인증서, 또는 공격자가 충돌 입력을 조작할 수 있는 모든 시나리오에서는 SHA-256 또는 SHA-3을 사용하십시오. 공격자가 입력을 제어하지 않는 체크섬이나 캐시 키와 같은 비보안 목적으로는 SHA-1이 여전히 기능적입니다.
SHA-1과 SHA-256의 차이점은 무엇입니까?
SHA-1은 160비트(40자 16진수) 다이제스트를 생성하며 충돌 공격에 취약합니다. SHA-256은 256비트(64자 16진수) 다이제스트를 생성하며 SHA-2 계열에 속하고 알려진 실용적인 공격이 없습니다. SHA-256은 동일한 하드웨어에서 SHA-1보다 약 20-30% 느리지만, 96비트의 추가 출력과 알려진 구조적 취약점이 없다는 점에서 새로운 프로젝트의 기본 권장 알고리즘입니다.
Git이 SHA-1을 사용하는 이유는 무엇입니까?
Linus Torvalds가 2005년 Git을 설계할 당시 SHA-1은 안전하다고 여겨졌으며, 내용 주소 지정 스토리지에 적합한 속도와 충돌 저항성의 균형을 제공했습니다. Git은 SHA-1을 보안 메커니즘이 아닌 콘텐츠 식별자로 사용합니다 — 우발적 손상을 감지하는 것이지 적대적 변조를 방지하는 것이 아닙니다. 2021년부터 Git은 git-hash-function-transition 계획에 설명된 해시 확장 프레임워크를 통해 SHA-256으로 전환 중입니다.
SHA-1 해시를 원래 입력으로 되돌릴 수 있습니까?
아니요. SHA-1은 해싱 과정에서 정보를 버리는 단방향 함수입니다. 짧거나 일반적인 입력의 경우 공격자는 레인보우 테이블이나 무차별 대입 검색을 사용하여 원래 평문을 찾을 수 있지만, 이는 알고리즘의 역산이 아니라 입력 공간에 대한 전수 탐색입니다. 비밀번호에는 빠른 해시 함수 대신 bcrypt, scrypt, 또는 Argon2를 사용하십시오.
SHAttered 공격은 어떻게 작동합니까?
SHAttered 공격은 SHA-1 압축 함수의 구조적 취약점을 악용합니다. 동일한 중간 해시 상태를 생성하는 두 개의 서로 다른 512비트 메시지 블록을 신중하게 구성함으로써, 공격자들은 동일한 SHA-1 다이제스트를 가지지만 서로 다른 내용을 표시하는 두 개의 PDF 파일을 만들었습니다. 이 공격에는 약 2^63번의 SHA-1 연산이 필요했습니다 — 단일 CPU로 약 6,500년에 해당하지만 GPU 클러스터에서는 수개월 만에 가능한 수준이었습니다. 이후 기법이 개선되면서 비용은 더욱 낮아졌습니다.
SHA-1과 HMAC-SHA1의 차이점은 무엇입니까?
SHA-1은 일반 해시 함수입니다: hash = SHA1(message). HMAC-SHA1은 키 기반 메시지 인증 코드입니다: mac = HMAC(key, message). HMAC은 해시 함수를 래핑하여 길이 확장 공격을 방지하고 비밀 키를 요구하는 구조로 감쌉니다. 흥미롭게도 HMAC-SHA1은 SHA-1 자체가 충돌 저항성에서 취약하더라도 메시지 인증에서는 여전히 안전한 것으로 간주됩니다. HMAC 보안은 충돌 저항성이 아닌 압축 함수의 의사 난수 함수 속성에 의존하기 때문입니다.
파일 체크섬에 SHA-1과 MD5 중 어느 것을 사용해야 합니까?
파일 체크섬에는 MD5보다 SHA-1이 더 나은 선택입니다. MD5는 128비트 다이제스트를 생성하며 2004년부터 취약점이 입증되었고, 실용적인 충돌 공격은 현재 수 초 만에 수행 가능합니다. SHA-1은 160비트 다이제스트를 생성하며 충돌 공격이 입증되었지만 여전히 더 많은 비용이 필요합니다. 그러나 새로운 시스템에서는 SHA-256을 선호하십시오 — 256비트 다이제스트를 제공하고 알려진 실용적인 공격이 없으며, 모든 플랫폼과 언어에서 폭넓게 지원됩니다.