해시 함수란?
해시 함수는 입력값에 대해 항상 동일한 출력값(해시값)을 생성하는 함수이다.
예를 들어, "password123"이라는 값을 해시 함수에 넣으면 매번 동일한 해시값이 출력된다.
이 특징 덕분에 해시 함수는 데이터의 무결성을 검증하거나, 비밀번호와 같은 민감한 데이터를 저장할 때 사용된다.
해시 함수의 주요 특징
- 동일한 입력 → 동일한 출력
같은 입력값을 넣으면 항상 동일한 해시값이 나온다. - 출력값은 고정된 길이
입력값의 길이에 상관없이, 출력값은 항상 고정된 길이를 가진다. - 복호화 불가능
해시 함수는 단방향 함수로, 출력값을 원래의 입력값으로 되돌릴 수 없다.
해시 함수의 목적은 복호화가 아니라, 두 값이 같은지 비교하는 데 있다.
솔트(Salt)란?
솔트는 해시 함수에 추가로 더하는 랜덤 데이터이다.
- 목적: 동일한 비밀번호라도, 솔트를 사용하면 서로 다른 해시값이 생성되도록 한다.
- 예시:
비밀번호 "password123"에 솔트 "abc123"을 추가하면,
hash("password123" + "abc123")의 결과는 완전히 다른 해시값이 된다.
솔트를 사용하면 공격자가 미리 계산된 해시값(레인보우 테이블)을 이용해 비밀번호를 유추하는 것을 방지할 수 있다.
솔트 관리 방법
솔트는 외부에 노출되면 안 되므로, 보관 방법이 중요하다.
- 환경 변수 사용
- 솔트를 환경 변수에 저장하면, 소스 코드에서 분리하여 관리할 수 있다.
- 권한이 제한된 저장소에 보관
- 권한이 있는 사람만 접근할 수 있는 위치에 솔트를 저장한다.
해시 함수의 활용
- 비밀번호 저장
- 원본 비밀번호를 해싱하여 데이터베이스에 저장한다.
- 사용자가 로그인할 때 입력한 비밀번호를 동일한 방식으로 해싱한 뒤, 저장된 해시값과 비교한다.
- 데이터 무결성 확인
- 데이터가 전송 중 변경되지 않았음을 확인하기 위해 해시값을 사용한다.
해시 함수는 데이터의 무결성을 검증하거나 비밀번호를 안전하게 관리하는 데 필수적이다.
솔트를 함께 사용하면 해시값의 보안을 더욱 강화할 수 있다.
따라서, 해시 함수와 솔트를 적절히 활용하여 민감한 데이터를 안전하게 관리하는 것이 중요하다.
'spring > [Spring Security] 기본' 카테고리의 다른 글
| 사용하는 용어 정리 (0) | 2024.08.03 |
|---|---|
| 요청처리 (0) | 2024.07.05 |
| 스프링 시큐리티 (0) | 2024.07.04 |
| Cookie (0) | 2024.07.03 |
| 인증/보안 (0) | 2024.07.03 |