TIL 17 인증(Authentication) & 인가(Authorization) 기초개념

CastleQ·2021년 6월 3일
0

인증&인가

목록 보기
1/3
post-thumbnail

인증 & 인가의 사전적 의미

인증, 認證
문서나 행위가 정당한 절차로 이루어졌다는 것을 인정하여 증명하는 것.
인가, 認可
인정하여 허락하는 것.

어떠한 절차를 이루어 허락한다 이런 의미인 것 같다

고유명사로의 인증 & 인가란?

인증은 유저의 identification을 확인하는 절차이다.
인가는 유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인하는 절차 이다.

인증 & 인가를 하는이유는?

유저가 어떤 서비스를 이용할 때 내가 아닌 다른 사람의 id로 로그인이 된다거나
내가 아닌 다른사람이 내 정보를 갈취할 수 없도록 보호하기 위함이다.
그리고 법적으로도 개인정보를 암호화해서 관리하도록 하고 있기에, 서비스를 운영하는 주체는 정보의 암호화를 필수로 해야된다.

단방향 해시(Hash) 함수

Hash란

임의의 길이를 갖는 어떠한 데이터에 대해 고정된 길이의 데이터로 매핑하는 함수를 Hash함수이고, 함수의 결과물은 Hash값이라고 부른다.
Hash값은 같은 입력값에서는 같은 출력값을 보장한다.
Hash의 특성 중 하나가 문장을 복호화할 수 없게 만드는 것인데 이러한 특성 때문에 현재까지 많은 함수들이 충돌 문제가 확인이 되었다.

프로그래머는 아래의 두 가지 중 한 가지로 사용자의 패스워드를 저장한다.

  • 단순 텍스트(plain text)
  • 단방향 해시 함수(one-way hash function)의 다이제스트(digest)
    당연히 프로그래머라면 패스워드 등 유출되면 안 되는 정보에 대한 암호화를 할 텐데
    암호화는 단방향양방향알고리즘이 있다.

    단방향 해시 함수는 수학적인 연산을 통해 원본 메시지를 변환하여 암호화된 메시지인 다이제스트를 생성한다. 원본 메시지를 알면 암호화된 메시지를 구하기는 쉽지만 암호화된 메시지로는 원본 메시지를 구할 수 없어야 하며 이를 '단방향성'이라고 한다.
    양방향은 평문을 암호화도 할 수 있고 다시 복호화도 가능한 알고리즘이다.

일반적으로 password를 관리할 때는 단방향 알고리즘을 많이 사용하는데 개발을 하는 개발자도
암호를 쉽게 알 수 없어야 하는 암호화 과정의 특성 때문이다.
단방향에서 비밀번호를 비교할 때에는 암호화해서 저장해놓은 값을 암호화한 입력값과 비교하면 검증을 할 수 있다.

단방향 해시(Hash)함수의 문제점

인식 가능성(recognizability)

동일한 메시지를 저장하는 프로그램이 있다고 하면, 공격자가 전처리(pre-computing)된 다이제스트를 가능한 한 많이 확보한 다음에 비교해 원본 메시지를 찾을 수 있다.
이와 같은 다이제스트 목록을 레인보우 테이블(rainbow table)이라 하고, 이와 같은 공격 방식을 레인보우 공격(rainbow attack)이라 한다.

속도

해시 함수는 암호화해서 많이 사용되지만 원래 패스워드를 저장하기 위해 설계된 것이 아니라 짧은 시간에 데이터를 검색하기 위해 설계된 것이다. 그렇기에 해시함수의 빠른 처리 속도 때문에 공격자는 빠른 속도로 임의의 문자열과 다이제스트를 비교할 수 있다.

해시 함수 보완

솔팅(salting)

솔트(salt)는 단방향 해시 함수에서 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열이다. 그리고 이 원본 메시지에 문자열을 추가하여 다이제스를 생성하는 것을 솔팅(salting)이라 한다.

그 소금 맞다 양념을 친다 이렇게 이해하면 좋을 듯 하다.

이 방법을 이용하면 공격자가 다이제스트를 알아 내더라도 솔팅된 다이제스트를 상대로 패스워드가 일치하는지 여부르 알아내기 힘들다.

키 스트레칭(key stretching)

입력한 패스워드를 해시화 하여 다이제스트를 생성하고, 생성된 다이제스트를 또 다이제스트 하여
(like? for문? 반복해서 암호화) 다이제스트를 늘리는 것이다. 이렇게 하면 입력한 패스워드를 동일한 횟수만큼 해시해야만 입력한 패스워드의 일치 여부를 확인할 수 있다.

일반적인 장비로 1초에 50억 개 이상의 다이제스트를 비교할 수 있지만, 키 스트레칭을 적용하여 동일한 장비에서 1초에 5번 정도만 비교할 수 있게 한다.
(암호를 추적하는 시간을 늘리기 위해 사용한다.)

참고자료
https://velog.io/@devmin/bcrypt-jwt-basic
https://d2.naver.com/helloworld/318732
위코드 노션 인증&인가

profile
DONE IS BETTER THAN PERFECT

0개의 댓글