본문 바로가기
관리자

Programming-[Backend]/Keycloak

keycloak 비밀번호 알고리즘 argon2, pbkdf2-sha256, 마이그레이션 필요 여부

728x90
반응형

 

keycloak 기본 설정

keycloak 25버전 이상의 기본 비밀번호 해싱 알고리즘은 argon2로 되어있다. argon2는 2015년 알고리즘 대회에서 우승한 알고리즘이고, 기존 알고리즘들을 보완하여 나온 최신의 알고리즘이다.

 

argon2에 대해

기존 알고리즘들은 해싱이 빠르고, 그만큼 해킹할 수 있는 brute force식 공격이 편했다. 그래서 salt를 추가하고, 해싱을 반복하여 해킹 시도 한 번에 들어가는 시간이 늘어나도록 하였다. 그런데, 성능을 위해 빠른 해싱을 했다가 다시 시간이 늘어나도록 하는 것은 비효율적이고 동적이지도 못했다. 이에 따라 argon2와 같은 알고리즘은, 해싱을 시도하는 컴퓨터의 cpu, memory 등 리소스를 자동으로 탐색하고 그에 맞게 해싱 반복 횟수를 조절하여 환경에 따라 최적화되도록 하는 알고리즘이다.

 

대한민국 기준

keycloak에서는 argon2가 디폴트이나, 한국의 한국 인터넷 진흥원(KISA)나, 국정원 등에서 표준으로 삼는 알고리즘에는 argon2가 없다. 그 이전 버전의 pbkdf2-sha256 등만 아직까지도 사용하고 있다. 따라서 한국에서 서비스를 운영하기 위해서는 argon2를 변경해야한다.

 

알고리즘 확인하기

keycloak의 master realm에서 provider info에서 'password-hashing'로 검색해보면 아래와 같이 기본적으로 제공해주는 알고리즘들을 확인할 수 있다.

 

여기서 bcrypt 알고리즘은 spring security에서 주로 사용하는 알고리즘이다.

 

 

알고리즘 변경하기

 

알고리즘을 변경할 realm을 선택하고, Authentication -> Policies -> add policy -> password hashing -> Hashing Algorithm을 선택하여 직접 타이핑하여 변경해주면 된다. 만약 오타가 발생하면 save를 눌렀을 때 지원하지 않는 알고리즘이라고 뜬다.

 

 

마이그레이션 필요 없음

만약 이미 argon2로 가입된 사용자들이 있는 상태에서 알고리즘을 변경하게 되면 어떻게 될까? 기존 사용자들은 로그인을 못하게 되는것이고 마이그레이션이 필요할까?

 

keycloak이 알아서 처리해준다.

keycloak DB의 user_entity 테이블에 보면 user 정보들이 있다. 그리고 여기서의 id 값을 갖고, credential 테이블에서 user_id로 검색하여 해당 유저의 credential_data 컬럼에서의 "algorithm" 값을 보면 어떤 알고리즘을 사용하여 비밀번호가 해싱되었는지를 알려준다.

 

아래 방식으로 알고리즘 업데이트가 진행된다.

 

관리자가 알고리즘을 argon2에서 pbkdf2-sha256으로 변경 -> argon2로 해싱한 유저가 로그인 -> argon2로 해싱하여 로그인을 처리하고, 입력된 값을 다시 pbkdf2-sha256으로 해싱하고 credential 테이블에 덮어쓰기

 

 

따라서 알고리즘을 바꿨다고 해서 유저가 로그인이 안되는 걱정을 할 필요는 없다.

 

그리고 소셜 로그인은 위 내용과는 상관이 없다. 비밀번호를 소셜 로그인을 해주는 주체인 google 등에서 해주기 때문이다.

 

다만 만약 이 테이블 전체를 다른 DB로 옮겨야 한다면, 그 때는 algorithm을 모두 일치시키도록 변경해야할 수도 있겠다.

728x90
반응형