DB에 비밀번호를 암호화하여 저장하는 방법

짱구·2023년 10월 6일
3

사용자의 비밀번호를 암호화를 하는 이유

일반적으로 서비스들은 사용자가 회원가입을 할 때 정보를 데이터베이스에 저장하는데, 사용자의 정보를 그대로 저장하는건 좋지 않다.

왜냐하면 많은 사용자들이 동일한 비밀번호를 여러 서비스에서 사용하기 때문에 비밀번호를 암호화하면 서비스 사이의 공유된 비밀번호로 인한 보안 위험을 최소화할 수 있다.

암호화는 가능하지만 복호화는 불가능한 단방향 암호화 알고리즘을 사용하여 해커들이 비밀번호를 파악하지 못해야한다.

문제점

Rainbow table

레인보우 테이블은 해시 값을 복원하기 위한 공격 기법이다.

해시는 기본적으로 복호화가 불가능한 역함수로 계산되어 수학적으로 복원이 0에 수렴할만큼 어렵기 때문에 가능한 모든 경우의 수를 미리 테이블에 계산해놓고 그 안에서 원하는 값을 찾아내는 기법이다.

데이터베이스와 같은 자료에서 뽑아낸 해시값을 레인보우 테이블과 대조하여 평문을 찾고 사용자 정보를 탈취한다.

Salting

솔트는 비밀번호 보안을 강화하기 위해 사용되는 기술 중 하나로 각각의 비밀번호에 무작위의 값을 추가하여 해시 값을 생성한다.

이렇게 생성된 해시 값은 비밀번호와 일대일로 매칭되지 않기 때문에 레인보우 테이블 등의 공격 방법을 방지할 수 있다.

비밀번호에 솔트 값 추가되어 아예 다른 해시 값이 생성되기에 비밀번호 유출 시에도 공격자가 비밀번호를 알아내기 엄청나게 어려워진다.

암호화 방식

  1. 회원가입 시 사용자가 입력한 비밀번호와 랜덤으로 생성한 값을 준비한다.

  2. 입력 받은 비밀번호는 랜덤 값과 이어 붙힌 후 암호화하고 랜덤 값은 암호화 하지 않고 데이터베이스에 저장한다.

인증 방식

  1. 로그인 시 사용자가 입력한 아이디와 비밀번호를 전달 받는다.

  2. 유니크한 아이디를 기준으로 사용자의 정보(row)를 조회한다.

  3. 사용자가 입력한 비밀번호와 조회된 정보의 salt 값을 추출한다.

  4. 비밀번호와 salt 값을 더하여 암호화를 진행한다.

  5. 암호화된 비밀번호조회된 정보의 비밀번호 값을 매칭한다.

결과

Salting은 해킹을 방지하는 기술이라기보다 해킹 당했을 때 개인정보 보호를 위한 기술이기 때문에 Salting을 해서 사용자의 비밀번호를 저장하게 된다면 데이터베이스가 해킹을 당해 사용자의 개인정보가 유출이 되어도 비밀번호를 파악할 수 없게 된다!

profile
코드를 거의 아트의 경지로 끌어올려서 내가 코드고 코드가 나인 물아일체의 경지

0개의 댓글