로그인할때 패스워드를 평문(PlainText)으로 서버에 보낼시 보안상 문제가 되지 않을까? 라는 질문에서 부터 시작되었다.

POST... HTTPS...를 생각하더라도 패스워드를 평문으로 다루면 안될것 같다는 막연한 상상(망상인가)... 검증도 안해보고;;

 

0. 기존에 구현한 로그인 순서

1. 클라이언트로 아이디와 비밀번호를 평문형태로 서버에 보낸다. 

2. 아이디를 기준으로 DB에서 패스워드(Bcrypt암호화)를 가져온다.

3. 가져온 DB패스워드를 클라이언트에서 받은 평문비밀번호와 아래와 같이 비교한다. ( PHP )

    if ( password_verify("클라이언트에서 받은 패스워드", "DB에서 가져온 패스워드") ) {
        echo '패스워드 일치';
    } else {
         echo '패스워드 불일치';
    }

 

4. 패스워드가 일치하면 DB에서 나머지 정보를 가져온다.


1. 클라이언트에서 API 요청시 평문으로 보내고 있는 점

 

암호화된 패스워드를 PHP로 보내고 PHP에서 복호화한 패스워드를 앞서 말한 password_verify함수로 비교하면 해결할 수 있지 않을까?

 

1-1.  Bcrypt 방식으로 데이터 베이스에 저장되어 있는 유저의 패스워드 데이터

 

sha-256과 같은 암호화 알고리즘으로 구현할때는 서버에 저장된 해시값과 단순 비교만 하면 문제없이 구현할 수 있었다.

그러나 DB에 저장된 패스워드값이 Bcrypt로 저장되어 있기 때문에 단순 비교가 안되었다. 그래서 password_verify 함수로 비교한 것이다.

"Bcrypt는 패스워드를 해싱할 때 내부적으로 랜덤한 솔트를 생성하기 때문에 같은 문자열에 대해서 다른 인코드된 결과를 반환한다"
https://pjh3749.tistory.com/258 [JayTech의 기술 블로그]

 

2. 그럼 암호화와 복호화가 가능한 알고리즘은 어떤것이 있을까?

 

주변에 이문제에 대해 도움을 요청했고, RSA알고리즘을 사용해 보는건 어떻겠냐는 의견을 받았다.

RSA에 대해 공부한적이 없어 RSA를 구글링하기 시작했다.

 

그렇게 습득한 얕은 지식으로 개인키와 공개키를 생성할 수 있었다.

 

...

 

( 아직 이해가 부족해서 더 공부해야 된다 )

 

3. 앞으로 해야할 TODO

이제 적용하는 일이 남았다.

1. 클라이언트는 공개키를 통해 평문으로된 패스워드를 암호화한다.

 

2. 암호화된 패스워드를 서버(PHP)로 보낸다.

 

3. PHP에서 가지고 있는 개인키로 암호화된 패스워드를 복호화한다.

 

4. 이제 복호화된 패스워드를 password_verify 함수를 통해 검증하면 된다.

 

5. 검증이 완료되면 나머지 유저의 정보를 반환 한다.

 

 

 

4. 마무리

여기 까지가 내가 생각한 패스워드를 안전하게 전달해서 로그인하는 방법이다.

내가 생각한 방법이 문제가 되거나, 현업에서 쓰이는 보편화된 래퍼런스가 있는지 찾아봐야 겠다. 

 

이 포스팅을 보는 분들중 아시는분이 있다면 댓글을 달아 주시면 참 고마울 것 같다 ^^.

 

 

 

 

 

 

참고

www.crocus.co.kr/1203

 

RSA 암호 알고리즘

이 게시물의 내용은 https://www.youtube.com/watch?v=kGUlfVpIfaQ 위의 링크를 기반으로 제작하였습니다. 문제가 된다면 삭제조치 하겠습니다. 1. RSA 암호 알고리즘이란? Rivet, Shamir, Adelman 세사람의 첫이..

www.crocus.co.kr

https://pjh3749.tistory.com/258

 

[Spring] Bcrypt를 이용하여 비밀번호를 암호화하여 저장하는 방법 - 실제 프로젝트 적용기

암호화를 이용하여 원문을 해시화하는 간단한 방법을 찾던 중 Devglan 사이트에서 괜찮은 칼럼을 찾았다. https://www.devglan.com/spring-mvc/storing-hashed-password-database-java 다음 내용은 위 칼럼을 번역..

pjh3749.tistory.com

 

 

 

+ Recent posts