복붙노트

[SPRING] 스프링 보안으로 MD5에서 BCrypt로 전환하기

SPRING

스프링 보안으로 MD5에서 BCrypt로 전환하기

지금까지 우리 애플리케이션은 간단한 MD5 알고리즘을 사용하여 사용자 비밀번호를 해싱하고 있습니다. 이제 우리는 애플리케이션에 Spring Security를 ​​도입했으며 대신 BCrypt를 사용하는 편이 낫습니다. 내 문제는 어떻게 이전 암호를 새 알고리즘으로 마이그레이션 할 수 있습니다.

문제 1에 대해서는 CustomAuthenticationProvider를 사용하는 것이 효과적 일지 모르지만 시스템에서 사용하는 방법에 대해 완전히 혼란 스럽습니다. 아래는 SecurityConfig 클래스의 configureGlobal 함수입니다.

@Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
            auth.jdbcAuthentication()
                    .dataSource(dataSource)
                    .passwordEncoder(passwordEncoder)
                    .usersByUsernameQuery("SELECT uname AS username, upwd AS password, true AS enabled FROM user_table WHERE uname!='' AND uname IS NOT NULL AND uname=?")
                    .authoritiesByUsernameQuery("SELECT uname AS username, 'Default' AS role FROM user_table WHERE uname!='' AND uname IS NOT NULL AND uname=?");
        }

내 응용 프로그램에서 UserDetailsService를 사용하지 않았으며 위의 쿼리 만 제공됩니다. 이 문제에서 유용 할 수 있다면 CustomUsernamePasswordAutheticationFilter 및 CustomPasswordEncoder를 사용했습니다.

감사,

해결법

  1. ==============================

    1.BCryptPasswordEncoder를 서브 클래스화할 수 있어야합니다. 먼저 일치 메소드를 재정 의하여 BCryptPasswordEncoder가 일치 항목을 찾도록하고 일치가 실패한 경우 기존 코드와 일치하는 MD5를 시도하십시오. 이렇게하면 BCrypt 해시 된 암호가 있고 올바른 값을 제공하는 모든 사람이 BCryptPasswordEncoder 논리가 내장되어 있기 때문에 빨리 로그인 할 수 있습니다. 이전 MD5 해시 된 암호를 갖고 올바른 값을 제공하는 모든 사용자는 (사용자 지정 코드로 인해) 로그인되지만 BCrypt 일치를 먼저 거친 경우 추가 벌칙이 부과됩니다. 다른 사람은 로그인하지 않지만 로그인 실패 경로는 MD5 수표의 추가 패널티를 낳습니다.

    BCryptPasswordEncoder를 서브 클래스화할 수 있어야합니다. 먼저 일치 메소드를 재정 의하여 BCryptPasswordEncoder가 일치 항목을 찾도록하고 일치가 실패한 경우 기존 코드와 일치하는 MD5를 시도하십시오. 이렇게하면 BCrypt 해시 된 암호가 있고 올바른 값을 제공하는 모든 사람이 BCryptPasswordEncoder 논리가 내장되어 있기 때문에 빨리 로그인 할 수 있습니다. 이전 MD5 해시 된 암호를 갖고 올바른 값을 제공하는 모든 사용자는 (사용자 지정 코드로 인해) 로그인되지만 BCrypt 일치를 먼저 거친 경우 추가 벌칙이 부과됩니다. 다른 사람은 로그인하지 않지만 로그인 실패 경로는 MD5 수표의 추가 패널티를 낳습니다.

    기존 암호를 다시 해시하는 것이 아니라 사용자가 BCrypt로 완전히 이동 한 후 암호를 변경하도록 안내하는 것이 좋습니다. 그러면 새로 선택한 암호가 BCrypt를 사용하여 자동으로 해시되고 사용자가 일치하는 번거 로움을 덜어줍니다. MD5 해시 과거에는 많은 회사에서이 작업을 수행했기 때문에 사용자에게는 놀라운 일이 아닙니다.

    강력한 Forgot Password 기능이 있다면 MD5와 전혀 일치하지 않을 수도 있습니다. 이전의 MD5 해시 암호로 로그인하는 사용자가 실패하게하고 암호 기억 기능을 사용하여 새 암호를 만들도록 요청합니다 (어쨌든 BCrypt로 암호화 됨).

  2. from https://stackoverflow.com/questions/31285604/switching-from-md5-to-bcrypt-with-spring-security by cc-by-sa and MIT license