한국어
  • password-cracking
  • rainbow-table-attack
  • hashing

당신의 비밀번호는 어떻게 해킹되나요? 비밀번호 보안을 어떻게 개선할 수 있을까요?

이 기사에서는 비밀번호를 해킹하는 몇 가지 고전적인 방법과 이러한 접근법의 기본 원리를 제시했습니다. 이러한 개념을 다루고 계정 소유자와 비밀번호 관리자 모두의 관점에서 비밀번호의 보안을 강화하는 방법을 설명했습니다.

Darcy Ye
Darcy Ye
Developer

우리는 종종 대규모 사용자 기반을 가진 일부 유명 앱의 사용자 비밀번호가 유출된다는 뉴스를 접합니다. 당신은 특정 앱을 사용하지 않기 때문에 그러한 사건이 당신과 무관하다고 느낄 수 있지만, 실제로는 그렇지 않습니다.

최근 트위터에서는 AI 방법이 비밀번호 해킹 속도를 크게 가속화할 수 있다는 뉴스도 있었습니다. 그래서 우리는 그 뒤에 숨겨진 복잡성을 이해하고 우리 비밀번호의 보안을 어떻게 개선할 수 있는지 알아보고자 했습니다.

PassGAN Twitter

비밀번호는 어떻게 해킹되나요?

일반적으로 계정 비밀번호는 다양한 해싱 알고리즘을 사용하여 처리된 후 데이터베이스에 저장됩니다. 비밀번호 해싱에 대해 보다 잘 이해하기 위해 이전 블로그를 참조할 수 있습니다. 불행히도 일부 서비스 제공자는 상식 부족으로 인해 비밀번호를 평문으로 데이터베이스에 저장합니다. 이 행위는 데이터가 유출될 경우 더 큰 피해를 초래할 수 있습니다.

해시된 비밀번호를 저장하면 데이터베이스 관리자조차 원본 비밀번호에 접근할 수 없으므로 보안성이 크게 향상됩니다. 입력된 비밀번호의 정확성을 확인할 때 동일한 해시 알고리즘을 사용하여 입력된 비밀번호를 처리합니다. 그 결과의 해시는 데이터베이스에 저장된 값과 비교됩니다. 두 해시 값이 일치하면 입력된 비밀번호가 올바른 것으로 간주됩니다.

간단히 말해, 비밀번호 해킹은 허용된 비밀번호 규칙에 맞는 문자열을 생성하고, 그런 다음 앞서 언급한 방법을 사용하여 이러한 문자열을 계속 확인하여 최종적으로 올바른 평문 비밀번호를 찾는 과정을 포함합니다.

비밀번호 해킹의 일반적인 방법

이 섹션에서는 비밀번호를 해킹하는 일반적인 세 가지 방법을 간략히 소개합니다.

무차별 대입 공격

무차별 대입 공격은 일반적으로 허용된 비밀번호 규칙 내의 모든 가능성을 열거하고 하나씩 시도합니다.

예를 들어, 휴대폰은 4자리 숫자 비밀번호를 설정할 수 있습니다. 무차별 대입 공격은 0000, 0001, 0002에서 9999까지 가능한 모든 조합을 하나씩 시도합니다.

무차별 대입 공격은 너무 많은 시도로 인해 매우 시간이 많이 소요됩니다. 비밀번호 길이가 $L$이고, 비밀번호 자릿수당 가능한 문자의 수가 $n$이라면, 무차별 대입 공격이 시도해야 하는 가능성의 수는 $n^L$로, 매우 큰 숫자입니다.

많은 비밀번호가 숫자, 대문자와 소문자, 특수 문자 조합을 요구하는 이유는 $n$을 증가시키기 위해서입니다. 이는 가능성의 수를 크게 증가시켜 비밀번호 해킹의 난이도를 높입니다.

사전 공격

사전 공격은 사전에서 단어를 사용하여 공백, 숫자, 특수 기호 및 다른 요소와 결합하여 다양한 비밀번호 조합을 형성하고 이러한 조합을 사용하여 비밀번호 일치를 시도합니다.

많은 사람들이 기억하기 쉽도록 의미 있는 문장을 비밀번호로 사용합니다. 사전 공격은 이러한 특징을 가진 비밀번호를 해킹하는 데 효율적인 방법입니다.

레인보우 테이블 공격

레인보우 테이블은 평문 비밀번호를 해시 값과 미리 계산한 매핑입니다. 데이터베이스에 저장된 해시 값을 레인보우 테이블의 것과 직접 비교하여 일치하는 항목을 찾으면 해당 평문 비밀번호를 직접 검색할 수 있습니다.

레인보우 테이블은 해시 값이 미리 계산된 경우 평문 비밀번호에 즉시 접근할 수 있는 장점이 있습니다(레인보우 테이블에 기록됨). 그러나 해시 값이 미리 계산되지 않은 경우(따라서 테이블에 없을 경우), 레인보우 테이블은 사용할 수 없습니다.

위에서 설명한 방법 외에도 여기에서 다루지 않은 수많은 다른 기술들이 있습니다. 일반적으로 이러한 방법의 조합은 가능한 모든 비밀번호를 포함하고 해킹 속도를 높입니다.

비밀번호 해킹을 어떻게 가속화할 수 있나요?

이전 섹션에서 일부 고전적인 비밀번호 해킹 방법을 간략히 소개했습니다. 이들로부터 비밀번호 해킹 속도나 성공률을 높일 수 있는 몇 가지 아이디어를 요약할 수 있습니다.

비밀번호를 해킹하려면 일반적으로 두 단계를 거칩니다:

  1. 비밀번호의 검색 공간 결정(가능한 비밀번호 생성)
  2. 이전 단계에서 얻은 가능한 비밀번호에 대해 해시 알고리즘을 사용하여 해시를 생성하고 이를 해킹하려는 비밀번호의 해시와 비교

앞서 언급한 사전 공격과 레인보우 테이블 공격은 이 두 단계를 각각 최적화합니다:

  • 사전 공격은 비밀번호의 검색 공간을 좁힙니다. "사용자가 실제 의미를 가진 단어 조합으로 비밀번호를 생성하는 경향이 있다"는 가정에 기반하여 zzzz와 같은 단어는 사전에 포함되지 않습니다. 이는 잠재적 비밀번호로 시도되지 않을 것을 의미합니다. 이 연습은 잘못된 답변을 미리 배제하는 것과 유사합니다. 다지선다 문제를 해결하는 것과 유사하게, 정답을 확신할 수 없지만 어떤 선택이 확실히 틀리다는 것을 식별할 수 있습니다. 이러한 명백히 틀린 선택을 제거함으로써 남은 선택 중에서 정답을 맞출 가능성이 높아집니다.
  • 레인보우 테이블 공격은 해시 알고리즘의 실행 시간을 가속화합니다. 데이터 구조에 익숙한 개인에게 조회는 $O(1)$ 복잡도의 작업이며, 시간복잡도 측면에서 $O(1)$보다 단순한 작업은 없습니다. 반면 MD5 및 SHA와 같은 일반적으로 사용되는 해시 알고리즘의 시간 복잡도는 $O(n)$이며, 이는 $O(1)$보다 현저히 느립니다.

실제로 비밀번호 해킹 프로세스를 최적화하는 것은 위의 두 관점에서 시작됩니다. 문자열 해싱 알고리즘의 시간 복잡도 $O(n)$를 최적화할 여지가 상대적으로 적기 때문에, 하드웨어 또는 계산 방법을 개선하는 데 더 많은 고려가 이루어집니다. 이는 여기에서 자세히 설명하지 않습니다.

AI는 어떻게 비밀번호 해커를 도와주나요?

비밀번호 해킹 전체 작업에서 AI의 역할은 노출된 평문 비밀번호에서 특정 패턴과 구성 방법을 학습하는 데까지 확장됩니다. 이후 AI는 이러한 비밀번호 구성 패턴을 시뮬레이션하여 여러 가능한 비밀번호를 생성할 수 있습니다. 이후 AI는 해시 알고리즘 또는 특수 하드웨어를 사용하여 비밀번호 해킹을 실행할 수 있습니다.

실제로 다른 비밀번호 해킹 도구와 비교하여 PassGAN의 강점은 "가장 유력한 비밀번호를 가능한 한 빨리 추측하는 것"입니다. 이는 우리가 앞서 말한 "가능한 비밀번호 검색 공간 축소"의 아이디어입니다.

Password Guessing Prob

비밀번호를 안전하게 만드는 방법

비밀번호를 보호하는 방법을 두 가지 관점에서 설명하겠습니다. 여기서는 간단히 비밀번호 자체에서 시작하여 다중 인증(MFA) 등 계정 보안을 보장하기 위한 다른 수단은 논의하지 않겠습니다.

신원 서비스 제공자의 관점에서

신원 서비스를 제공하는 제공자로서 그들은 모든 사용자의 비밀번호를 호스팅하고, 이를 보호할 의무를 지니고 있습니다. 사용자의 비밀번호 보안을 강화하기 위해 구현할 수 있는 몇 가지 방안을 소개합니다:

  1. 비밀번호를 평문으로 저장하지 않기: 이는 상식처럼 들리지만 여전히 일부 서비스 제공자는 비밀번호를 데이터베이스에 평문으로 저장합니다. 해시 값을 사용하여 비밀번호를 저장하면 보안 계층이 추가됩니다. 심지어 데이터베이스가 손상되더라도 해커는 해시된 비밀번호를 크랙하는 데 상당한 노력을 기울여야 합니다.

  2. 비밀번호 확인을 위한 API 인터페이스에 속도 제한 적용: 앞서 언급한 비밀번호 해킹 프로세스를 되돌아보면, 이 과정의 필수 부분은 비밀번호가 올바른지 "확인하는" 것입니다. 비밀번호는 신원 서비스 제공자에게 맡겨져 있으므로, 그들만이 비밀번호 확인을 위한 API를 제공할 수 있습니다. 이 API 접근 빈도를 제한함으로써, 해커가 비밀번호 추측확률이 높은 경우에도 여러 가지 비밀번호를 빠르게 시도하지 못하게 막을 수 있습니다.

  3. 더 복잡한 비밀번호 구성 강제: 앞서 언급한 바와 같이, 주어진 비밀번호 길이 내에서 문자 다양성을 높이면 복잡성이 증가합니다. 게다가 앞서 설명한 AI 기법을 사용하여 제출 전에 비밀번호 보안을 평가하고, 비밀번호가 약하다고 판단되면 사용자가 더 강력한 대안을 선택하도록 경고할 수 있습니다.

사용자 측면에서

계정 소유자와 관련 디지털 자산으로서, 사용자는 계정 비밀번호의 보안을 최대한 신경 써야 합니다.

  1. 다른 웹사이트에서 동일한 비밀번호 사용하지 않기: 일부 웹사이트에서 비밀번호를 입수한 많은 해커는 다른 웹사이트에도 해당 계정 자격 증명을 사용하려고 합니다. 여러 서비스에 대한 여러 계정이 동일한 비밀번호를 공유하면, 앞서 언급한 시나리오에서 계정 손실이나 정보 유출 위험이 있을 수 있습니다.

  2. 가능한 한 순전히 무작위 비밀번호를 선택하기: 이 방법은 일반적으로 사람들이 사용하는 공통 비밀번호 패턴(앞서 언급한 영어 문장 사용)을 재사용하지 않도록 함으로써 해커가 비밀번호 검색 공간을 "축소"하기 어렵게 하고 비밀번호 복잡성을 높입니다.

신원 서비스의 인프라 제공업체로서, Logto는 사용자의 계정 보안을 보호하기 위해 앞서 언급한 최고의 방법을 많이 구현했습니다. 이를 통해 사용자는 계정 손실 우려 없이 다양한 앱을 사용할 수 있으며, 온라인 서비스 제공업체는 사용자 데이터 보안을 최소한의 노력으로 보장하고 핵심 비즈니스 활동에 집중할 수 있습니다.