[인증/보안] 기초

hosik kim·2022년 2월 15일
0
post-thumbnail

📌 HTTPS


: HTTPS는 Hyper Text Trnasfer Protocol Secure Sokcet layer의 약자다.

  • HTTPS는 HTTP 요청을 SSL(Secure Sockets Layer) 혹은 TLS(Transport Layer Security) 라는 알고리즘을 이용해, HTTP 통신을 하는 과정에서 내용을 암호화하여 데이터를 전송하는 방법이다.

SSL: 보안 소켓 계층(Secure Sockets Layer, SSL)

SSL은 웹사이트와 브라우저(혹은 , 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결 보안을
유지하는 표준 기술이다. 이는 해커가 개인 정보 및 금융 정보를 포함한 전송되는 모든 정보를 열람하거나
춤치는 것을 방지한다.


TLS: 전송 계층 보안(Transport Layerw Security, TLS)

TLS는 가장 최신 기술로 더 강력한 버전읜 SSL이다. 그러나 SSL이 더 일반적으로 사용되는 용어이기에,
여전히 보안 인증서는 SSL이라 불린다.

🔸인증에서 HTTPS 프토로콜을 사용해야만 하는 이유?

  • HTTP보다 상대적으로 안전한 방법이다.
  • 데이터 제공자의 신원을 보장받을 수 있다.

🔸데이터 제공자의 신원을 확인하고 보장 받는 게 인증에서 중요한 이유?

  • 클라이언트는 데이터 제공자가 제공해 준 데이터를 사용할 수 밖에 없다.
    클라이언트는 서버에 데이터 요청을 하고 이후 받은 데이터를 이용해서 화면을 렌더링하는 등의 작업을 해야한다.

  • 그렇기 때문에 요청 및 응답을 중간에서 가로채는 중간자 공격에 취약하다.
    '중간자 공격'은 클라이언트와 서버 사이에서 공격자가 서로의 요청, 응답의 데이터를 탈취 및 변조하여 다시 전송하는 공격이다.

    데이터가 중간에 다른 도메인을 거쳐서 전달되기 때문에 서버가 해당 데이터는 https://example.com 도메인에서 제공되었습니다.라는
    추가 데이터를 응답 객체에 실어 보낸다면 '중간자 공격'으로 인해 다른 도메인에서 데이터를 받은 클라이언트는 데이터를 제공한 도멘인과 전달받은 낸용의 도멘인을 비교하여 '중간자 공격'이 존재하는지 아닌지 확인할 수 있다.

    물론 중간자 공격으로 인해 이런 추가 데이터 또한 변조할 수 있따.
    따라서 해당 데이터를 암호화 하는 작업이 필요하다.

📌 암호화


HTTPS 프로토콜의 특징 중 하나는 암호화된 데이터를 주고받기 때문에, 중간에 인터넷 요청이 탈취되더라도 그 내용을
알아볼 수 없다.

데이터를 암호화하여 전송하는 HTTPS 프로토콜을 사용한다면 비밀번호와 같은 주용한 데이터가 유출될 가능성이
HTTP 프로토콜보다 현저히 적어지게 된다.

암호화는 일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여 해당 방식에 대한 정보를 소유한 사람을 제외하고
이해할 수 없도록 알고리즘 을 이용해 정보를 관리하는 과정이다.

단순한 알고리즘의 예로, 문자열을 3씩 넘긴 문자열로 저장하고, 응답할땐 문자열을 -3씩 넘긴 문자열로 응답하는 간단한 알고리즘이 있을 수 있다.

서버는 이 알고리즘을 갖고있고, 클라이언트로부터 요청이 오고, 그 알고리즘을 토대로 DB에 사용자 정보를 저장한다.
이후 응답할 때, DB에서 정보를 가져올 때, 서버는 복호화를 통해 인증 정보를 파악후, 클라이언트로 응답을 보낸다.

📌 인증서


  • HTTPS 프로토콜의 또 다른 특징중 하나는 브라우저가 응답과 함께 전달된 인증서 정보를 확인할 수 있다는 점이다.

  • 브라우저는 인증서에서 해당 인증서를 발급한 CA 정보를 확인하고 인증된 CA가 발급한 인증서가 아니라면 아래와 같이
    화면에 경고차을 띄워 서버와 연결이 안전하지 않다는 화면을 보여준다.

  • 이렇게 브라우저는 인증서의 도메인과 데이터를 제공한 제공자의 도메인을 비교할 수 있기 때문에 인증서의 도메인 정보와
    데이터 제공자의 도메인 정보가 다른 '중간자 공격'을 감지하여 보안 위협으로부터 사용자 및 사용자의 데이터를 보호할 수 있다.

  • 이런 경고를 직접 보여줌으로써 브라우저들은 인증된 CA가 발급한 인증서를 이용하여 데이터를 제공하는 안전한 서버를
    사용할 수 있게 사용자를 유도한다.

    Wikipedia - 중간자 공격


📌 Hashing


: 어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것

🔸해싱의 특징 3가지

  1. 모든 값에 대해 해시 값을 계산하는데 오래 걸리지 않아야한다.

    • 해싱 과정이 오래 걸리면 유저들은 불편함을 느낄 수 밖에 없기 때문이다.

  2. 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다.

    • 극히 낮은 확률로 다른 문자열이 같은 해시 값을 경우가 있다. 이를 방지하기 위한
      알고리즘은 대부분 구현이 되어있다.

  3. 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야한다.

    • 암호가 마지막 자리를 빼고 전부 같더라도, 아예 다른 해시 값을 가져야한다.

    대표적인 알고리즘으로 SHA1, SHA256 등이 있다.

📌 Salt


: 암호화해야 하는 값에 어떤 별도의 값 을 추가하여 결과를 변형하는 것.

  1. 암호화만 해놓는다면 해시된 결과가 늘 동일하다. 그래서, 해시된 값과 원래 값을 테이블로 만들어서
    decoding하는 경우가 생긴다.

  2. 이를 방지하기 위해, 원본 값에 임의로 약속된 별도의 문자열 을 추가하여 해싱을 진행한다. 만약,
    알고리즘이 노출되더라도 기존 해시값과 전혀 다른 해시값이 반환되기 때문에 원본 값을 보호할 수 있다.

  3. 기존 값 - (암호화할 값) => (해싱된 값)
    Salt - (암호화할 값) + (Salt 값) => (해싱된 값)

    🔸Salt 사용시 주의할 점

  • Salt는 유저와 패스워드 별로 유일한 값을 가져야 한다.
  • 사용자 계정을 생성할 때와 비밀번호를 변경할 때마다 새로운 임의의 Salt를 사용해서 해싱해야한다.
  • Salt는 절대 재사용해선 안된다.
  • Salt는 DB의 유저 테이블에 같이 저장되어야한다.
profile
안되면 될 때까지👌

0개의 댓글