암호화
암호화를 하는 방법.
- HTTP를 그냥 쓰면 보안이 적용 되있지 않아서 HTTPS로 SSL을 적용하여 암호화(인증서발급)
HTTP+Secure. 보안적 통신이 요구 될때는 S를 붙이는 경우가 많다.
SSL을 무료로 발급하는 사이트가 있어서 찾아보면 좋을것이다.
- 해싱을 통해 암호화
암호화? : 바로 알아 볼 수 없게 만드는것
- 단방향 해쉬
- 본래 해쉬는 빠른 자료 검색, 데이터 위변조 체크를 위해서 쓰이지만, 복원이 불가능한 단방향 해위함수는 암호화에 사용된다.
- SHA-256이 현재 가장 많이 쓰이는 해싱.
- 이를 이용해서 해슁을 하면 식별이 불가능해 보이니까 완벽해보이지만, 같은 알고리즘으로 풀어보면 항상 같은 결과가 도출합니다.
- 이같은 허점을 보완하고자 비크립트의 salting과 Key Stretching이라는 아이디어가 생겨났다.
- bcrypt
- 복호화 할 수 없는 라이브러리
- Salting & Key Stretching의 대표적인 라이브러리다.
- salting
- 비밀번호와 임의로 생성한 문자열(Salt)를 함쳐서 해싱하여 이해시를 저장하는 방법.
- 자바스크립트도 지원 된다!
- 입력한 비밀번호+임의로 생성한 문자열(Salt)를 합쳐서 해싱
- 해커를 막기 위해서 Salting에 쓰인 해싱을 여러번 반복해서 늘린다. 이를 키 스트래칭(Key Stretching) 이라고 한다
인가는 무엇일까요?
사용자를 식별하기 위한 표현
- 로그인인한 사용자만 이용할 수 있는 기능을 인가라고 한다.
- 인가의 매개체는 JSON Web Token 일명
JWT
- 저장되지 않기 때문에 자주 쓰인다.
- (헤더 . 내용 . 서명) 의 구조로 되어있다.
- 헤더 : 비암호화
- 내용 : 비암호화
- 서명 : 암호화
- 프론트에서 로그인 토큰이 발행되면 위와같이 헤더. 내용. 서명으로 가지고 있다.
- 저장만 해두고 백앤드에게 앤드포인트가 있다면 헤더값에다가 토큰을 키 주고 인가를 해준다.
- 실제로 서비스를 만들 때는 세 군데중 하나에 저장해주고 헤더에 넘겨야지 요청을 수행할 수 있다.
- 헤더에 넘길 키는 프론트,백에서 약속한 키로 정해주자.