DB

[MySQL] MD5와 SHA 해시 함수 비교와 실전 활용

인생아 2025. 7. 25. 17:49
반응형

MySQL에서 제공하는 대표적인 해시 함수는 MD5()SHA1(), SHA2() 시리즈다. 이 함수들은 텍스트를 고정 길이의 해시값으로 변환해 데이터 위변조 감지, 인증, 무결성 검증 등에 활용된다. 하지만 보안 수준과 용도에 따라 선택이 매우 중요하다.

1. MD5 함수란?

SELECT MD5('mypassword');
-- 결과: 34819d7beeabb9260a5c854bc85b3e44
  • 128비트(16바이트) 해시를 생성
  • 32자리 소문자 16진수 문자열 반환
  • 빠르고 가볍지만, 충돌 가능성 높아 보안성 낮음
  • 여전히 파일 무결성 체크, 캐시 키 생성 등에 사용

2. SHA 함수 종류

SHA1()

SELECT SHA1('mypassword');
-- 결과: a7e017cfd0f3ca3b45f18cf1db4ef5baec6ecb82
  • 160비트(20바이트) 해시 생성
  • 보안성은 MD5보다 우수하지만, 이미 충돌 사례 존재

SHA2()

SELECT SHA2('mypassword', 256);
-- 결과: 89b4f314dc44d38a2ab99945cebc674c41d90d92345bb229a0fba310820f5d98
  • SHA2(str, hash_length) 형식
  • hash_length는 224, 256, 384, 512 중 선택 가능
  • 가장 많이 쓰는 값은 SHA2(str, 256)
반응형

3. MD5 vs SHA1 vs SHA2 비교표

함수명 길이 (bit) 결과 길이 보안성 비고
MD5 128 32자 낮음 빠르지만 충돌 발생
SHA1 160 40자 중간 더 이상 권장되지 않음
SHA2(256) 256 64자 강력 가장 일반적으로 사용됨
SHA2(512) 512 128자 매우 강력 데이터 인증/보안 적합

4. 실무 활용 예제

비밀번호 단방향 해싱

INSERT INTO users (username, password_hash)
VALUES ('admin', SHA2('admin1234', 256));
  • 사용자가 입력한 비밀번호를 해시한 값을 DB에 저장
  • 로그인 시에도 같은 방식으로 SHA2 해시 후 비교

단, 실제 서비스에서는 MySQL보다는 애플리케이션 레이어에서 bcrypt/argon2 등 강력한 알고리즘을 적용하는 것이 일반적이다.

캐시 키 생성

SELECT CONCAT('user_', MD5(CONCAT(user_id, '-', created_at))) AS cache_key
FROM users;
  • 고유 데이터를 해시로 변환하여 중복되지 않는 키 생성

데이터 무결성 검증

-- 원본 데이터와 해시값을 함께 저장
INSERT INTO files (filename, md5hash)
VALUES ('file.zip', MD5(file_blob));
  • 추후 다운로드 후 다시 MD5 비교로 위변조 여부 확인

5. 주의사항 및 권장 사용

상황 권장 해시 함수
비밀번호 암호화 (권장 X) SHA2 (또는 외부 bcrypt)
무결성 검증 (파일, 데이터) MD5 또는 SHA1 (비보안 목적)
인증 토큰, 캐시 키 생성 MD5 or SHA2
보안 민감 데이터 처리 SHA2(256) 이상 또는 외부 암호화

6. SHA2가 더 안전한 이유

  • 해시 길이가 길수록 충돌 가능성 낮아짐
  • SHA2는 NSA 주도 하에 설계된 안전한 구조
  • 실무에서는 SHA2(256) 이상을 사용해야 암호화된 데이터의 안정성이 보장된다.

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_md5
https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_sha2

 

반응형