인증 / 인가

Now, Sophia·2021년 10월 26일
1

TIL-ETC

목록 보기
6/13
post-thumbnail

인증

인증은 회원가입과 로그인을 뜻한다.
유저가 누구인지 추적 및 확인하기 위해 인증이 필요.

인증에 필요한 것은 아이디, 이메일주소, 비밀번호 등이 있고, 그 중 비밀번호가 제일 중요하다.

  • 비밀번호를 어떻게 관리해야 하는가?
    • 암호화해서 노출되지 않도록 법으로 보호. 주민번호나 바이오정보도 포함!
    • Database에 저장시 개인정보를 해싱(난독화) 하여 복원할 수 없도록 한다.
    • SSL를 적용하여 암호화.
      • 주소창에 자물쇠모양이 secure라고 생각하면 되고, https에 한번 더 보안이 된다.

1. 암호화하는 방법.

단방향 해쉬란

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

단점 : 결과만 봐서는 식별이 불가능함으로 완벽해 보이지만 같은 알고리즘으로 인풋값을 넣으면 같은 결과가 도출된다.
똑같은 인풋을 넣으면 아웃풋도 똑같은데, 이러한 허점을 노린 것이 레인보우테이블이 있어 보완에 취약.

상기와 같은 허점을 보완하기 위해 salting key stretching이 나옴.

(양방향 해쉬는 아웃풋으로 인풋을 알 수 있는 방법.)

2. salting

입력한 비밀번호와 임의로 생성한 문자열(random salt)를 합쳐서 해싱해서 이 해시값을 저장하는 방법.

salting값은 대부분, 암묵적으로 비밀번호 뒤쪽에 둔다.

3. key stretching

salting에서 좀 더 강화한 것.

해커가 해시값을 계신하는데 필요한 시간을 대폭 늘리기 위해 salting&해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만드는 것이 키 스트래칭( key stretching).

뚫렸더라도 뚫린 것을 알리기위해 시간을 벌기 위해 있는 것!
salt는 한번만 하고, 해싱을 여러번 한다.
DB설계도도 복잡해지기때문에 비크립트라이브러리를 사용.

4. Bcrypt 라이브러리.

(암호화 알고리즘으론 sha-256)
salting & Key stretching 대표적 라이브러리

- bcrypt는 해쉬 결과값에 salt 값 & 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 DB설계를 복잡하게 할 필요가 없다.
- 비밀번호, salt, 해쉬, key stretching 한 값이 마지막에 저장된다.

인가

사용자가 서버에 로그인하는 것. 그리고 해당 사용자가 맞는지 확인하는 과정.

1. HTTP 특징

요청과 응답
비연속성 (stateless한 성질 = 저장하지 않는 성질)
토큰은 백엔드가 하고, 토큰관리는 프론트
토큰은 메타데이터고, 메타데이터는 헤드에 담는다.
받은 토큰은 로컬스토리지, 쿠키, 캐시, 세션으로 관리하고 http로 전달한다...

JWT (Json Web Token)

aaaaa.bbbbb.ccccc

헤더(header) 내용(payload) 서명(signature)

  • 헤더
    토큰의 타입, 해시알고리즘

  • 내용
    토큰에 대한 내용이 들어있는데, exp와 같이 만료시간을 나타내는 공개 클레임
    클라이언트와 서버간 협의하에 사용하는 비공개 클레임.
    헤더랑 내용은 인코딩되어 있다.

  • 서명
    JWT가 원본 그대로라는 것을 확인할 때 사용
    시그니쳐는 인코드된 헤더/내용, JWT secret(별도생성)을 헤더에 지정된 암호 알고리즘으로 암호화하여 전송
    프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서 전송받은 JWT의 서명부분을 복호화하여 서버에서 생서한 JWT가 맞는지 확인.
    즉, 왓챠에서 발급한 토큰은 넷플릭스에서 맞는지 확인하면 다르다고 나온다...

    주의할 점은 헤더(header)와 내용(payload)은 인코딩 한것임으로 암호화 한 것이 아니다.

    그러니 누구나 원본을 볼 수 있으니 개인정보를 담으면 안된다.

토큰이 만료되면 다시 로그인하게되면 토큰을 다시 주게 된다.
토큰이 유지되는 동안에는 JWT는 변경되지 않는다.




🙋🏻‍♀️Today,

JWT... 아직 어려운 용어들

profile
Whatever you want

0개의 댓글