HTTPS는 HyperText Transfer Protocol Secure Socket layer 의 약자이며, HTTP over SSL(TLS), HTTP over Secure라고 부르기도 한다.
HTTPS는 HTTP 요청을 SSL 혹은 TLS라는 Algorithm을 활용해서 HTTP 통신을 하는 과정에서 내용을 암호화하여 데이터를 전송하는 방법이다.
HTTPS를 이용하면 데이터 제공자의 신원을 보장받을 수 있으며, 이렇게 신원을 확인하고 보장받는 것이 중요한 이유는 다음과 같다.
- 클라이언트는 데이터 제공자의 데이터를 어떻게든 사용하게 되어 있다.
- 그렇기에 요청 및 응답을 중간에서 가로채는 중간자 공격 에 취약해진다.
- 데이터는 중간에 다른 도메인을 거쳐서 전달되기 때문에 어떤 도메인에서 제공되었는지 에 대한 추가 데이터를 응답 객체에 싣는다면, 클라이언트는 자신이 제공한 도메인과 전달받은 내용의 도메인을 비교하여 '중간자 공격'이 있었는지 판별할 수 있게 된다.
- 하지만 '중간자 공격'은 이러한 추가 데이터 또한 변조할 수 있으므로, 데이터를 암호화시키는 작업이 필요하다.
암호화
HTTPS 프로토콜의 특징 중 하나는 암호화된 데이터를 주고받기 때문에, 중간에 인터넷 요청이 탈취되어도 그 내용을 알아볼 수 없게 한다는 점이다.
내용이 암호화되어 전송되기 때문에 정확한 key로 복호화하기 전까지는 어떤 내용인지 알 수 없다.
Hashing
암호화하는 방법의 일종이다.
Hashing은 특정 문자열에 '임의의 연선'을 적용하여 다른 문자열로 변환하는 작업이며, Algorithm을 최소화하기 위해 다음과 같은 사항들이 요구된다.
- 모든 값에 대해 해시 값을 계산하는 시간이 오래 걸리지 않아야 함
- 모든 값은 고유한 해시 값을 가짐
- 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 함
대표적인 해시 Algorithm으로는 SHA1이 있다.
Salt
암호화해야 하는 값에 '별도의 값'을 추가하여 결과를 변형
- 암호화만 할 경우, 해시된 결과는 늘 동일 → 해시된 값과 원래 값을 레인보우 테이블로 만들어서 decoding하는 경우가 생길 수 있음
- 원본값에 임의로 약속된 '별도의 문자열'을 추가해서 해시를 진행하면 기존 해시 값과 전혀 다른 해시 값이 반환되어, Algorithm이 노출되어도 원본 값을 보호할 수 있음
Salt에는 몇 가지 유의사항이 있다.
- Salt는 유저와 패스워드 별로 유일한 값을 가져야 함
- 사용자 계정 생성 및 비밀번호 변경 때 마다 새로운 임의의 Salt를 사용해서 해싱해야 함
- Salt는 절대 재사용하지 말아야 함
- Salt는 DB의 유저 테이블에 같이 저장되어야 함
인증서
HTTPS의 또 다른 특징 중 하나는 브라우저가 응답과 함께 전달된 인증서 정보를 확인할 수 있다는 점이다.
브라우저는 인증서에서 해당 인증서를 발급한 CA 정보를 확인하고, 인증된 CA가 발급한 인증서가 아니라면 화면에 경고창을 띄워 서버와 연결이 안전하지 않다는 내용을 보여준다.
이렇듯 브라우저는 인증서의 도메인과 데이터 제공자의 도메인을 비교할 수 있기 때문에 '중간자 공격'을 감지해서 보안 위협으로부터 사용자 및 사용자의 데이터를 보호할 수 있게 된다.
'Web > Security' 카테고리의 다른 글
OAuth 2.0 (0) | 2021.09.24 |
---|---|
Token (0) | 2021.09.24 |
Session (0) | 2021.09.24 |
Cookie (0) | 2021.09.24 |