Authentication & Authorization

이지훈·2021년 7월 1일
0

TIL

목록 보기
31/33
post-thumbnail

생성은 백앤드 관리는 프론트에서 한다.

1. Authentication

Authentication is the act of validating that users are whom they claim to be. This is the first step in any security process. -okta-

-> 인증이란 사용자가 누구인지 확인하는 행위

1-1. process

  1. Passwords. Usernames and passwords are the most common authentication factors. If a user enters the correct data, the system assumes the identity is valid and grants access.

-> id, 비밀번호는 일반적인 인증 요소임

  1. One-time pins. Grant access for only one session or transaction.

-> 1회성 핀 넘버 : 하나의 세션(1번)만 가능하게 만드는 액세스 권한

  1. Authentication apps. Generate security codes via an outside party that grants access.

-> 액세스를 허용하는 외부 app을 이용한 인증

  1. Biometrics. A user presents a fingerprint or eye scan to gain access to the system.

-> 지문 같은 생체 인식을 이용한 인증

2. Authorization

Authorization in system security is the process of giving the user permission to access a specific resource or function. This term is often used interchangeably with access control or client privilege.

-> 인가란 유저에게 특정한 리소스에 접근할 수 있는 권한을 주는 것

3. 비교

인증은 선택한 인증 요구 사항(비밀번호, 생체인식 등)에 따라 올바른 증명을 한다면 엑세스 가능

인가는 애초에 리소스에 대한 권한을 부여하고 그에 해당하는 데이터에만 액세스 할 수 있습니다.

4. 정보보호를 해야하는 이유

법규상의 강제개인정보 보호법로 인해서 사용자의 개인 정보 처리에 힘을 쏟아야함

5. hash 기반의 계정 등록과 인증 절차

  1. 사용자가 계정을 signup 한다.
  2. 사용자의 비밀번호는 hash되어 DB에 저장된다
  3. 사용자가 로그인을 시도할 때, 사용자가 입력한 비밀번호와 DB에서 가져온 hash된 비밀번호와 비교한다.
  4. 같다면 access token을 클라이언트에게 전송한다.
  5. 사용자는 접근 권한을 얻는다.
  6. 유저는 로그인 후에는 access token을 request에서 첨부해서 보내기 때문에 매번 로그인할 필요가 없다.

6. 비밀번호 관리 방법

db에 저장 시 개인 정보를 해싱하여 복원할 수 없도록 하기 위해 hash를 해서 난독화를 한다.

비밀번호는 통신 시 개인 정보를 주고받을 때 SSL을 적용하여 암호화한다(HTTPS; HTTP secure를 사용)

7. 단방향 해쉬

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

MD5, SHA-1, SHA-256를 사용.

1234를 SHA-256 해싱하면 다음과 같다.

결과만 봐서는 당장 식별이 불가능하므로 완벽해보이지만 같은 알고리즘으로 1234 다시 해싱하면 항상 같은 결과가 도출되어 금방 해킹당할 수 있다.

이런 허점을 이용한 것을 rainbow table이라고 부른다
(*해시값을 계산한 테이블을 모아둔 것)

이같은 허점을 보완하고자 salting, key streting이라는 아이디어가 생겼음. 비밀번호와 임의로 생성한 문자열를 합쳐서 해싱하여 이 해시값을 salting이라고 함

이 때 비교를 위해 해시값과 salting을 같이 저장함

해커가 패스워드 무작위 대입을 통해 해시값을 계산하는데 필요한 시간을 대폭 늘리기 위해 솔팅 및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만드는 것이 key strecting이다.

8. bcrypt

오픈 소스 라이브러리이며 다양한 언어를 지원하며 간단하게 사용할 수 있다.

bcrypt는 hash 결과값에 소금값과 해시값 및 반복 횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 DB설계를 복잡하게 할 필요가 없다.

bcrypt를 통해 해싱된 결과값(Digest)의 구조는 알고리즘 + 알고리즘 옵션(eg cost) + salt + hashed password 입니다.

--

9. Http의 특징

  • 바로 request/response 요청과 응답
  • stateless 성질

서버는 사용자가 로그인 했을 경우 로그인 했다는 것을 아는 방법
headers 에 메타 데이터(데이터들의 데이터)를 보내서 확인

메타 정보를 바로 json web token = jwt 라고 한다.

요청 1의 응답 1에서 200 ok과 token 발행

요청 2는 발행받은 token과 함께 요청 보냄


10. jwt 구조

단순 해쉬값이 해킹에 쉽게 노출되기 때문에 솔팅이 생겼음

header.payload(내용).sugnature(서명)

해더 : 토큰의 타입과 해시알고리즘 정보가 들어감, 헤더의 내용은 BASE64 방식으로 인코딩해서 JWT 가장 첫 부분에 기록

페이로드 : exp와 같이 만료 시간을 나타내는 공개 클레임
클라이언트와 서버간 협의하에 사용하는 비공개 클레임
두가지 요소를 조합하여 작성한 뒤, BASE64 인코딩하여 두번째 요소로 위치

서명 : jwt가 원본 그대로라는 것을 확인할 때 사용
BASE64URL 인코딩된 해더와 payload 그리고 jwt secret (별도 생성-특정값) 헤더에 지정된 암호 알고리즘으로 암호화하여 전송(복호화 가능)

프론트엔트가 jwt를 백엔드 API 서버로 전송하면 서버에서는 전송받은 jwt의 서명부분을 복호화하여 서버에서 생성한 jwt가 맞는지 확인합니다.

위변조를 맞기위해 서로 사인하므로 누구나 원본을 볼 수 있으니 개인정보를 담아서는 안된다.


참고 자료

https://www.okta.com/identity-101/authentication-vs-authorization/

profile
꾸준하게 🐌

0개의 댓글