이전 포스트에서 sign-up 함수를 통해 db연결까지 간단하게 구현했다.
다만, password가 단순 텍스트로 저장되고 있는 점이 문제였는데 이 부분을 bcrypt를 활용하여 해싱해보자
간단하다 아직 없다면 깔아주고
pip install bcrypt
가져다 쓸 때는
import bcrypt
기존에 구현했던 sign-up을 가져와서 password를 bcrypt를 이용해서 해싱하고 저장하자
@app.route('/sign-up', methods=['POST'])
def sign_up():
new_user = request.json
new_user['password'] = bcrypt.hashpw(
new_user['password'].encode('utf-8'), bcrypt.gensalt()
)
new_user_id = insert_user(new_user)
check_user = str(new_user_id)
if check_user is None :
return 'fail', 400
return check_user, 200
변경한 코드로 회원가입

password 상태

확실히 안전해졌다.
+추가
bcrypt가 하는 일은 다음과 같다
+salting : 음식에 간을 더 하듯 랜덤한 데이터를 더 해서 해싱한다. 어찌저찌하여 데이터를 추출하더라도 어디서부터 어디까지가 기존 데이터인지 알 수 없게 한다. 일련의 해시 데이터를 쭉 넣어서 공격하는 rainbow attack에 효과적이다.
+key streching
기존 단방향 해시 알고리즘의 실행 속도가 너무 빠르다는 취약점을 보완하기 위해서 N번의 해싱을 반복하는 것이 키 스트레칭이다. 물론 애초에 알고리즘 실행속도가 매우 빠르기 때문에 인증 실패를 적절하게 제한하여 사용하면 좋다.
도식화하면
salt data + password
N times hashing
Hash result (+ 접근 횟수 제한 = 별도 구현)