서버에 비밀번호 저장 방식과 짧은 비밀번호를 사용하면 안되는 이유: 해싱이란 무엇인가?

서론

오늘날의 디지털 세계에서 개인 정보 보호는 필수적입니다. 특히 사용자의 비밀번호를 안전하게 관리하는 것은 모든 웹 서비스 개발자의 책임입니다. 이 글에서는 서버에 비밀번호를 저장하는 여러 방법과 그 중에서도 ‘해싱(Hashing)’이라는 기법과 짧은 비밀번호를 사용하면 안되는 이유에 대해 알아보겠습니다.

짧은 비밀번호

비밀번호 저장의 중요성

비밀번호는 사용자의 신원을 확인하는 가장 기본적인 방법입니다. 따라서 비밀번호가 유출되면 사용자의 개인 정보와 금융 정보가 위험에 노출될 수 있습니다. 이러한 이유로, 비밀번호는 단순히 서버에 평문(Plain Text)으로 저장되어서는 안 됩니다.

해싱이란 무엇인가?

해싱은 데이터를 특정 알고리즘을 통해 고정된 길이의 문자열로 변환하는 과정입니다. 이렇게 변환된 문자열을 ‘해시 값’이라고 합니다. 해싱의 중요한 특징은 원본 데이터로부터 해시 값을 생성할 수는 있지만, 해시 값에서 원본 데이터를 복원할 수는 없다는 점입니다.

해싱 알고리즘의 예

  • SHA-256: 보안성이 매우 높은 알고리즘으로, 결과로 256비트의 해시 값을 생성합니다.
  • MD5: 빠른 속도를 자랑하지만, 보안 취약점이 발견되어 현재는 권장되지 않습니다.

비밀번호의 해싱 과정

  1. 사용자가 비밀번호를 입력합니다.
  2. 해싱 알고리즘을 통해 비밀번호를 해시 값으로 변환합니다.
  3. 이 해시 값을 데이터베이스에 저장합니다.

로그인 시, 입력된 비밀번호를 같은 해싱 알고리즘으로 다시 해시하여 저장된 해시 값과 비교합니다. 이 과정에서 원본 비밀번호가 노출될 위험이 없습니다.

해시된 비밀번호의 길이

해시 함수는 입력 데이터의 길이에 관계없이 일정한 길이의 해시 값을 생성합니다. 예를 들어, SHA-256은 항상 256비트 길이의 해시 값을 반환합니다. 이러한 고정된 길이는 데이터의 일관성을 유지하고, 데이터베이스에 저장할 때 예측 가능한 공간을 사용할 수 있도록 합니다.

해싱 예시

MD5로 예를 들어 ‘a’라는 문자열은 항상 ‘0cc175b9c0f1b6a831c399e269772661’가 나오고 ‘abc’라는 문자열은 ‘900150983cd24fb0d6963f7d28e17f72’로 항상 같은 값이 나오게 됩니다.

다음 링크와 같은 웹 툴사이트에서 해싱을 체험해보시면 위의 값의 해시는 항상 같은 값으로 나오는 것을 확인할 수 있습니다.

https://purplemix.studio/tool/md5-generator

짧은 비밀번호의 취약점

짧은 비밀번호는 취약한데, 이는 주로 두 가지 이유 때문입니다.

  • 첫째, 짧은 비밀번호는 가능한 조합의 수가 적기 때문에 무차별 대입 공격(brute-force attack)에 취약합니다. 해커들은 자동화된 도구를 사용하여 가능한 모든 조합을 빠르게 시도할 수 있으며, 짧은 비밀번호일수록 더 빠르게 올바른 조합을 찾아낼 수 있습니다.
  • 둘째, 짧은 비밀번호는 레인보우 테이블 공격에 취약합니다. 레인보우 테이블은 다양한 문자열의 해시 값들을 미리 계산하여 저장한 데이터베이스입니다. 해커는 이 테이블을 사용하여 해시 값으로부터 원래의 비밀번호를 빠르게 찾아낼 수 있습니다. 비밀번호가 짧고 간단할수록 레인보우 테이블에 해당하는 해시 값이 이미 존재할 확률이 높아집니다.

따라서, 보안을 강화하기 위해 긴 비밀번호를 사용하는 것이 중요하며, 복잡성을 높이기 위해 숫자, 대문자, 소문자, 특수 문자를 혼합하는 것이 권장됩니다.

추가 보안 조치

단순한 해싱 외에도 추가적인 보안 조치가 필요합니다. 예를 들어, ‘솔트(Salt)’는 해싱 과정에 임의의 데이터를 추가하여 같은 비밀번호라도 다른 해시 값을 생성하게 합니다. 이는 레인보우 테이블 공격 같은 해킹 시도를 방어하는 데 도움을 줍니다.

결론

암호화 기술은 지속적으로 발전하고 있으며, 서버에 비밀번호를 저장하는 방법은 사용자의 개인 정보를 보호하는 데 핵심적인 역할을 합니다. 해싱은 이 과정에서 매우 중요한 역리를 하며, 보다 안전한 인터넷 환경을 만드는 데 기여합니다. 또 다른 유용한 글도 보시려면 ‘여기‘를 눌러주세요.