유저의 identification을 확인하는 절차
인증은 회원가입과 로그인을 말함
Database에 저장시 개인정보를 해싱하여 복원할 수 없도록 한다
통신시 개인정보를 주고 받을 때 SSL을 적용하여 암호화(HTTPS)
SSL(Secure Socket Layer) 프로토콜이란?
처음에 Netscape사에서 웹서버와 브라우저 사이의 보안을 위해 만듦. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용
단방향 해쉬란?
해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터 위변조 체크를 위해서 쓰이지만 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용함.
MD5, SHA-1(둘은 보안취약), SHA-256등이 있다.
허점을 보완하고자 Salting과 Key Stretching이라는 아이디어가 생겨났습니다.
단순 해쉬값이 해킹에 쉽게 노출되기 때문에 Salting이라는 아이디어가 생겨남
입력한 비밀번호와 임의의 생성한 문자열(Salt)를 합쳐서 해싱해서 이 해시값을 저장하는 방법
여기에, 해커가 패스워드 무작위 대입을 통해 해시값을 계산하는데 필요한 시간을 대폭 늘리기 위해 Salting 및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만드는 것이 키 스트렛칭
salting & Key Stretching 대표적 라이브러리
hash결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 DB설계를 복잡하게 할 필요가 없음.
사용자가 서버에 로그인 하면 해당 사용자가 맞는지 확인하는 과정
유저가 로그인에 성공한 후에는 access token이라고 하는 암호화된 유저 정보를 첨부해서 request를 보내게 됨!
http의 특징은 무엇일까요?
바로 request/response 요청과 응답
stateless한 성질(저장하지 않는 성질)
위의 특징때문에 서버는 사용자가 로그인 했을 경우, 로그인 했다는 것을 어떻게 알 수 있을까요?
바로 headers에 메타데이터를 보내서 확인!!
이 메타정보를 바로 JSON Web Token 일명 JWT
라고 한다. 접근 허락 증명과 같다.
헤더(Header)는
두가지 정보를 지니고 있습니다.
typ: 토큰의 타입을 지정합니다. 바로 JWT 이죠.
alg: 해싱 알고리즘을 지정합니다. 해싱 알고리즘으로는 보통 HMAC SHA256
혹은 RSA
가 사용되며, 이 알고리즘은, 토큰을 검증 할 때 사용되는 signature 부분에서 사용됩니다.
내용(payload)는
토큰에 담을 정보가 들어있습니다. 여기에 담는 정보의 한 ‘조각’ 을 클레임(claim) 이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.
클레임 의 종류는 다음과 같이 크게 세 분류
서명 (signature)는
헤더의 인코딩값과, 정보의 인코딩값을 합친후 주어진 비밀키로 해쉬를 하여 생성