비밀번호 강도 검사기

비밀번호 강도, 엔트로피 값 및 일반적인 약점을 검사합니다. 모든 검사는 브라우저에서 로컬로 실행됩니다.

강도 검사

엔트로피 값
강도:
오프라인(고속 GPU) 해독 시간 예측
온라인(제한 속도) 해독 시간 예측
검사 결과
  • 길이
  • 소문자
  • 대문자
  • 숫자
  • 기호
  • 연속
  • 반복
  • 블랙리스트
  • 키보드 패턴
  • 날짜
  • 주기
정책 구성
쉼표로 구분하며, 대소문자를 구분하지 않습니다. Leet 정규화 지원 (예: Pa$$w0rd → password).
최적화 제안
개인 정보 보호 안내:검사는 완전히 브라우저에서 로컬로 수행되며, 비밀번호는 업로드되지 않습니다。

사용 방법

로컬에서 비밀번호를 분석하고 실행 가능한 최적화 제안을 받습니다.
1) 비밀번호를 입력하거나 붙여넣습니다. 결과는 실시간으로 업데이트됩니다.
2) 필요에 따라 정책(최소 길이/문자 유형 요구 사항)을 조정합니다.
3) 일반적인 약한 단어를 블랙리스트에 추가하여 식별을 돕습니다(Leet 정규화 지원).
4) 가져오기/내보내기로 정책 설정을 공유합니다.

기능 특징

  • 100% 로컬 분석, 개인 정보 보호 우선입니다.
  • 고급 감지: 키보드 움직임, 날짜, 주기적 반복, 순서, 반복 등입니다.
  • Leet 정규화 블랙리스트 일치 (예: Pa$$w0rd → password).
  • 유연한 정책: 최소 길이와 문자 유형 요구 사항입니다.
  • 한 번의 클릭으로 정책 JSON 가져오기/내보내기.
  • 한 번의 클릭으로 감지기에서 분석

비밀번호 비교

비교 결과
엔트로피(A): 엔트로피(B):

자주 묻는 질문

제 비밀번호가 업로드되나요?
아닙니다. 모든 분석은 브라우저 내에서만 실행됩니다.
“엔트로피”란 무엇을 의미하나요?
대략적으로 추측하는 데 필요한 시도 횟수를 나타냅니다. 구조가 있을 때 실제 강도가 감소합니다.
점수가 떨어진 이유는 무엇인가요?
시퀀스, 날짜 또는 키보드 움직임과 같은 패턴은 강도를 낮춥니다.

보고서

보고서에는 비밀번호 텍스트가 포함되지 않으며, 지표와 설정만 포함됩니다.

관련 지식
엔트로피 값

엔트로피는 문자 집합과 길이를 기반으로 한 검색 공간의 크기를 추정하는 데 사용됩니다。 구조적 요소(패턴, 단어)가 있을 경우 원래 비트가 높게 보이더라도 유효 엔트로피는 감소합니다。

검사 항목 설명
  • 순차적인 시퀀스, 예를 들어 abcde 또는 12345입니다。
  • 동일 문자의 긴 반복(예: aaaa)입니다。
  • 사용자 지정 블랙리스트의 일반적인 약한 단어/패턴과 일치합니다。
  • 키보드 순서나 인접한 키 시퀀스(예: qwerty, asdf)입니다。
  • 날짜 형식(예: YYYYMMDD, dd-mm-yyyy)입니다。
  • 반복되는 부분 문자열(예: abcabc, 121212)입니다。
  • 블랙리스트와 일치하기 전에 Leet 정규화를 수행합니다(예: Pa$$w0rd → password)。
해독 시간 주의 사항

해독 시간은 대략적인 추정치일 뿐입니다。 실제 공격에서는 사전, 마스크 및 GPU를 사용합니다。 짧고 구조가 명확한 비밀번호는 종종 표면상의 엔트로피 값보다 훨씬 약합니다。

모범 사례
  • 먼저 긴 무작위 통과 구절(4개 이상의 단어) 또는 비밀번호 관리자가 생성한 비밀번호를 사용하세요。
  • 개인 정보, 날짜 및 예측 가능한 구조를 피하세요。
  • 비밀번호 관리자를 사용하고 가능한 한 다중 인증 요소(MFA)를 활성화하세요。
  • 비밀번호를 재사용하지 마세요;정보가 유출된 경우에만 변경하세요。

프로그래밍 언어로 비밀번호 강도를 검사하는 방법

다음은 커뮤니티에서 검증된 라이브러리를 사용한 최소한의 예제입니다. 기술 스택에 맞게 선택하세요.

JavaScript
<!-- CDN -->
<script src="https://unpkg.com/[email protected]/dist/zxcvbn.js"></script>
<script>
  const res = zxcvbn('P@ssw0rd!');
  console.log(res.score, res.crack_times_display);
</script>
                        
Node.js
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';

const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
                        
PHP
composer require bjeavons/zxcvbn-php
                        
<?php
require __DIR__ . '/vendor/autoload.php';

use ZxcvbnPhp\\Zxcvbn;

$zxcvbn = new Zxcvbn();
$res = $zxcvbn->passwordStrength('P@ssw0rd!');
echo $res['score'];
                        
Python
pip install zxcvbn
                        
from zxcvbn import zxcvbn

res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
                        
Go
go get github.com/nbutton23/zxcvbn-go
                        
package main

import (
  "fmt"
  zxcvbn "github.com/nbutton23/zxcvbn-go"
)

func main() {
  res := zxcvbn.PasswordStrength("P@ssw0rd!", nil)
  fmt.Println(res.Score, res.Guesses)
}
                        
Rust
# Add dependency
cargo add zxcvbn
                        
use zxcvbn::zxcvbn;

fn main() {
    match zxcvbn("P@ssw0rd!", &[]) {
        Ok(estimate) => {
            println!("score: {}", estimate.score()); // 0..4
            if let Some(times) = estimate.crack_times() {
                println!("offline: {:?}", times.offline_slow_hashing_1e4_per_second());
            }
        }
        Err(err) => eprintln!("zxcvbn error: {err}"),
    }
}
                        

설명: 이러한 라이브러리는 강도와 패턴을 추정하며, 이 페이지의 감지 항목과 약간의 차이가 있을 수 있습니다.