본문 바로가기

spring/[Spring Security] 기본

Hashing

해시 함수란?

해시 함수는 입력값에 대해 항상 동일한 출력값(해시값)을 생성하는 함수이다.
예를 들어, "password123"이라는 값을 해시 함수에 넣으면 매번 동일한 해시값이 출력된다.
이 특징 덕분에 해시 함수는 데이터의 무결성을 검증하거나, 비밀번호와 같은 민감한 데이터를 저장할 때 사용된다.

해시 함수의 주요 특징

  1. 동일한 입력 → 동일한 출력
    같은 입력값을 넣으면 항상 동일한 해시값이 나온다.
  2. 출력값은 고정된 길이
    입력값의 길이에 상관없이, 출력값은 항상 고정된 길이를 가진다.
  3. 복호화 불가능
    해시 함수는 단방향 함수로, 출력값을 원래의 입력값으로 되돌릴 수 없다.
    해시 함수의 목적은 복호화가 아니라, 두 값이 같은지 비교하는 데 있다.

솔트(Salt)란?

솔트는 해시 함수에 추가로 더하는 랜덤 데이터이다.

  • 목적: 동일한 비밀번호라도, 솔트를 사용하면 서로 다른 해시값이 생성되도록 한다.
  • 예시:
    비밀번호 "password123"에 솔트 "abc123"을 추가하면,
    hash("password123" + "abc123")의 결과는 완전히 다른 해시값이 된다.

솔트를 사용하면 공격자가 미리 계산된 해시값(레인보우 테이블)을 이용해 비밀번호를 유추하는 것을 방지할 수 있다.

솔트 관리 방법

솔트는 외부에 노출되면 안 되므로, 보관 방법이 중요하다.

  1. 환경 변수 사용
    • 솔트를 환경 변수에 저장하면, 소스 코드에서 분리하여 관리할 수 있다.
  2. 권한이 제한된 저장소에 보관
    • 권한이 있는 사람만 접근할 수 있는 위치에 솔트를 저장한다.

해시 함수의 활용

  1. 비밀번호 저장
    • 원본 비밀번호를 해싱하여 데이터베이스에 저장한다.
    • 사용자가 로그인할 때 입력한 비밀번호를 동일한 방식으로 해싱한 뒤, 저장된 해시값과 비교한다.
  2. 데이터 무결성 확인
    • 데이터가 전송 중 변경되지 않았음을 확인하기 위해 해시값을 사용한다.

 

해시 함수는 데이터의 무결성을 검증하거나 비밀번호를 안전하게 관리하는 데 필수적이다.
솔트를 함께 사용하면 해시값의 보안을 더욱 강화할 수 있다.
따라서, 해시 함수와 솔트를 적절히 활용하여 민감한 데이터를 안전하게 관리하는 것이 중요하다.

'spring > [Spring Security] 기본' 카테고리의 다른 글

사용하는 용어 정리  (0) 2024.08.03
요청처리  (0) 2024.07.05
스프링 시큐리티  (0) 2024.07.04
Cookie  (0) 2024.07.03
인증/보안  (0) 2024.07.03