인증(Authentication)

이선호·2021년 10월 3일

인증(Authentication)

인증이란?
유저의 아이디와 비번을 확인하는 절차이다.
회원가입과 로그인하는 과정
즉, 내가 누구인지하는 확인하는 확인절차

Q.인증에 필요한 것들은 무엇이 있나요?

아이디, 이메일주소, 비밀번호 등이 있고
이중에서 가장 중요한 것은 비밀번호다!!

비밀번호 관리하는 방법

  • DB에 저장 시 개인 정보를 해싱(암호화)하여 복원할 수 없도록 함.
  • 통신 시 개인 정보를 주고받을 때 SSL을 적용하여 암호화(HTTPS)

📍 SSL(Secure Sockey Layer)란?
인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜

Q. HTTP 와 HTTPS차이점은?

A. HTTP는 간단히말해 HTML을 주고 받기 위한 프로토콜이라면
HTTPS는 기존 HTTP에 SSL 인증서를 더해 보안이 강화되면 HTTP 프로토콜이다.

HTTP통신은 암호화되지 않은 데이터를 전송하기 때문에 서버와 클라이언트가 주고 받는 메시지를 그대로 노출된다. 때문에 보안에 취약하다. 이러한 점을 보완하여 강화된것이 HTTPS 프로토콜

암호화 하는 방법

hash란?

해쉬란? 자료구조에서 빠른 자료의검색, 데이터의 위변조 체크를 위해서 사용
복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용

단방향 해쉬란?

단반향 해쉬 함수 (one-way hashing function)는
말 그대로 단방향이기 때문에
input : 1 -> 0b47c69b1033498가능
output : 0b47c69b1033498로 본래 input값(1)를 알아내는것은 불가능

📍 복원이 불가능하다는 이유로 단방향 해시함수는 암호학적 용도로 사용된다.

주로 사용되는 것은 'SHA-256'
(MD5,SHA-1 - 보안취약)

단방향 해쉬의 단점

로직이 일정하기 때문에 동일한 input에서는 동일한 output이 나온다.

이걸 악용하는 해커가 미리 해쉬값들을 계산해 놓고
해쉬값과 비교를 한다면 빠르게 원본input값을 알수 있다.
이걸 악용하는 서비스도 나왔다. (Rainbow Table attac)

이러한 단점을 보완하고자 SaltingKey stretching이 나왔다.


Salting이란?

실제 비밀번호 이외에 추가적으로 랜덤(문자열) 값을 더해서 암호화하는 방법
백엔드에서 유저를 구분할때 어떤 값을 붙였는지 알려주기 위해 Salt값(소금값)을 붙여 저장한다.

Q.DB에 어떻게 저장되는것인가?

A. DB에 저장될때는 Salt값과 해싱된값이 함께 저장된다.
이 솔트값을 비교해 백엔드에서 저장된 해싱값과 맞는지 비교한다.

Key Stretching이란?

솔트값을 붙여서 해싱한 값을 여러번 반복적으로하는 방법
이를 통해 본래 값이 무엇인지 알수없게하여 유추하기 힘들게 만듬

Q.Salting과 Key Stretching을하는 이유는?

A. 해커가 유저 정보가 저장된 DB를 절대 못뚫게 하는 것이 아닌 뚫리더라도 암호화를 푸는데 걸리는 시간을 최대한 늘리는게 목적

Bcrypt라이브러리?

암호화를 도와주는 대표적인 라이브러리
다양한 언어를 지원하며 알아서 해싱 후 소금값, 해시값, 반복횟수까지 저장해줌
때문에 Bcrypt라이브러리를 사용하면 DB를 별도로 설계할 필요가 없음

0개의 댓글