인증인가 #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/

좋은 웹페이지 즐겨찾기