인증 Authentication
회원가입과 로그인
목적 : 사용자 추적이 가능하도록 (누가 쓰는지, 어떻게 사용하는지 등)
매개체는 id, e-mail, password 등
비밀번호 관리?
- 법규상의 강제 > 개인정보보호법
- DB 저장 시 암호화 + 개인정보를 주고받을 때 SSL 적용하여 암호화 (HTTPS)
암호화?
- 단방향 Hash ( Hash 후 다시 돌아올 수 없음 )
SHA-1 & MD5 는 보안이 취약하고 최근에는 SHA-256
하지만 같은 알고리즘으로 해싱하면 같은 결과가 도출됨
→ RainbowTable 등 악용하는 사례 등장
- Salting & KeyStretching
임의 생성한 문자열을 합쳐서 (Salting) Hashing
Salting-Hashing을 여러번 반복하는 것이 KeyStretching
bcrypt : salting & key stretching library
→ 로그인할 때는 암호화를 푸는 게 아니라 입력값을 같은 알고리즘으로 암호화해서 저장된 암호와 비교
- 단방향 암호화 : 비밀번호와 같이 중요한 개인정보에 사용
- 양방향 암호화 : 개인정보여도 다시 사용이 가능한 경우 (예: 병원 내 개인정보 / 쇼핑몰에 배송지 지정 등)
인가 Authorization
Http 특징?
- 요청Request과 응답Response
- stateless (독립적 요청 : 저장하지 않는 성질)
→ 쇼핑몰 로그인과 내 장바구니 보는 요청은 별개의 요청
header에 메타 데이터를 보내서 확인
이 메타 정보 = Json Web Token (JWT)
JWT
- 헤더header : meta data (암호화 X 인코딩 O)
- 내용body : payload (암호화 X 인코딩 O)
user-id (사용자 번호 등 개인정보 X) / expired 정보 등
(예: 만료 시간이 지나면 토큰이 삭제되고 다시 로그인을 요구)
- 서명signature : server 정보
header / body를 고유의 key로 암호화