해싱 (Hashing)

H802·2024년 9월 26일

프로그래밍 개념

목록 보기
3/6

📘 해싱 (Hashing)

  • 데이터를 고정된 길이의 문자열 코드(해시 값 or 해시 코드)로 변환하는 방법
  • 데이터를 간단하게 관리하고 비교할수 있도록 함

📘 해시 함수

해시 함수는 수학적인 알고리즘으로, 해시함수를 사용하여 입력 데이터를 처리

입력값이 동일하면 항상 같은 해시 값을 생성하고, 입력값이 조금만 달라져도 완전히 다른 해시 값을 만든다.

대부분의 해시 함수는 단방향. 즉, 해시 함수를 사용하여 입력 데이터를 해싱하면, 그 해시 값을 통해 원래의 입력 데이터를 복원하는 것이 거의 불가능하다.


📘 해싱의 장점

1. 효율적인 검색

: 해시 값을 이용하면 데이터베이스에서 정보 빠르게 찾을 수 있음
많은 데이터를 저장할 때 해시 테이블을 사용하면 검색 속도가 매우 빨라짐

2. 무결성 검사

파일이나 데이터 손상 또는 변조 여부를 확인 시, 유용
소프트웨어 다운로드할때, 제공되는 해시값을 사용하여 다운로드한 파일이 변조되지 않았는지 검증 가능

3. 비밀번호 저장

사용자 비밀번호를 데이터베이스에 안전하게 저장하기 위해 해싱을 사용


📘 해시 함수의 종류

1. MD5

128비트 해시 값을 생성하지만, 충돌 가능성이 있어 현재는 보안에 취약하다고 알려짐

2. SHA-1

160비트 해시 값을 생성하지만, MD5처럼 충돌이 발생할 수 있어 점점 사용이 줄어들고 있음

3. SHA-256

256비트 해시 값을 생성하며, 현재 많이 사용되고 있는 해시 함수 중 하나안전성이 높아 여러 분야에서 쓰이고 있음


😀 예시

  • 파일 검증
    소프트웨어 다운로드 후, 다운로드한 파일의 해시 값을 계산하고, 웹사이트에 있는 해시 값과 일치한지 비교하여 파일의 변조 확인 가능

  • 비밀번호 저장

    • 사용자가 비밀번호를 입력할 때, 해시 함수를 통해 해시 값을 생성하고, 그 값을 데이터베이스에 저장

    • 사용자가 로그인할 때, 입력한 비밀번호를 해싱한 후 데이터베이스의 해시 값과 비교해 일치하면 로그인 성공


📘 추가 보안 방법

  • 솔트(Salt)
    솔트는 무작위로 생성된 문자열, 비밀번호와 함께 해싱되어 저장
    각 사용자에 대해 하나의 솔트가 존재
    동일한 비밀번호라도 해시 값이 다르게 생성되므로, 해커가 사전 공격을 하기 어렵게 만든다.

    • 솔트는 사용자가 처음 비밀번호를 설정할 때마다 하나만 생성 > 비밀번호 + 솔트(무작위 문자열) > 해시 함수로 계산 > 해시 값 생성

📘 슬로우 해싱 (Slow Hashing)

비밀번호 같은 민감한 데이터 보안을 강화하기 위해, 해시 함수를 여러 번 반복해서 적용하면서 의도적으로 시간을 늘리는 방식

📄 슬로우 해싱의 특징

  1. 계산 속도 저하
    해커가 비밀번호를 brute-force(무차별 대입) 공격을 통해 쉽게 추측하는 것을 방지하기 위해, 슬로우 해싱은 해시 값을 생성하는 데 시간이 더 걸리도록 설계

  2. 여러 번 반복
    슬로우 해싱에서는 해시 함수를 여러 번 반복해서 적용하는 방식으로 작동
    해시를 생성하는데 시간이 걸리기 때문에, 공격자가 대량의 비밀번호를 빠르게 시도하기 어렵게 만듦.

📄 슬로우 해싱 종류

  1. bcrypt: 비밀번호 해싱에 자주 사용되는 알고리즘

  2. scrypt: 메모리 사용량을 늘려 공격자가 대량의 병렬 처리를 통해 해시 값을 생성하기 어렵게 만듦

  3. Argon2: 최신 해싱 알고리즘으로, 메모리와 CPU 리소스를 모두 고려하여 설계

📄 슬로우 해싱 장점

강화된 보안, 비밀번호 보호, 공격자의 공격에 필요한 비용 증가

profile
배운 내용 정리하기 위해 쓰는 블로그

0개의 댓글