반응형

📝평문 저장

  • 비밀번호를 그대로 저장
  • 구현이 간단하지만 보안에 매우 취약하다

 

📝단순 해싱

  • 해시 함수를 이용해 해시값으로 변환하여 저장
  • 평문에 비해 보안이 향상되지만 무차별 대입 공격에 취약하며 동일한 비밀번호가 동일 해시값을 가짐으로 레인보우 테이블 공격에 취약하다

 

📝솔팅

  • 비밀번호에 무작위 값(Salt)을 추가한 후 해시 함수로 변환
  • 동일 비밀번호도 서로 다른 해시 값을 가져 레인보우 테이블 공격 방지 가능하지만 빠른 해시 함수는 무차별 대입 공격에 취약하다

 

📝키 스트레칭

  • 비밀번호에 무작위 값을 추가한 이후 해시 함수를 여러번 실행시킨다
  • 주로 CPU 사용량을 증가시켜 해시 계산 속도를 늦추는 데 중점을 둡니다
  • 최근 일반적 장비로는 1초에 50억개 이상의 해시값을 비교할 수 있지만 스트레칭을 적용하면 장비에서 1초에 5번정도만 비교가 가능하다. 즉, 무차별 대입 공격에 강하지만 나도 저장해야하기 때문에 서버에 부담이 된다.
    • PBKDF2 (Password-Based Key Derivation Function 2)
      • 비밀번호와 솔트를 결합한 후 여러 번 반복하여 해시 값을 생성합니다.
    • bcrypt
      • 키 스트레칭을 구현하며, 비교적 느리게 설계되어 공격자가 비밀번호를 추측하는 속도를 늦춥니다.

📝메모리 집약적 함수

  • 메모리 집약적 함수는 해시 계산 과정에서 많은 메모리 및 CPU를 사용하도록 설계되어, 하드웨어 가속 공격에 대한 저항력을 높입니다.
    • Argon2
      • 비밀번호 해시를 생성하는 최신 알고리즘으로, 메모리와 연산 시간을 조절할 수 있으며, 다양한 공격에 대해 강력한 보안을 제공합니다.
    • scrypt
      • bcrypt와 유사하지만, 메모리 사용량을 증가시켜 더욱 강력한 보안을 제공합니다.

 

반응형