inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Stateful, Stateless

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

393

shef

작성한 질문수 22

6

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

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

https network 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) 

.

감사합니다.

캐시 관련 질문입니다.

0

616

1

ETag 질문입니다.

0

727

1

캐시의 설정 주체

0

534

1

영속쿠키 질문입니다.

0

503

1

협상(accept-language)

0

686

1

에러 코드의 구현 주체

0

438

1

웹서버가 구현?

0

596

1

필수헤더?

1

560

1

Host와 Port

0

774

1

다른 도메인이 같은 포트를 사용하는 경우

0

1259

1

표준 헤더와 임의 헤더

0

534

1

POST 등록 후 Location 헤더

0

569

1

프로세스의 상태가 변경되는 경우에 Post 사용

1

1809

1

지속연결에 대해서.

0

692

1

제가 아는 쿼리 파라미터 개념이 맞는지 확인 부탁드립니다.

0

593

1

캐시 내용중 no cache 일때

0

358

1

DNS 서버 관련 질문

1

748

1

캐시로 저장된 파일의 유효기간은 얼마나 되나요?

0

662

1

웹브라우저 요청흐름 질문입니다.

0

847

1

캐시 무효화 질문드립니다

0

561

1

리다이렉트와 리다이렉션 차이?

0

2595

1

쿠키 및 세션 관련 질문드립니다

0

586

1

HTTP 메서드 ( HTTP 메서드의 속성 파트 ) 강의의 멱등 내용에 대하여 질문드립니다.

0

1644

1

header 나 gzip으로 데이터 보낼떄 데이터는 base64로 인코딩되서 가는 건가요?

0

480

1