

암호화: 특정 키를 사용하여 원본 데이터를 다시 원상복구 할 수 있는 형태로 변환 (양방향)
암호화 적용시, 암호화-복호화 대한 알고리즘이 노출될 경우 모든 비밀번호가 탈취됨
해싱: 해시 함수를 사용하여 원본 데이터를 고정 길이의 고유한 문자열로 변환하며, 원본 데이터로 되돌릴 수 없음 (단방향)
로그인 과정: 로그인 시 비밀번호 원본이 아닌, 입력받은 비밀번호를 해싱하여 데이터베이스에 저장되어 있는 해싱된 비밀번호와 일치하는지를 비교 → 데이터베이스에 저장할 때 사용한 해싱 알고리즘과 로그인 시에 사용한 해싱 알고리즘은 동일해야 함
사전 공격(Dictionary Attack): 유저들이 자주 사용하는 비밀번호들 ('0000', '1234', 'qwerty', 'password' 등)을 유명한 해시 알고리즘으로 변환한 해시값들을 저장한 테이블을 Rainbow Table이라고 칭함. 해커는 이 테이블에 있는 해시값들을 데이터베이스에 있는 해시값들과 비교해가며 만약 일치할 경우 원래 비밀번호값을 예측할 수 있게 됨
→ 솔드 (Salt): 유저 회원가입시, 각 사용자의 비밀번호에 대해 고유한 무작위 문자열을 생성하고 사용자의 비밀번호와 솔트를 결합해서 해시값을 계산하여 적용함
무차별 대입 공격(Brute Force Attack): 암호를 풀기 위해 가능한 모든 값을 대입하는 것
→ 사용자에게 예측하기 힘든 비밀번호를 사용하도록 강제
→ 일정 횟수를 실패할 경우 계정 잠금 or 딜레이 부여
→ CAPTCHA사용
→ 2단계 인층(2FA)
→ 슬로우 해싱(Slow Hashing): 해시 알고리즘이 빠르고 효율적일수록 비교적 짧은 시간동안 많은 해싱 및 로그인 시도를 할 수 있으므로 무차별 대입공격의 위험성이 오히려 늘어남. 따라서 느린 알고리즘을 사용하면 초당 수십억개의 해시가 가능한 수준에서 수천개의 수준으로 줄어들게 되면서, 무차별 대입공격을 효과적으로 실행하기 어려워짐.