bcrypt 암호화와 SHA 암호화

박원종·2021년 3월 10일
0

Today I Learn

목록 보기
2/5

📌오늘 배운 것

벡앤드 뉴비로써 항상 디비에 모든 값을 그대로 저장하면 안된다고 얼핏 들었지만 내가 직접 암호화 알고리즘을 만들어서 사용해야된다고 오해.(?) 하고 있었어서 암호화를 시도할 엄두조차 내지 못하고 있었다.

조금만 찾아보니 읭? 암호화 api들이 존재하네?
허허... 역시 컴퓨터란 내가 생각한건 이미 다 만들어져있다...
보통 db에 password를 암호화해서 저장할때
bcrypt나 scrypt를 많이 사용한다고한다
심지어 암호화는 증명된 api를 쓰는 것이 좋다고한다.
만들어서 쓰다보면 다양한 취약점들을 생각못할 수 있기 때문이다.

SHA 암호화 보다 bcrypt를 권장하는 이유

SHA 암호화보다 bcrypt를 즐겨쓰는 이유는 크게 말하면 안정성인데

  1. 속도
    해시는 원래 빠른속도로 원하는 값을 검색하기위해 발명되었기 때문에
    해시 기반의 SHA는 무작위 문자열을 대입해 빠르게 비교를 할 수 있다.
    SHA는 일반적으로 GPU연산에 유리한 32비트 논리 및 산술 연산만 사용하기 때문에 더더욱
    GPU를 사용하는 공격자에게 편의를 주는 셈이다.
  1. 인식성
    이는 단반향 해시함수의 문제점이기도 한데,
    단반향 해시함수는 입력한 문자열로 암호화한값을 만들어내지만
    암호화한 값으로 입력한 문자열을 찾을 수 없도록 해야한다.
    따라서 두 문자열을 해시함수로 암호화해서 그 결과값이 같냐를 확인하는데,
    이는 항상 같은 문자열은 같은 값으로 치환이 된다는 것이고,
    다양한 암호화한 값들을 최대한 많이 모아서 대입공격을 한다면
    시간이 많이 걸리겠지만 정보를 탈취할 수도 있다는 것이다.
    또한 탈취한 비밀번호를 사용하는 다른 사용자가 있다면
    암호화한 값이 동일하기 때문에 손쉽게 1 + 1 을 할 수 있게된다.

그래서 bcrypt는 SHA가 아니라 Blowfish를 사용하고
단방향 해쉬함수의 단점을 보안하기위해

SALT(솔트)라고 부르는 임의의 문자열을 패스워드에 추가해서 암호화 작업을 수행한다.
이것을 솔팅이라고 부른다

또한, 암호화하는 작업을 한번만하는게 아니라
암호화한 결과값을 입력값으로 해서 암호화를 재귀적으로 하는데
Key_stretching(키 스트레칭)이라고 일컫는다

🧰 삽질로그

근데 나는 어이없는 부분에서 삽질을 하고 있었다 ㅋㅋ
bcrypt 의존성을 추가해주었고 잘 import도 되었는데 자꾸 이런 오류화면이 떴다.
첨엔 제대로 안읽었는데 자세히 읽어보니 Data too long for colum pw
아...내가 암호화하기 이전 pw를 VARCHAR(20)으로 해놨었지...


찾아보니 bycrypt는 최소 varchar(60)으로 설정을 해달라고해서 아래처럼 변경해주고

밑에껀 친구이름인데 미안하다 좀 팔게;;
post맨을 이용해서 DB에 값을 넣으면

쫘좐 엄청길게 들어간다 ㅎㅎ 뿌듯
별거아닌데 머리굴렸다...뉴비의 아픔이란..

👍 Good

암호화에 대해서 지극히 일부지만 공부하게 된 계기가 되어서 이 삽질도 꽤나 의미가 있었다고 생각해서
bcrypt 봐준다^^ 담엔 말썽부리지마

profile
잡코딩

0개의 댓글