Spring Security - BCryptPasswordEncoder 길이 제한

Record For a Better Life ·2023년 5월 10일
1

스프링 시큐리티에서는 다양한 패스워드 암호화 방식을 사용할 수 있는데,
그 중 가장 대중적으로 사용되는 BCryptPasswordEncoder 라이브러리를 적용하려고 했다.
하지만 테스트를 하던 중, 패스워드 암호화 과정에서 문제가 있는 것을 발견했다.

우리 서비스에서 비밀번호는 회원의 고유키를 통해 자동으로 구성되는데,그 고유키는 80자 이상의 긴 값을 저장한다.
암호화 방식을 적용하는 과정이 잘못된 부분이 있었던 것은 아니다.

https://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximum-password-length
여기서 같은 사례를 확인할 수 있었다.

the key argument is a secret encryption key, which can be a user-chosen password of up to 56 bytes (including a terminating zero byte when the key is an ASCII string).

BCryptPasswordEncoder는 최대 56 bytes까지만 암호화를 시킬 수 있다고 나와있다. 따라서 비밀번호는 55자까지로 제한할 수 있다고 나와있지만, 최대 암호화 가능 길이가 얼마인지에 대한 의견은 아직도 갈리는 것 같다.

길이가 긴 패스워드를 암호화하는 케이스의 경우 다른 라이브러리를 사용하는 걸 추천한다. 나는 Argon2PasswordEncoder로 대체했다.

BCryptPasswordEncoder를 좀 더 자세히 찾아보고 적용했으면 이런 결함이 생기지는 않았을 것 같은데, 다음 구현에서는 더 주의해야겠다.

profile
모든 것을 기록하는 벨로그 💻

0개의 댓글