비밀번호 강도 검사기
비밀번호 강도, 엔트로피 값 및 일반적인 약점을 검사합니다. 모든 검사는 브라우저에서 로컬로 실행됩니다.
사용 방법
로컬에서 비밀번호를 분석하고 실행 가능한 최적화 제안을 받습니다.
1) 비밀번호를 입력하거나 붙여넣습니다. 결과는 실시간으로 업데이트됩니다.
2) 필요에 따라 정책(최소 길이/문자 유형 요구 사항)을 조정합니다.
3) 일반적인 약한 단어를 블랙리스트에 추가하여 식별을 돕습니다(Leet 정규화 지원).
4) 가져오기/내보내기로 정책 설정을 공유합니다.
기능 특징
- 100% 로컬 분석, 개인 정보 보호 우선입니다.
- 고급 감지: 키보드 움직임, 날짜, 주기적 반복, 순서, 반복 등입니다.
- Leet 정규화 블랙리스트 일치 (예: Pa$$w0rd → password).
- 유연한 정책: 최소 길이와 문자 유형 요구 사항입니다.
- 한 번의 클릭으로 정책 JSON 가져오기/내보내기.
- 한 번의 클릭으로 감지기에서 분석
자주 묻는 질문
제 비밀번호가 업로드되나요?
아닙니다. 모든 분석은 브라우저 내에서만 실행됩니다.
“엔트로피”란 무엇을 의미하나요?
대략적으로 추측하는 데 필요한 시도 횟수를 나타냅니다. 구조가 있을 때 실제 강도가 감소합니다.
점수가 떨어진 이유는 무엇인가요?
시퀀스, 날짜 또는 키보드 움직임과 같은 패턴은 강도를 낮춥니다.
관련 지식
엔트로피 값
엔트로피는 문자 집합과 길이를 기반으로 한 검색 공간의 크기를 추정하는 데 사용됩니다。 구조적 요소(패턴, 단어)가 있을 경우 원래 비트가 높게 보이더라도 유효 엔트로피는 감소합니다。
검사 항목 설명
- 순차적인 시퀀스, 예를 들어 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}"),
}
}
설명: 이러한 라이브러리는 강도와 패턴을 추정하며, 이 페이지의 감지 항목과 약간의 차이가 있을 수 있습니다.