인증/보안의 기초1 - HTTPS와 Hashing

Backend kwon·2023년 10월 16일
0

⚫HTTPS

현재 대부분의 웹사이트의 경우 HTTPS를 사용하고 있으며, 만약 HTTP를 사용하는 웹사이트에 접속했다면 Not Secure라는 메시지를 표시해 사용자가 해당 웹사이트와의 연결하는 것에 안전성 보장이 없다는 것을 알려줍니다.

HTTPS는 Hyper Text Transfer Protocol Secure Socket layer의 약자입니다. HTTP over SSL(TLS), HTTP over Secure라고 부르기도 합니다.
HTTPS는 HTTP 요청을 SSL 혹은 TLS라는 알고리즘을 이용해, HTTP 통신을 하는 과정에서 데이터를 암호화하여 전송하는 방법입니다.

그렇다면 HTTPS의 특징은 무엇일까요?

  • 첫째로는 제 3자가 서버와 클라이언트가 주고받는 정보를 탈취할 수 없도록 하는 것입니다.

데이터를 암호화하여 전송하는 HTTPS를 사용한다면 비밀번호와 같은 중요한 데이터가 유출될 가능성이 HTTP보다 현저히 적어집니다.

HTTPS에서는 클라이언트와 서버가 데이터를 암호화하여 주고받기 위해 비대칭키 방식과 대칭키 방식을 혼용하여 사용합니다.

서버와 클라이언트가 통신할 때, 대칭키 방식은 양쪽이 공통의 비밀 키를 공유하여 데이터를 암호화 및 복호화하는 것, 비대칭키 방식은 각각 공개키와 비밀키(개인키)를 가지고 상대가 나의 공개키로 암호화한 데이터를 개인이 가진 비밀키로 복호화하는 것을 의미합니다.

HTTPS에서는 대칭키를 주고받을 때는 비대칭키 방식으로 주고받도록 합니다.
또 클라이언트와 서버가 데이터를 주고받을 때는 대칭키를 사용합니다.

  • 두번째 HTTPS의 특징은 브라우저가 서버의 응답과 함께 전달된 인증서를 확인할 수 있다는 점입니다.
    (인증서는 서버의 신원을 보증하여 우리가 접속한 사이트가 해커가 정교하게 따라 한 가짜 사이트가 아님을 보장해 주는 역할을 합니다)

이때 이를 보증할 수 있는 제삼자를 Certificate Authority, CA라고 부릅니다.

CA는 인증서를 발급해 주는 엄격하게 공인된 기관들을 말합니다. 이러한 CA들은 서버의 공개키와 정보를 CA의 비밀키로 암호화하여 인증서를 발급합니다.

서버와 클라이언트 간의 CA를 통해 서버를 인증하는 과정과 데이터를 암호화하는 과정을 아우른 프로토콜을 TLS 또는 SSL이라고 말합니다. (*SSL과 TLS는 사실상 동일한 규약을 뜻하며 SSL이 표준화되며 바뀐 이름이 TLS입니다.)

 

⚫Hashing

해싱은 가장 많이 쓰는 암호화 방식 중 하나입니다.
복호화가 가능한 다른 암호화 방식들과 달리, 해싱은 암호화만 가능합니다.

해싱은 해시 함수(Hash Function)를 사용하여 암호화를 진행하는데
1. 항상 같은 길이의 문자열을 리턴합니다.
2. 서로 다른 문자열에 동일한 해시 함수를 사용하면 반드시 다른 결과값이 나옵니다.
3. 동일한 문자열에 동일한 해시 함수를 사용하면 항상 같은 결과값이 나옵니다.

 

❕레인보우 테이블과 솔트(Salt)

해시 함수를 거치기 이전의 값을 알아낼 수 있도록 기록해 놓은 표인 레인보우 테이블이 존재합니다. 레인보우 테이블에 기록된 값의 경우에는 유출이 되었을 때 해싱을 했더라도 해싱 이전의 값을 알아낼 수 있으므로 보안상 위협이 될 수 있습니다.

이때 활용할 수 있는 것이 솔트(Salt)로 해싱 이전 값에 임의의 값을 더해 데이터가 유출되더라도 해싱 이전의 값을 알아내기 더욱 어렵게 만드는 방법입니다.

솔트를 사용하게 되면 해싱 값이 유출되더라도, 솔트가 함께 유출된 것이 아니라면 암호화 이전의 값을 알아내는 것은 불가능에 가깝습니다.

 

그렇다면 왜 복호화가 불가능한 암호화 방식을 사용하는 걸까?

해싱의 목적은 데이터 그 자체를 사용하는 것이 아니라, 동일한 값의 데이터를 사용하고 있는지 여부만 확인하는 것이 목적이기 때문입니다.
(예를 들어 비밀번호를 데이터베이스에 저장할때 복호화가 불가능하도록 해싱하여 저장)

민감한 데이터를 다루어야 하는 상황에서 데이터 유출의 위험성은 줄이면서 데이터의 유효성을 검증하기 위해서 사용되는 단방향 암호화 방식입니다.

profile
백엔드개발자를 향해서

0개의 댓글