인프런 커뮤니티 질문&답변

shef님의 프로필 이미지
shef

작성한 질문수

모든 개발자를 위한 HTTP 웹 기본 지식

Stateful, Stateless

https와 stateless에 관해서 질문 드립니다.

작성

·

310

6

1.  https에서 공개키 방식을 이용해서 직접 메세지를 암호화하지 않는 이유가 공개키 방식을 사용하면 암호화하고 복호화하는 속도가 느리기 때문에 상대적으로 속도가 빠른 대칭키 방식을 사용한다고 알고 있습니다.

그런데 https도 http이고 그러면 stateless 특징을 갖고있어서 데이터를 한번씩만 주고 받으면 어차피 끊어질텐데 굳이 대칭키 방식으로 데이터를 주고 받는 이유가 뭘까요? https에서는 stateless 특징이 적용되지 않는건가요?

답변 1

11

안녕하세요. 손지우 님, 공식 서포터즈 codesweaver 입니다.

.

암호화는 과거부터 현대에 이르기까지 메시지를 제3자에게 노출되지 않도록 하기 위해 사용합니다. 암호화의 방식은 아시다시피 두가지가 있습니다.

1 대칭키: 암호화와 복호화에 동일한 키를 사용.

2 비대칭키: 암호화와 복호화에 다른 키를 사용.

.

대칭키의 문제

대칭키의 문제는 A가 B에게 암호화된 메시지를 전달할 때 이를 풀 수 있는 '키'도 같이 전달해야 한다는 점입니다. 만약 이 메시지를 중간에 누가 가로챈다면, 암호를 풀 수 있는 중요한 키도 같이 빼았기게 됩니다.

.

비대칭 키의 컨셉

이런 문제를 해결하기 위해 비대칭 키 암호화를 사용합니다. 비대칭 키 암호화는 '공개키'(public key)와 '비공개 키'(private key)를 사용합니다. 핵심은 '공개 키'로 암호화 한 문서는 '비공개 키'로만 복호화가 가능하다는 점입니다. 그래서 공개 키는 모두에게 노출하되, 비밀 키는 외부에 노출하지 않도록 해야 합니다.

.

HTTPS 통신 과정

  1. 클라이언트가 서버에 접속을 요청합니다.

  2. 서버가 인증서를 클라이언트에 전달합니다. (여기에 서버의 공개 키를 포함합니다).

  3. 클라이언트는 이 인증서를 검증하고 서버의 '공개 키'로 자신의 요청 데이터를 암호화 해서 전송합니다.

    3-1. 이 응답엔 클라이언트의 공개 키가 포함되어 있습니다.

  4. 서버는 암호화된 데이터를 자신의 '비밀 키'로 해독하여 적절한 처리를 진행합니다.

  5. 서버는 클라이언트의 '공개 키'로 자신의 응답값을 암호화 하여 전송합니다.

  6. 클라이언트는 서버의 응답을 자신의 '비밀 키'로 해독하여 처리합니다.

.

느려도 HTTPS 암호화를 사용하는 이유

만약 해커가 중간에 이런 요청과 응답을 탈취했다고 가정하겠습니다. 그렇다면 해커는 암호화 된 데이터와 '공개 키'를 손에 넣을 수 있습니다. 그러나 비밀 키는 손에 넣을 수 없습니다. (요청과 응답 어느쪽에서도 비밀 키를 전달한적이 없기 때문입니다) 해커가 탈취한 데이터를 복호화 하기 위해선 서버를 추가적으로 해킹해야 하니 메시지를 탈취하기 위한 난이도가 높아집니다.

.

HTTPS는 이런 암호화 과정이 추가 되었을 뿐, 그 외에 동작방식은 HTTP와 동일합니다. stateless 특징이 적용되는 것도 동일합니다.

.

세션 키

대칭키를 이용한 방법이라고 말씀하신 것은 세션 키(Session key)를 말씀하신것 같습니다. 저도 세션 키에 대해서는 답변을 위해 조사하다 알게 되어 정확하지 않을 수 있으나, HTTPS 로 인증 과정을 거친 이후, 세션 키를 발행하여 대칭 키 암호화를 사용하는 것으로 보입니다. 말씀하신 것처럼 대칭키 암호화가 속도면에서 월등히 빠르기 때문입니다. 속도를 최적화 하기 위한 방법중 하나라는 생각이 듭니다.

세션키와 HTTPS인증에 대한 자세한 이미지와 내용은 아래의 링크를 참조하시기 바랍니다. 

What is a session key and how does it work? (techtarget.com) 

.

감사합니다.

shef님의 프로필 이미지
shef

작성한 질문수

질문하기