SHA-1 해시 생성기

임의의 텍스트에서 SHA-1 해시 생성

입력 텍스트

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

SHA-1 해시

SHA-1 해시가 여기에 표시됩니다…

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 구성, 그리고 적대적 충돌 저항성이 필요 없는 파일 무결성 체크섬에서 계속 활용됩니다.

이 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비트 다이제스트를 제공하고 알려진 실용적인 공격이 없으며, 모든 플랫폼과 언어에서 폭넓게 지원됩니다.