인증인가 #2
#인증인가 다시보기
인증? 로그인할 때 정확하게 아이디/비밀번호 입력했는지 확인하는 과정
인증은 왜 필요한가? 서비스를 누가 어떻게 사용하는지 추적할 수 있다.
가장 중요한 것은 당연히 비밀번호
개인정보 보호를 위한 암호화는? 단방향 해쉬로
hash?
원래 자료를 빠르게 탐색하기 위한 자료구조,
빠르게 i/o 가능해서 암호화에 사용하게 되었다.
input => hash 함수 => output(알 수 없는 값)
같은 input => 같은 output
서로 다른 input => 서로 다른 output
MD5, SHA-1 (보안 취약) SHA-256
가능한 경우의 수를 모두 해시값으로 만들어서 판매하는 서비스, Rainbow Table 존재한다.
->보완? salting, Key Stretching
salting
- salt? 단방향 해시 함수에서 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열을 의미한다.
- 원본 메시지에 문자열을 추가하여 다이제스트를 생성하는 것이 salting
salt값은 회원가입할 때마다 랜덤하게 생성-> 로그인할 때 DB에 저장해두어야한다.
Key stretching
random salt+ hash하는 과정을 여러번 반복한다.
해시값을 계산하는 데 필요한 시간을 계속해서 늘려 원본값 유추를 어렵게한다.
bcrypt
salting, Key Stretching 대표적 라이브러리
bcrypt를 통해 해싱된 결과값 = digest
단방향 해쉬?
해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해 쓰이지만 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다.
"output으로는 input을 유추할 수 없다 = 복호화 불가능"
(cf. 양방향해쉬? 카드정보 저장, access token)
인가
로그인 성공하면 token을 준다!
JWT(JSON Web Token)
헤더 + 내용 + 서명 => 여기서 서명은 복호화로 유저 파악이 가능해야 한다.
bcrypt 사용해보기
import { genSalt } from 'bcrypt';
const pw = "hellojihyun";
const generateSalt = async() => {
console.log(await genSalt(10))
}
generateSalt();
결과 ?
token은 로그인할 때 만들어진다.
token을 푸는 함수는? 권한이 있는지 확인할 때 실행된다.
ex.마이페이지 접속할 때
참고한 자료 https://d2.naver.com/helloworld/318732
더 공부할 자료 https://emmanuelhayford.com/understanding-the-bcrypt-hashing-function-and-its-role-in-rails/
Author And Source
이 문제에 관하여(인증인가 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhyunk218/인증인가-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)