인증 . 인가

kirin.log·2021년 1월 12일
1

인증

회원가입로그인을 뜻한다. 즉 자기자신을 식별하는 것

🚗 인증은 왜 필요한가?
우리 서비스를 누가 쓰는가, 어떻게 사용하는지, 추적이 가능하도록 하기 위해 필요.
ex) 국세청에 세금신고, 은행에서 계좌정보 조회할때 모두 식별 과정을 거쳐야 한다

🚗 인증에 필요한 것은?
아이디, 이메일주소, 비밀번호 등 (❗ 가장 중요한 것은 비밀번호)

🚗 비밀번호는 어떻게 관리해야 하는가? (법규상)
개인정보보호법은 개인정보 암호화에 대해서 다음과 같이 규정하고 있다.

🎃 비밀번호는 어떻게 관리해야 하는가?

통신 시 개인 정보를 주고받을 때 SSL을 적용하여 암호화(HTTPS)
SSL인증서(보안 적용)를 입혀서 HTTPS 통신 이용 ➡ 네트워크 통신 자체가 암호화 됨
❗ HTTP는 안전하지 않다. 통신 시 개인정보를 주고 받을 때 SSL을 적용하여 암호화(HTTPS)
httphttps 의 차이: ssecure 의미. 네트워크 통신 자체가 암호화 된다는 뜻. (암호화된 안전한 사이트)

🎃 암호화는 어떻게 할까?
🍧 단방향 해쉬

  • 해쉬(hash)함수는 빠른 자료의 검색, 데이터의 위변조 체크를 위해 쓰인다
  • 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다
  • 많이 쓰이는 해쉬함수로는 SHA-256, SHA-511 등이 있다.
    (보안이 취약한 해쉬 함수로는 MD5, SHA-1 등이 있다)
  • "1234"를 SHA-256 해싱하면 아래와 같다.

    03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f97

❗ 결과만 봐서는 당장 식별이 불가능하므로 완벽해 보이지만, 같은 알고리즘으로 "1234"를 다시 해싱하면 같은 결과가 나온다.
❗ 이러한 허점을 이용해서 '가능한 경우의 수를 모두 해시값으로 만들어서 판매하는 서비스'도 존재(=Rainbow Table, 해시값을 유추하여 판매)
👉 이러한 허점을 보완하고자 saltingKey Stretching 이라는 아이디어가 생겨났다. 비밀번호로 생성한 문자열(Salt)를 합쳐서 해싱하여 이 해시값을 저장하는 방법.
(salting & Key Stretching : 소금치고 늘린다)

📚 bcrypt
alting & Key Stretching 대표 라이브러리(오픈소스 라이브러리).

  • 다양한 언어 지원 & 사용이 간편하여 쉽게 적용 가능
  • bcrypt는 hash 결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀 해싱을 적용하는데 있어 DB설계를 복잡하게 할 필요가 없다.

인가

🚗 인가(Authorization)

  • 사용자(User)가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정
  • HTTP의 특징 2가지

(1) request / response (요청과 응답)
(2) stateless한 성질 (저장하지 않는 성질)

🎃 서버는 사용자가 로그인 했을 경우, 로그인 했다는 것을 어떻게 알 수 있을까?

  • headers에 메타데이터를 보내서 확인한다
  • 이러한 메타데이터JSON Web Token (=JWT) 라고 한다.

    ➡ 요청1의 응답(response) 1에서 200 OK와 토큰을 함께 보낸다
    ➡ 요청2는 발행받은 토큰과 함께 요청보낸다(요청1의 사용자 메타데이터, 즉 토큰을 함께 보냄으로써 지속적 사용자 활동 추적이 가능)
    👉 사용자가 로그인 하면 headers메타데이터(사용자 정보)를 담아서 보낸다
    👉 Token (=메타데이터)을 통해 웹 내에서 사용자의 활동에서 지속적으로 사용자를 식별 및 추적한다.

📚 헤더(header)에는 어떤 정보가 들어갈까?

  • 토큰의 타입과 해시알고리즘 정보가 들어간다.
  • 헤더의 내용은 BASE64 방식으로 인코딩해서 JWT의 가장 첫 부분에 기록된다.
profile
boma91@gmail.com

0개의 댓글