인증과 인가

김익현·2022년 7월 11일
0

wecode

목록 보기
20/35
post-thumbnail

인증이 필요한 이유

우리 서비스를 누가 어떻게 사용하는지 추적이 가능하도록 하기 위해 필요함.

인증에 필요한 것

ID, Email, Password

이 중 가장 중요하게 관리해야 하는것은 password 이다.

이를 관리하려면  ‘암호화’ 가 필요함.

암호화

개인정보를 주고받을때 SSL을 적용하여 암호화(HTTPS)

암호화의 종류

- 단방향 암호화
- 비밀키 암호화
- 공개키 암호화

단방향 암호화

단방향 암호화는 대표적으로 신원 증명과 인증 과정에서 사용된다. 예를 들어 비밀번호를 ‘wiki123’이라고 지정했을 때, 이를 암호화하여 ‘A3pnqq49.Hw’라는 아무런 유사성 없는 암호문을 만들어 낸다. 단방향 암호화의 특징은 역으로 변환하는 것이 불가능하고, 어떤 방법을 쓰더라도 암호문을 원래의 평문으로 되돌릴 수 없다는 것이다.

단점 : 데이터가 많이 쌓이면 비밀번호가 유추가능.

비밀키 암호화

비밀키 암호화는 말 그대로 비밀키를 사용하여 암호화와 복호화하는 과정을 가진다. 평문에 암호화 키 값을 이진수 연산 처리하여 암호문을 생성하고, 암호문을 받은 수신자는 동일한 암호화 키 값을 역으로 대입하여 암호문을 해독한다. 따라서 비밀키 암호화를 위해서는 송신자와 수신자 모두 동일한 암호화 키를 알고 있어야 한다.

단점 : 키관리가 어려우며 무결성 지원이 부분적으로만 가능함.

공개키 암호화

공개키 암호화는 공개키와 개인키라고 불리는 서로 다른 두 개의 키를 사용한다. 앞선 비밀키 암호화 방식과 비교해보면 송, 수신자에게 공개된 공개키를 사용하여 암호화하는 점은 비슷하지만, 복호화는 개인키를 가진 사람만 할 수 있다는 점에서 차이가 생깁니다. 조금 더 복잡해 보이는 해당 방식은 비밀키 암호화 방식보다 처리가 느리기 때문에 실제 암호화 시스템은 비밀키 암호화 방식과 공개키 암호화 방식을 혼합하여 구축된다.

단점 : 키의 길이가 길고 연산속도가 느림.

SALTING

비밀번호를 암호화 할떄 랜덤값을 주어 쉽게 유추하지 못하도록 랜덤값을 같이 넣어줌

그때 랜덤값을 저장하지 않으면 단방향 해쉬이기때문에 암호화된걸을 유추하여 비밀번호로 돌아갈 수 없음.

이런식으로 암호화된것에 랜덤한 값을 넣어 해커들이 비밀번호를 해킹하는데 시간이 오래걸리도록 키를 늘리는것을 key stretching 이라고 함.

인가

해당 유저가 권한이 있는지 확인하는 절차

기존의 웹에서는 http를 사용하여 권한을 확인했는데, http 는 stateless성(서버가 클라이언트의 상태를 보존하지않음) 이기떄문에 이전요청이 계속 사라짐.

페이지를 이동할때마다 로그인을 새로해줘야함…

JWT(JSON Web Token)

위와 같은 불편함을 극복하기위해 새로운 방식이 생겼는데 서버에 메타데이터를 보내서 확인하는방법을 도입했는데, 그 메타정보가 JSON Web Token 이라고함.

구성 : 헤더(Header).내용(Payloda).서명(Signature)

  • 헤더(Header)
    토큰의 타입과 해시 알고리즘정보가 들어감.
  • 내용(Payloda)
    미리정의된 집합(만료시간)인 Registerd Claim,공개용 정보 전달을 목적으로함, 클라이언트와 서버간 협의하에 사용함
  • 서명(Signature)
    원본인것을 확인할떄 사용함,프론트가 JWT를 백엔드로 전송하면 복호화하여 서버에서 생성된 JWT가 맞는지 확인함.
  • 헤더와 내용에서는 암호화가아닌 인코딩이기떄문에 개인정보를 담으면안됨.

출처

https://ko.wikipedia.org/wiki/암호화

https://retro-blue.tistory.com/40

profile
놀땐 화끈하게 놀고, 할땐 부끄럽지않게 확실하게 하자!!

0개의 댓글