본문 바로가기
Http

https + id/pw rsa 암호화

by ybs 2021. 1. 31.
반응형

로그인 페이지를 재개발 하면서 전체적인 흐름을 정확히 알 필요가 생겼다.

https 를 이용해 요청/응답 데이터가 암호화되는데, id/pw 입력 데이터를 한번 더 암호화 하면서 복잡도가 증가했기 때문이다.

 

https 통신

먼저 기본적인 https 메커니즘부터 살펴보자.

 

처음에 YBS 서버가 CSR 파일을 만들어서 CA 인증기관 에 요청해야 한다. 인증서 등록 작업(구매)이다.

CSR 파일을 생성할 때 YBS 비밀키, YBS 공개키를 만들게 되고 YBS 서버 인증서를 위한 정보를 입력해 파일을 만든다.

$ openssl genrsa -rand rand.dat -des3 2048 > ybs.key.pem
$ openssl req -new -key ybs.key.pem > ybs.csr.pem
// 이후 csr 정보 입력 작업을 수행하게 되고 ybs.csr.pem 파일이 생성된다.

 

CA 인증기관으로 여러 업체가 있는데 대표적으로 시만텍이 있다.

그리고 YBS 서버에서는 https 통신을 위해 YBS 비밀키와 2번에서 전달받은 cert.pem을 등록한다.

 

다음은 https handshake 의 대략적인 과정이다.

본 요청을 수행하기 전 과정이다. 

 

아까 브라우저는 기본적으로 CA 인증기관 업체들의 공개키들을 갖고 있다고 했다. 위의 그림에서 응답으로 온 CA 비밀키로 암호화된 YBS 서버 인증서 정보 + YBS 공개키는 브라우저가 갖고 있는 CA 공개키로 복호화가 가능하다.

이 과정을 통해 YBS 서버가 정상적으로 CA 인증을 받았다는것을 확인할 수 있다.

 

그리고 앞으로 통신에서 쓸 키로 대칭키를 생성한다(이 과정에 대한 자세한 설명은 생략). 공개키 방식은 암/복호화에 리소스가 더 많이 필요하기 때문에 본 요청에서는 대칭키 방식으로 사용한다.

 

새롭게 만든 대칭키를 YBS 공개키로 암호화해서 YBS 서버로 전달한다.

 

YBS 서버가 복호화해서 앞으로 본요청 응답 할 때 데이터를 대칭키로 암호화한다. 

 

 

id/pw rsa api 를 이용한 암호화

여기서 추가적으로 로그인 할 때 id/pw 정보를 또 암호화한다.

먼저 전체적인 프로세스는 다음과 같다.

 

클라이언트에서 로그인을 위한 페이지를 요청할 때 YBS 서버는 페이지와 암호화 정보를 추가로 제공해줘야 한다.

 

{
"apiKey": "",
"modulus": "",
"exponent": ""
}

 

필수적인 정보는 위 3개 필드이고 추가적인 필드들은 필요에 따라 추가하면 된다.

apiKey 값은 이름을 그냥 저렇게 지은건데 나중에 복호화할 때 비밀키를 찾기 위한 용도다.

 

클라이언트 js 에서는 전달받은 modulus 와 exponent 를 갖고 rsa 공개키를 만들어 id/pw 를 암호화 시켜 서버에 전송한다.

그리고 기존에 입력했던 id/pw 값은 지워버린다.

<input name="id" type="text" id="id" />
<input name="pw" type="password" id="pw" />
암호화된 id : <input type="hidden" name="eid" id="eid" value="">
암호화된 pw : <input type="hidden" name="epw" id="epw" value="">
apiKey 값 : <input type="hidden" name="apiKey" id="apiKey" value="">

 

그럼 일반 id/pw 값은 비어있고 암호화된 id/pw 가 전송되게 된다. 물론 https 로 인해 데이터 자체는 또 암호화 된다.

 

 

 

반응형