비밀번호 암호화(Bcrypt방식)로 회원가입, 로그인 작업

2022. 1. 17. 08:54Framework

반응형

회원의 비밀번호 그 자체(평문)가 DB에 보관되면 x

비밀번호 저장 암호화작업을 통해서 어려운 암호문으로 보관

 

 

평문에서 암호문으로 작업하는 것이 암호화

반대는 복호화

 

예전에는 비밀번호가 복호화가 가능.

복호화는 암호문으로 평문 유추가 가능하기 때문에

비밀번호찾기 할 때 입력했던 비밀번호를 그대로 알려줌

 

해독이 가능한 암호화는 보안문제로 정책이 바뀜.

복호화가 가능한 암호화방식 쓰지마

해독이 안 되는, 오직 암호화만 가능한 암호만 써

그 때부터 사이트 비밀번호찾기에서는

기존에 썼던 비밀번호를 알려주는 것이 아닌

새로운 비밀번호로 변경유도

 

오직 암호화만 가능한 방식을

SHA방식, 단방향 암호화 방식이라 함

 

그런데 이것마저 보안이 뚫림

 

SHA방식은 암호문이 정해져있기 때문에

샘플자료가 많아지면 암호화만으로 평면 유추가 가능

ex) 1은 xx라하면 2는 xe라고 할 때 xxxe는 12라는 것

 

 

이런 단점을 가진 SHA방식에서 개선된 방식이 Bcrypt방식

Bcrypt방식은 SHA방식과 다르게 복호화가 가능

복호화가 가능하면 보안이 취약하다는 건데...?

 

salting기법으로 보안 강화

평문 뒤에 랜덤값이 붙고 나서 암호화 작업

ex) 평문이 1234라 칠 때 1234 + 545387(랜덤값)

 

복호화를 하더라도 어디서부터 어디까지

사용자가 입력한 값이고 랜덤값인지 파악이 어려움

 

보안에 집착이 강한 OpenBSD회사에서도

기본적으로 비밀번호 매커니즘으로는 Bcrypt방식 사용

 

Bcrypt방식은 간단하게 메소드 호출로 사용가능 

스프링 시큐리티 모듈이란 곳에서 제공

pom.xml을 이용해서 라이브러리를 먼저 추가해야 함

 

 

 

mvn리파지토리에서 spring-security 검색 후

spring security core, web, config 코드 복붙

 

 

BcryptPassWordEncoder 직접 객체생성하지 않고

필요할 때마다 사용되도록 스프링에서 빈 등록

서버구동과 동시에 바로 빈으로 등록이 되고싶다하면

서버 구동시 제일 처음 실행되는 web.xml을 거쳐서

그 다음 읽는 root-context.xml에 빈 등록해도 되지만

스프링 시큐리티 관련된 빈들은 별도 다른 파일에 따로 등록을 함

 

webapp/WEB-INF/spring에 있는 xml파일들을 보면

S와 콩이 그려진 파일. => 빈등록이 가능한 파일로

일반 xml파일이 아닌 Spring Bean Configuration File로 생성

생성할 때 beans, security 체크

security는 라이브러리를 추가하지 않으면 보여지지 않음

 

체크한 것이 스키마로 기술되어있음

그 아래에 스프링 시큐리티 관련된 빈을 등록

이제 스프링이 필요한 순간에 생성해주고 필요 없을 때는 알아서 소멸시켜

<bean class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" id="bcryptPasswordEncoder" />

 

별도의 xml파일이기 때문에 읽혀지도록 세팅해야

서버 구동과 동시에 읽혀지는 web.xml파일에 기술

 

비크립트방식이 필요한 곳에 전역변수로 세팅

보통 회원가입과 로그인에 사용

 

회원가입에 비크립트방식 이용 시

1encode라는 메소드를 호출할 때 매개변수는 rawPassword

날 것 그대로 평문값을 전달하면 암호문으로 바꿔서 반환해줌

반환된 것을 String encPwd에 담고

2이 암호문을 DB에 보관하기 전에

멤버객체에 담긴 비밀번호를 암호문으로 바꿔줌

3인설트할 멤버객체 담아서 서비스단으로 전달

나중에 처리된 행수로 되돌아오니까 int result에 담아줌

 

 

로그인에 비크립트 방식 이용 시

DB에는 비밀번호가 암호문으로 보관되어있는데

로그인할 때 비밀번호는 평문으로 입력

이 때 matches라는 메소드를 호출해서 비교

 

matchse(평문, 암호문)

평문은 로그인 시 입력할 때의 비밀번호필드를 기술하고

암호문에는 db에 보관된 비밀번호필드를 기술

 

 

반응형