해시 알고리즘 설명: MD5, SHA-1, SHA-256, SHA-512
빠른 답변
MD5 및 SHA-1은 손상되었으므로 보안에 민감한 목적으로 사용해서는 안 됩니다. SHA-256은 무결성 검사, 서명 및 블록체인에 대한 현재 기본값입니다. SHA-512는 64비트 CPU에서 더 빠르며 더 긴 다이제스트가 필요한 경우에 사용됩니다. 해시 생성기를 사용하여 브라우저에서 이러한 값을 계산하세요. 파일 해시를 사용하여 파일 무결성을 확인합니다.
소개
암호화 해시 함수는 임의 크기의 입력을 받아 결정적이고, 계산이 빠르며, 반전이 불가능하고, 충돌 방지 및 눈사태에 민감한 고정 크기 다이제스트를 생성합니다(1비트 변경으로 출력 비트의 대략 절반이 변경됨). MD5(128비트), SHA-1(160비트), SHA-256(256비트) 및 SHA-512(512비트)는 가장 일반적으로 사용되는 네 가지 해시 함수이지만 보안 속성은 크게 다릅니다.
단계별
-
해시 함수의 속성 이해
좋은 암호화 해시는 결정론적(동일한 입력은 항상 동일한 출력을 생성함), 고정된 크기의 출력, 빠른 계산, 역전이 불가능함(사전 이미지 저항), 동일한 출력으로 두 입력을 찾는 것이 불가능함(충돌 저항) 및 눈사태(작은 입력 변경으로 출력 비트의 ~50%를 뒤집음)입니다.
-
다이제스트 크기를 알아보세요
MD5은 128비트(32진수 문자)를 생성합니다. SHA-1은 160비트(40개의 16진수 문자)를 생성합니다. SHA-256은 256비트(64진수 문자)를 생성합니다. SHA-512는 512비트(128개의 16진수 문자)를 생성합니다. 다이제스트가 길수록 충돌 가능성은 줄어들지만 저장 크기는 늘어납니다.
-
MD5 및 SHA-1이 손상된 이유 알아보기
연구원들은 MD5(2004) 및 SHA-1(2017, SHAttered 공격)에 대한 실제 충돌 공격을 발견했습니다. 충돌을 통해 공격자는 동일한 해시로 두 가지 다른 입력을 만들어 디지털 서명과 인증 기관을 손상시킬 수 있습니다. 둘 다 보안을 위해 사용되어서는 안 됩니다.
-
올바른 알고리즘을 선택하세요
보안보다 속도가 더 중요한 파일 무결성 검사의 경우 MD5 또는 SHA-1이 여전히 일반적입니다. 보안에 민감한 용도(비밀번호, 서명, 인증서, 블록체인)의 경우 SHA-256 또는 SHA-512를 사용하세요. 비밀번호 저장의 경우 bcrypt, scrypt 또는 Argon2와 같은 느린 KDF를 사용하십시오. 원시 SHA-256은 사용하지 마십시오.
-
해시 계산 및 확인
해시 생성기를 사용하여 임의의 알고리즘으로 텍스트를 해시하거나 파일 해시를 사용하여 로컬 파일의 해시를 계산합니다. 결과 다이제스트를 알려진 양호한 값과 비교하여 무결성을 확인합니다. 단일 비트 차이는 파일이 손상되었거나 변조되었음을 의미합니다.
예
MD5 of 'hello'(128비트, 32개의 16진수 문자)
입력: hello
산출: 5d41402abc4b2a76b9719d911017c592
SHA-256 of 'hello'(256비트, 64개의 16진수 문자)
입력: hello
산출: 2cf24dba5fb0d30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
눈사태 효과 - 한 캐릭터 변경
입력: 안녕 vs 안녕
산출: SHA-256('hello')는 2cf24dba를 시작합니다... SHA-256('Hello')는 185f8db3을 시작합니다... —1비트 입력 변경에도 불구하고 완전히 다릅니다.
일반적인 문제
- 비밀번호 해싱을 위해 MD5 또는 SHA-1 사용: 둘 다 빠르고 손상되어 무차별 대입 및 레인보우 테이블 공격을 사소하게 만듭니다. 대신 bcrypt, scrypt 또는 Argon2를 사용하십시오.
- 해싱과 암호화 혼동: 해싱은 단방향이며 되돌릴 수 없습니다. 암호화는 양방향입니다. 해시는 '해독'할 수 없으며 해시만 비교할 수 있습니다.
- 길이 확장 공격 무시: MD5, SHA-1, SHA-256 및 SHA-512는 모두 MAC로 사용될 때 길이 확장 공격에 취약합니다. 메시지 인증에는 HMAC-SHA256을 사용합니다.
- 상수 시간 비교 대신 ==를 사용하여 해시 비교: 타이밍 누출을 통해 공격자는 해시를 바이트 단위로 복구할 수 있습니다. 보안 코드에서 상수 시간 비교를 사용합니다.
팁
- 새로운 시스템의 경우 기본값은 SHA-256입니다. 이는 빠르고 광범위하게 지원되며 2026년 현재 실질적인 충돌 공격이 없습니다.
- 비밀번호 저장의 경우 작업 계수가 12+인 bcrypt(또는 64MB 메모리가 있는 Argon2id)를 사용하십시오. GPU에 비해 너무 빠른 원시 SHA-256은 사용하지 마십시오.
- 파일 다운로드를 확인할 때 알고리즘 이름과 다이제스트를 모두 비교하십시오. 게시자가 SHA-256만을 의도한 경우 SHA-1 해시는 의미가 없습니다.
- 파일 해시 도구를 사용하면 업로드하지 않고 로컬에서 대용량 파일의 SHA-256을 계산할 수 있습니다. 이는 웹 암호화 API를 통해 파일을 스트리밍합니다.