이 페이지에서는 reCAPTCHA의 비밀번호 유출 감지 기능을 사용하여 비밀번호 유출 및 유출된 사용자 인증 정보를 감지하여 계정 탈취(ATO)와 사용자 인증 정보 반복 입력 공격을 방지하는 방법에 대해 설명합니다. reCAPTCHA에서는 평가의 일부로 사용자 인증 정보(비밀번호)를 정기적으로 감사하여 유출 또는 위반이 없는지 확인할 수 있습니다. 이러한 평가를 수행하기 위해 Google은 비밀번호 진단 기능을 사용합니다.
시작하기 전에
Make sure that billing is enabled for your Google Cloud project.
reCAPTCHA에서 비밀번호 유출 감지 기능을 사용하려면 프로젝트에 결제를 연결하고 사용 설정해야 합니다. 신용카드 또는 기존 Google Cloud 프로젝트 결제 ID를 사용하여 결제를 사용 설정할 수 있습니다. 결제와 관련해 도움이 필요하면 Cloud Billing 지원팀에 문의하세요.
위반 및 유출된 사용자 인증 정보 확인
사용자 인증 정보가 유출되었는지 확인하려면 로그인, 비밀번호 변경, 비밀번호 재설정과 같은 작업 평가 시 비밀번호 유출 감지를 사용합니다.
비밀번호 유출 및 유출된 사용자 인증 정보를 확인하려면 다음 단계를 완료하세요.
요청 매개변수 생성
높은 수준의 개인 정보 보호 프로토콜에서 요구하는 암호화 함수를 사용하여 필요한 요청 매개변수를 계산해야 합니다. reCAPTCHA는 이러한 필드를 생성하는 데 도움이 되는 Java 및 TypeScript 라이브러리를 제공합니다.
비밀번호 확인 인증을 만들려면
PasswordCheckVerifier
객체를 만듭니다.PasswordCheckVerifier verifier = new PasswordCheckVerifier();
인증을 시작하려면
PasswordCheckVerifier#createVerification
을 호출합니다. 이 메서드는 사용자 이름과 비밀번호를 사용하여 비밀번호 확인을 수행하는 매개변수를 계산합니다.PasswordCheckVerification verification = verifier.createVerification("username", "password").get();
인증 매개변수를 사용하여 평가를 만듭니다.
byte[] lookupHashPrefix = verification.getLookupHashPrefix(); byte[] encryptedUserCredentialsHash = verification.getEncryptedUserCredentialsHash();
바이트 배열
lookupHashPrefix
및encryptedUserCredentialsHash
에는 비밀번호 확인Assessment
를 시작하는 데 필요한 매개변수가 포함되어 있습니다.
비밀번호 유출 감지를 위한 평가 만들기
projects.assessments.create
메서드를 사용합니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PROJECT_ID: Google Cloud 프로젝트 ID
- LOOKUP_HASH_PREFIX: 사용자 이름 SHA-256 해시 프리픽스의 프리픽스
- ENCRYPTED_USER_CREDENTIALS_HASH: 암호화된 사용자 인증 정보 Scrypt 해시
HTTP 메서드 및 URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
JSON 요청 본문:
{ "private_password_leak_verification": { "lookup_hash_prefix": "LOOKUP_HASH_PREFIX", "encrypted_user_credentials_hash": "ENCRYPTED_USER_CREDENTIALS_HASH" } }
요청을 보내려면 다음 옵션 중 하나를 선택합니다.
curl
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"
PowerShell
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/698047609967/assessments/fb22000000000000", "score": 0, "reasons": [], "privatePasswordLeakVerification": { "lookupHashPrefix": "zoxZwA==", "encryptedUserCredentialsHash": "AyRihRcKaGLj/FA/r2uqQY/fzfTaDb/nEcIUMeD3Tygp", "reencryptedUserCredentialsHash": "Aw65yEbLM39ww1ridDEfx5VhkWo11tzn/R1B88Qqwr/+" "encryptedLeakMatchPrefixes": [ "n/n5fvPD6rmQPFyb4xk=", "IVQqzXsbZenaibID6OI=", ..., "INeMMndrfnlf6osCVvs=", "MkIpxt2x4mtyBnRODu0=", "AqUyAUWzi+v7Kx03e6o="] } }
평가에서 유출된 사용자 인증 정보 확인
평가 응답에서 reEncryptedUserCredentials
및 encryptedLeakMatchPrefixes
필드를 추출하고 확인자 객체에 전달하여 사용자 인증 정보 유출 여부를 확인합니다.
PasswordCheckResult result = verifier.verify(verification,
result.getReEncryptedUserCredentials(),
result.getEncryptedLeakMatchPrefixes()
).get();
System.out.println("Credentials leaked: " + result.areCredentialsLeaked());
결과 해석 및 조치
평가 응답은 사용자 인증 정보가 유출되었는지 확인하고 사용자를 보호하기 위해 적절한 조치를 취하는 데 사용할 수 있는 정보를 제공합니다.
다음 표에는 유출된 비밀번호가 감지되었을 때 취할 수 있는 권장 조치가 나와 있습니다.
유출된 비밀번호 감지됨 | 사용자 보호를 위한 조치 |
---|---|
로그인 중 |
|
계정 생성 또는 비밀번호 재설정 중 |
|
사이트에서 아직 MFA 제공업체를 사용하지 않는 경우 reCAPTCHA의 MFA 기능을 사용할 수 있습니다.
코드 샘플
Java
reCAPTCHA에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js (TypeScript)
reCAPTCHA에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
다음 단계
- 다중 인증(MFA) 사용 방법 알아보기
- reCAPTCHA 계정 방어 도구를 사용하여 사용자 계정을 보호하는 방법 알아보기