[보안] 암호화 해시 함수

암호화 해시 함수

암호화 해시 함수(Crypto Hash Function)을 알아보고 이를 스프링 부트에 사용해보자.

해시 함수란?

해시 함수란 x라는 데이터가 있으면 이 데이터보다 작은 크기의 데이터인 h(x)로 매핑해주는 함수를 말한다.
여기서 매핑으로 출력 된 데이터는 인자에 따라 달라야 하며, 원래의 데이터보다 크기가 작은 고정된 길이로 이루어져야 하며, 원래 데이터의 지문과 같은 역할을 한다.

암호화 해시 함수

암호화 해시 함수는 해시 함수를 암호화에 사용할 수 있도록 만든 함수를 말한다.
이때 해시 함수의 값으로부터 원래의 압력 값을 찾기 어려워야 하고 다음의 조건을 만족해야 한다.

  • output의 크기가 작아야 한다.
  • output을 구하기 수월해야 한다.(연산이 효율적이야 한다.)
  • 약한 충돌 저항성
    • x와 output인 h(x)가 주어졌을 때, h(y) = h(x)이며 y와 x가 같지 않은 y를 찾을 수 없어야 한다.
  • 강한 충돌 저항성
    • x와 y가 다르면서 h(x) = h(y)인 x, y를 찾을 수 없어야 한다.

스프링 부트 실습

SpringConfig

WebSecurityConfigurerAdapter을 상속하는 SpringConfig가 있다고 하자.

빈 등록

@Bean
public BCryptPasswordEncoder pwdEncode(){
return new BCryptPasswordEncoder();
};

암호화 해시 함수를 구현해 주는 BCryptPasswordEncoder 객체를 Bean 등록해 준다.

BCryptPasswordEncoder 사용

String rawPassword = userJoinDto.getPassword();
String encPassword = bCryptPasswordEncoder.encode(rawPassword);

회원이 등록될 때 요청받은 password를 위와 같이 해시 암호화로 변경해서 회원 데이터에 저장해 준다.

클라이언트 회원 가입

1

만들어 둔 회원가입 폼에 다음과 같이 기입하자.
이때 비밀번호는 간단하게 “1”이라고 입력한다.

DB 조회

2
입력했던 1이 해시 암호화되어 저장된 걸 확인할 수 있다.