암호화(Bcrypt)

LEE_JUN_HA·2021년 2월 28일
0

암호화 종류

SHA-2(Secure Hash Algorithm 2)

미국 NSA에서 설계한 암호화 해시 함수.
digest size는 224, 256, 384or512 bit로 6개의 해시함수로 구성되어졌음.
GPU를 이용한 연산속도가 매우 빠르기 때문에 password 암호화에 권장되지 않음
GPU 연산속도가 빠를수록 공격자의 하드웨어를 통한 오프라인 brute force에 더 취약하다.
빠른 해시를 사용하여 암호화를 진행시 공격자는 오프라인 공격으로 초당 수십억개의 해시를 계산할 수 있다.

PBKDF2(Password-Based Key Derivation Function)

해시함수의 컨테이너 역할을 한다.
검증된 해시함수만을 사용한다.
해시함수와 salt를 적용 후 해시 함수의 반복횟수를 지정하여 암호화할 수 있다.
가장 많이 사용되는 함수. ISO 표준에 적합하며 NIST에서 승인된 알고리즘이다

Bcrypt

bcrypt.hashpw(password, bcrypt.gensalt())

1999년에 publish된 password-hashing function이다.
Blowfish 암호를 기반으로 설계된 암호화 함수이며 현재까지 사용중인 가장 강력한 해시 메커니즘 중 하나이다.
보안에 집착하기로 유명한 OpenBSD에서 사용하고 있다.
.NET 및 Java를 포함한 많은 플랫폼,언어에서 사용할 수 있다.
반복횟수를 늘려 연산속도를 늦출 수 있으므로 연산 능력이 증가하더라도 brute-forece 공격에 대비할 수 있다.

오늘의집 클론을 하면서 쓰였던 암호화

hashed_password : data로 받은 password를 암호화해서 저장해주겠다는 이름

bcrypt.hashpw : 실제 암호화를 해주는 작업(bctypt는 byte타입을 써서 string타입인 password를 byte로 변환하기 위해 encode를 해준다)

bcrypt.gensalt : salt를 해주어 비밀번호를 더욱 복잡(ex: elwkgjlk3j209wvnlkwjvwlkjvwekl)하게 만들어준다

decode : 인코드를 하면 b'password'의 형태로 저장이 되는데 나중에 비밀번호 비교를 비교하려면 byte타입이면 비교가 안 되기 때문에 다시 decode를 마지막으로 해준다

profile
할 수 있다, 할 수 있다, 아자뵤!

0개의 댓글