인증(uthentication)이란,유저 아이디와 패스워드를 확인하는 절차이다.
이 인증이라는 과정을 거치기 위해서는 생성할 수 있는 기능이 필요하다.
인가란,유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가 아닌가 확인하는 절차이다.
조금 쉽게 예를 들자면, 구매 사이트에서 로그인이 되면 장바구니에 담은 것들에 대한 정보는 나만 알 수 있고 다른 유저에게는 권한이 없다.
다른 예로는 네이버 화면에는 누구나 들어갈 수 있지만 내 블로그에 글을 수정하고 쓰는 공간까지 들어갈 수는 없다.
비밀번호를 있는 그대로 입력 값을 DB에 저장하면 해커들이 아주 좋아할 것이다.....해커뿐만 아니라 내부 개발자들도 아주 다 알것이다.....공용도 아니고.....(절대 ❌)
그래서 반드시 암호화 해서 저장을 해야한다. 입력값을 일정한 길이의 다이제스트(해쉬함수를 통해 생성된 암호화된 msg) 형태로 변환 시켜주고 DB에 저장한다. 해쉬 함수의 경우 단방향이다. 단방향 해쉬는 비밀번호 암호에 일반적으로 쓰인다.
이러한 단방향 해쉬 함수에도 취약점이 있다.
바로 해쉬 함수 자체가 패스워드를 저장하기 위해 만들어진 것이 아니라 짧은 시간에 데이터를 검색하기 위해서 만들어진 것이기 때문에 비밀번호가 매우 복잡하게 이뤄진 구조가 아니면 해킹 뚫리기가 쉽다.......🤷♀️OMG
무엇보다 유저들 대부분 비밀번호 설정이 거의 비슷할 뿐더러 쉽게 이뤄진 구조가 많아서 보안 문제에서 조금 취약하다는 단점이 있다.
그래서 이러한 보완을 위해 나온 것이... 두구두구두구 saltig과 key stretching이다.
salting 은 실제 비밀번호 이외에 추가적으로 소금을 치는것이다..!그 소금은 바로 랜덤 데이터를 더해서 해시값을 계삭하는 방법이다.
key stretching은 해쉬값을 계산 한 후 또 그 값을 해쉬하고 또 하는 반복적인 것을 말한다. 한마디로 해킹이 쉽지 않게 길게 길게 시간을 늘려주는 것이다.
예를 들어 이런 작업이 없다면 해커가 3일만에 뚫을 것을 3년 혹은 10년 걸리게 해주는 것이다.( * 그래서 일정 기간이 지나면 비밀번호 바꾸세요 라는 안내 문구가 뜨는 이유가 여기에 있다.)