[TIL] 암호화

sooyoung choi·2023년 11월 13일
1

Javascript, Node.js

목록 보기
20/37
post-thumbnail

비밀번호를 Hash 된 값으로 넣어보자!

1. Hash?

  • 단방향 암호화 기법으로 해시함수 (해시 알고리즘) 이용하여 고정된 길이의 암호화된 문자열로 바꾸는 것
  • 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수
  • 매핑 전 원래 데이터의 값을 키(key), 매핑 후 데이터의 값을 해시 값(hash value), 매핑하는 과정을 해싱(hashing)이라고 한다.

2. 암호화

2-1. 단방향 암호화

  • 평문을 암호화
  • 다시 복호화는 불가능
  • 해시 알고리즘을 이용하여 구현한다.
  • 해시 알고리즘은 동일한 평문에 대하여 항상 동일한 해시값을 가진다, 특정 해시 알고리즘에 대해 특정 평문이 어떤 해시값을 갖는 지 알 수 있다.

- Salting

  • 단방향 해시로 암호화를 진행할때, 추가적으로 암호화를 진행하는 방식이다.
  • 추가 데이터가 포함되었기 때문에 해시값이 달라진다.

- Key Stretching

  • 단방향 해쉬값을 계산 한 후, 그 해쉬값을 또 다시 해시하고 그 과정을 반복하는 방식


2-2. 양방향 암호화

  • 비대칭키 암호화와 대칭키 암호화로 나뉜다.
  • 비대칭키
    : 암호화, 복호화 모두 가능, 암호화를 진행할 때 키를 이용한다.
    : 암호화때 사용하는 키와 복호화할 때 사용하는 키를 다르게 사용한다.
  • 대칭키
    : 암호화, 복호화 모두 가능, 같은 키를 이용한다.


3. bcrypt

  • 키 방식의 대칭형 블록 암호에 기반을 둔 암호화 해시 함수.
  • Salting, Key Stretching 적용한다.
  • 단방향 해시 알고리즘이므로 복호화가 불가능하다.
  • 비교하고 싶은 평문을 암호화된 값이 가지고 있는 알고리즘 , salt 등을 이용해 해시 진행 후 암호화된 값과의 비교를 통해 검증을 진행한다.

3-1. 구조

$2b$12$76taFAFPE9ydE0ZsuWkIZexWVjLBbTTHWc509/OLI5nM9d5r3fkRG
 \/ \/ \____________________/\_____________________________/
Alg Cost       Salt                        Hash
  • 2b : 해시 알고리즘 식별자
  • 12 : Cost Factor로 Key Stretching의 수 (2의 12승번)
  • 76taFAFPE9ydE0ZsuWkIZe : 16Byte 크기의 Salt, Base64로 인코딩된 22개의 문자
  • xWVjLBbTTHWc509/OLI5nM9d5r3fkRG : 24Byte의 해시 값, Base64로 인코딩된 31개의 문자


참고자료
: https://velog.io/@xxhaileypark/Data-Structure-%ED%95%B4%EC%8B%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-hash-algorithm
: https://velog.io/@yenicall/%EC%95%94%ED%98%B8%ED%99%94%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-Bcrypt

2개의 댓글

comment-user-thumbnail
2023년 11월 14일

부지런합니다~~ಠ_ಠ

1개의 답글