3월 18일 (금) MySQL과 MySQL2의 차이, Bcrypt(로그인 정보 암호화), MySQL 테이블 데이터 삭제

남이섬·2022년 3월 18일
0
post-custom-banner

MySQL과 MySQL2의 차이

MySQL과 MySQL2의 차이점은 바로 promise

mysql은 콜백 기반이기 때문에 promise를 사용하지 못하고 npm에 있는 promise-mysql 모듈을 따로 설치해서 사용해야 한다
하지만 mysql2는 promise를 지원하기 때문에 다른 모듈을 설치하지 않고 사용이 가능하다

Bcrypt

암호 해싱 기능을 이용하여 데이터베이스에 암호화된 비밀번호 저장 방법

설치

npm install bcrypt --save

사용

async

const bcrypt = require('bcrypt');

hasing

npmjs 튜토리얼에서 제공하는 코드

const saltRounds = 10;
bcrypt.genSalt(saltRounds, function(err, salt) {
    bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
        // Store hash in your password DB.
    });
});

단방향 해시 함수

단방향 해시 함수는 수학적인 연산을 통해 원본 메세지를 변환하여 암호화된 메세지인 digest를 생성한다
이 방식으로 암호화된 digest는 다시 평문으로 볼 수 없다

단방향 해시 함수 문제점

  1. 동일한 메세지가 동일한 digest를 생성하는 경우 즉, 똑같은 비밀번호가 똑같은 해시값을 생성하는 경우
    비밀번호별로 해당 digest(해시값)을 미리 저장한 테이블을 만들어 원본 비밀번호를 역추적하여 사용자의 비밀번호를 알아 낼 수 있다
    이와 같은 digest 목록을 담고 있는 테이블을 rainbow table이라고 하고 이 공격 방식을 rainbow attack이라고 한다

  2. 해시 함수의 빠른 처리 속도
    사실 해시 함수는 짧은 시간에 데이터를 검색하기 위해 설계된 것이다
    따라서 공격자가 마음만 먹으면 임의의 digest를 대량으로 생성하여 사용자의 암호가 해시된 digest와 빠른 속도로 비교하여 원래의 비밀번호를 알아낼 수 있다

솔팅 & 키 스트레칭

위와 같은 해시 함수들의 단점들을 보완하기 위해 솔팅(salting)이라는 기법과 키 스트레칭(key stretching) 기법이 사용된다

솔팅

단방향 해시 함수에서 추가적으로 임의 길이의 문자열을 생성하여 digest를 생성한는 방법을 솔팅이라고 한다

원래 비밀번호인 1234asdf 알아내더라고, 솔팅된 digest를 대상으로 패스워드 일치 여부를 확인하기 어렵다

일반적으로 모든 비밀번호가 랜덤한 고유의 솔트값을 가지고, 솔트값의 길이는 32 바이트 이상이어야 솔트와 digest를 추측하기 어렵다고 한다

키 스트레칭

입력한 비밀번호의 digest를 생성하고, 생성된 digest를 입력 값으로 다시 digest를 계속 반복 생성하는 방법이다
이 방법을 사용하면 공격자가 입력한 패스워드를 동일한 횟수만큼 해시해야만 digest의 일치 여부를 확인할 수 있다

$2b는 bcrypt의 버전정보다
$12는 12 round를 의미하며 2^12번 만큼 키 스트레칭을 돌린 것이다
나머지 부분은 salt + 암호문으로 구성되어 있다

saltRounds
위와 같이 숫자에 대한 round를 의미하며 2^n 만큼 키 스트레칭을 돌리는 것

MySQL 테이블 데이터 삭제

DELETE

  • 데이터만 삭제 되고 용량이 줄어들지 않는다
  • 삭제한 내용을 되돌릴 수 있다
  • 전체 데이터 혹은 일부만 삭제가 가능
  • TRUNCATE의 비해 속도가 느립니다

사용법
DELETE TABLE [테이블명] WHERE [컬럼명] = [컬럼]

DELETE TABLE member WHERE seq = 1

조건을 주지 않았을경우 테이블 내용을 전부 삭제도 가능
DELETE TABLE [테이블명]

DELETE TABLE member

TRUNCATE

  • 테이블의 초기상태로 되돌린다
  • 용량이 줄어들고, 인덱스 등등 도 삭제된다
  • 삭제 후 되돌릴수 없다
  • 전체 삭제만 가능

테이블 전체 내용을 삭제하는데 사용
TRUNCATE [테이블명]

TRUNCATE member
profile
즐겁게 살자
post-custom-banner

0개의 댓글