: HTTP 프로토콜을 SSL/TLS 프토토콜을 사용하여 데이터를 암호화 해 전송하는 방법
SSL이 표준화되며 바뀐 이름이 TLS라 사실상 동일한 규약
기존의 HTTP 요청은 요청이 들어가는 시점에 누군가 해당 요청(정보, Request Body가 담긴)을 탈취해 개인 정보가 유출되는 경우가 발생했다. HTTPS의 방식을 사용함으로써 정보가 유출되더라도 해당 정보 자체가 암호화 되어 있어 내용을 알아볼 수 없도록 한다.
데이터의 무결성이란 데이터가 내,외부 요인으로 변경되지 않고 보호된 상태를 의미한다.
HTTP요청으로 'Hello World!'라는 메세지를 전송했다고 가정했을 때, 누군가 메세지를 중간에서 탈취해 'Hi World!'로 바꾸지 못하게 한다.
이는 암호화로 이루어진 데이터를 해커가 복호화를 하지 못해 가능한 일!
HTTPS는 SSL를 이용하여 데이터를 암호화한다고 했다. 그것에 그치지 않고 CA를 통해 발급 받은 SSL 인증서는 데이터의 제공자(서버)의 신원을 보장하고, 확인할 수 있다.
💡CA(Certificate Authority)
인증서를 발급해주는 공인된 기관을 말한다. CA는 서버의 공개키와 정보를 CA의 비밀키로 암호화하여 인증서를 발급한다.
클라이언트에게 요청을 받으면 서버는 도메인과 함께 인증 받은 도메인이 담긴 인증서를 클라이언트에게 응답 데이터로 보낸다.
클라이언트는 인증서에 있는 도메인과 서버가 보낸 도메인이 일치할 경우 요청에 대한 응답이 정상 실행된다.
클라이언트의 요청으로부터 생성된 서버의 응답데이터를 중간에 탈취해 도메인이 변경된 경우, 클라이언트 측에서 해당 도메인과 인증서의 도메인을 비교하여 일치하지 않으면, 사용자에게 경고를 보낸다.
만약 인증서도 중간자의 공격으로 변경사항이 생기거나, 가짜 인증서를 응답데이터를 받게된다면 브라우저에 미리 내장되어 있던 CA 리스트를 통해 인증된 CA에서 발급 받은 인증서인지 일차적으로 확인한다. 잘못된 인증서일 경우에는 브라우저 창에 경고 메세지가 뜬다.
☝️ HTTPS에서는 대칭, 비대칭 키 암호화 방식을 다 사용한다.
Hand-Shake
과정을 거치고 서버는 클라이언트에게 자신의 개인 키로 암호화된 인증서와 함께 서버의 공개 키를 보내 요청 시, 자신의 신원을 보장한다.서버는 자신의 개인 키로 클라이언트가 보내온 데이터를 복호화한다.
클라이언트의 대칭 키를 가진 서버는 대칭 키로 암호화한 응답 데이터를 보내고 클라이언트는 자신의 대칭 키로 복호화 하여 데이터를 확인한다.
클라이언트와 서버의 Hand-Shake
과정 종료된 후, 클라이언트의 대칭 키로 소통이 가능해진다.
✨ 대칭 키는 암호화, 복호화를 하나의 키를 가지고 사용하기 때문에 보완에 취약하다는 단점이 있었다. 하지만 비대칭 키와 사용하게 되면 그 단점을 보완할 수 있으며 대칭 키의 빠른 속도의 장점을 적극적으로 사용할 수 있다.
💡 해시 함수(Hash Function)
키(Key)값을 값(Value)이 저장되는 주소 값으로 바꾸기 위한 수식
당연하게도 해시 값을 해독(decoding)할 때는 많은 시간이 걸리도록 하는 것이 좋다. 그러나 해시 값을 생성하는데 많은 시간이 소요된다고 한다면, 사용자는 로그인 하나를 하는데에도 많은 시간을 소요할 수 밖에 없다
으 로그인 짱오래걸리면 짱 짜증남🤬
극히 낮은 확률로 서로 완전히 다른 값이 Hashing을 거쳐 같은 해시 값을 가지게 되는 경우가 있다. 이러한 상황이 최대한 발생하지 않도록 알고리즘을 짜는 것이 좋다
☝️ 해당 상황을 방지하는 알고리즘들이 이미 배포되어 있으니 걱정하지 말 것
부분이 변경되더라도 해시 값으로 알고리즘이 추측될 수 있으므로 수정 한번에 새로운 해시값을 가질 수 있도록 해야 한다.
알고리즘을 추측하기 어렵게 하기 위해 입력 받은 데이터의 길이가 짧든, 길든 모두 같은 길이로 암호화 해야 한다.
☝️ 참고할 Hashing 알고리즘 : SHA1, SHA256
암호화 해야 하는 값에 어떤 별도의 값을 추가하여 결과를 변형하는 것을 말한다.