Toolyard

해시란? MD5, SHA-1, SHA-256 쉽게 이해하기

데이터의 지문

해시 함수는 어떤 입력(단어 하나, 문서 하나, 4 GB 동영상)이든 정해진 길이의 짧은 문자열로 바꿉니다. 이것을 해시, 다이제스트, 체크섬이라고 부릅니다. 같은 입력에서는 늘 같은 해시가 나오고, 아주 조금만 바꿔도 완전히 다른 해시가 됩니다.

입력SHA-256 해시
hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Hello185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
hello!ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b

대문자 하나나 느낌표 하나로 결과의 글자가 모두 바뀝니다. 해시 생성기에서 직접 해 보세요.

좋은 해시 함수의 조건

  • 결정적: 같은 입력이면 어느 컴퓨터에서든 같은 해시가 나옵니다.
  • 한 방향: 해시에서 입력으로 되돌아갈 수 없습니다.
  • 충돌 저항: 같은 해시가 나오는 서로 다른 두 입력을 찾는 것이 사실상 불가능해야 합니다.
  • 빠른 계산: 체크섬에는 편리하지만, 바로 이것이 빠른 해시를 비밀번호에 쓰면 안 되는 이유이기도 합니다(뒤에서 설명).

해시는 암호화가 아니다

암호화는 양방향이라 키가 있으면 되돌릴 수 있습니다. 해시에는 키가 없고 되돌릴 수 없습니다. 알 수 있는 것은 일치하는지 여부뿐입니다. Base64는 또 다른 것으로, 누구나 디코딩할 수 있는 단순한 인코딩입니다.

자주 쓰는 알고리즘

알고리즘길이상태
MD5128비트(16진수 32자)2004년부터 깨짐. 우연한 손상 확인에만
SHA-1160비트(16진수 40자)깨짐. 2017년에 첫 실제 충돌 공개
SHA-256256비트(16진수 64자)안전. 현재 표준
SHA-512512비트(16진수 128자)안전. 64비트 컴퓨터에서는 SHA-256보다 빠른 경우가 많음

각각으로 hello를 해시하면:

  • MD5: 5d41402abc4b2a76b9719d911017c592
  • SHA-1: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
  • SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5와 SHA-1이 "깨졌다"는 뜻

MD5와 SHA-1에서는 연구자가 같은 해시가 나오는 서로 다른 파일 두 개를 일부러 만들 수 있습니다. 공격자가 무해한 파일을 체크섬이 같은 해로운 파일로 바꿔치기하거나, 서명된 문서를 위조할 수 있다는 뜻입니다. 둘 다 되돌릴 수는 없고, 우연한 손상이라면 해시가 바뀌므로 MD5 체크섬으로도 다운로드 실패는 찾을 수 있습니다. 다만 아무도 파일을 조작하지 않았다는 증명은 되지 않습니다.

SHA-256과 SHA-512는 2001년에 공개된 SHA-2 계열이며, 알려진 실용적인 공격이 없습니다. 2015년에 표준화된 SHA-3는 다른 설계로, 예비용으로 마련되어 있습니다.

해시의 쓰임새

  • 다운로드 확인: 개발사가 파일의 SHA-256을 공개하고, 내 것과 일치하면 같은 파일입니다. 체크섬 확인하는 방법을 보세요.
  • 전자 서명과 HTTPS 인증서: 문서나 인증서의 해시를 구하고, 그 해시에 서명합니다.
  • Git: 커밋과 파일은 해시로 식별됩니다. Git은 오래 SHA-1을 써 왔지만, 지금은 SHA-256도 지원합니다.
  • 비트코인 등 블록체인: 블록은 SHA-256으로 이어져 있습니다.
  • 중복 파일 찾기: SHA-256이 같은 두 파일은 같은 파일입니다.

해시와 비밀번호

사이트는 비밀번호 자체가 아니라 그 해시만 저장해야 합니다. 로그인할 때는 입력한 것을 해시해서 비교합니다. 다만 SHA-256은 이 용도에 맞지 않습니다. 너무 빨라서 유출된 데이터베이스를 가진 공격자가 초당 수십억 번 추측할 수 있기 때문입니다. 비밀번호에는 bcrypt, scrypt, Argon2처럼 그 목적으로 만든, 솔트를 쓰는 느린 해시가 필요합니다. 솔트는 해시하기 전에 각 비밀번호에 더하는 무작위 값으로, 같은 비밀번호를 쓰는 두 사람도 해시가 달라집니다.

직접 해 보기

해시 생성기라면 텍스트나 파일의 MD5, SHA-1, SHA-256, SHA-384, SHA-512를 브라우저 안에서 한 번에 계산하고, 공개된 체크섬과 비교할 수 있습니다.

이 가이드에서 쓰는 도구

다른 가이드

Windows에서 HEIC 파일 여는 방법PDF 파일 크기 줄이는 방법사진에서 위치 정보 삭제하는 방법동영상에서 오디오 추출하는 방법Wi-Fi QR 코드 만드는 방법PDF에 서명하는 방법파일 체크섬 확인하는 방법(SHA-256)PNG·JPG·WebP: 어떤 이미지 형식을 써야 할까?PDF 파일 합치는 방법이미지에서 글자 복사하는 방법JPG를 PDF로 변환하는 방법PDF를 JPG로 변환하는 방법PDF 나누기·페이지 추출 방법PDF를 회전해서 저장하는 방법PDF에 페이지 번호 넣는 방법PDF에 워터마크 넣는 방법Mac에서 HEIC를 JPG로 변환하는 방법WebP를 JPG로 변환하는 방법이미지 파일 크기 줄이는 방법동영상을 GIF로 변환하는 방법WAV를 MP3로 변환하는 방법강한 비밀번호 만드는 방법섭씨를 화씨로 바꾸는 방법GB와 GiB: 드라이브 용량이 적게 보이는 이유퍼센트 계산하는 방법두 날짜 사이 일수 계산하는 방법유닉스 타임스탬프란?두 텍스트 파일 비교하는 방법문서의 글자 수·단어 수 세는 방법스크린숏이나 이미지 속 QR 코드 읽는 방법사진을 20 KB(또는 원하는 크기)로 압축하는 방법사진 배경 없애는 방법마이크 테스트하는 방법화면 불량 화소 확인하는 방법화면 녹화하는 방법iPhone 벨소리 만드는 방법보내기 위해 동영상 압축하는 방법PDF 비밀번호 푸는 방법PDF에 비밀번호 거는 방법PDF 양식 작성하는 방법PDF를 Word로 변환하는 방법사진 속 얼굴 흐리게 하는 방법BMI 계산하는 방법주택담보대출 상환액 계산하는 방법시간대가 다른 회의 일정 정하는 방법cron 표현식이란?DNA 서열의 역상보 서열 구하는 방법DNA를 단백질로 번역하는 방법GenBank를 FASTA로 변환하는 방법DNA 서열의 제한효소 자리 찾는 방법DNA 서열이나 단백질 서열 두 개를 정렬하는 방법PCR 프라이머 설계하고 확인하는 방법몰질량 구하는 방법화학 반응식 계수 맞추는 방법정해진 몰농도 용액 만드는 방법희석 계산하는 방법(C1V1 = C2V2)pH 구하는 방법A260으로 DNA 농도 구하는 방법라이게이션에 넣을 인서트 양 구하는 방법RPM을 g(RCF)로 바꾸는 방법혈구계산판으로 세포 세는 방법퍼넷 사각형 쓰는 방법50/30/20 규칙으로 예산 짜는 방법빚 갚기 눈덩이식과 눈사태식노후 자금은 얼마나 필요할까연봉을 시급으로 바꾸는 방법이익률과 마크업의 차이부가세·VAT·판매세 계산하는 방법청구서 만드는 방법얼마짜리 집을 살 수 있을까저항 색 코드 읽는 방법LED에 붙일 저항 고르는 방법케이블 전압 강하 계산하는 방법콘크리트는 얼마나 필요할까페인트는 얼마나 필요할까서브넷 계산하는 방법유효 숫자 규칙