한국어

개발자 도구 · UUID 생성기

무작위 UUID는 비밀번호 재설정이나 세션 토큰으로 안전합니까?

· 그것이 중요한 이유

uuid 암호화 브라우저 API

CSPRNG 지원 UUID, 해시된 저장소, 만료 시간 및 사용 시 무효화를 별도의 문제로 표시하는 비밀번호 재설정 토큰 흐름
원본 ToolAcre 벡터 일러스트레이션

CSPRNG의 v4 UUID에는 엔트로피가 많은데 보안 검토자가 여전히 UUID 토큰에 눈살을 찌푸리는 이유는 무엇입니까? 이 게시물에서는 엔트로피 질문과 설계 질문을 분리합니다.

행의 UUID을 사용하는 재설정 링크 — 일반적인 바로가기와 안전하지 않을 수 있는 두 가지 매우 다른 이유

일반적인 단축키: 사용자의 UUID 행 식별자를 비밀번호 재설정 토큰으로 사용합니다. 테이블에는 uuid 열이 있습니다. 그것은 독특하다; 추측하기 어렵습니다(v4인 경우). URL은 /reset? 토큰=550e8400-e29b-41d4-a716-446655440000입니다. 보안 검토자는 UUID이 약해서가 아니라 독립적이어야 하는 두 가지 문제를 결합하기 때문에 즉시 이를 거부합니다. UUID 행은 안정적이며 일반적으로 공개적으로 표시됩니다(URL, API, 로그에서). 재설정 토큰은 일회용이어야 하며 비밀이어야 합니다. UUID 행을 토큰으로 재사용한다는 것은 사용자의 ID와 재설정 자격 증명이 동일한 값이고 자격 증명이 만료되지 않고 영원히 지속된다는 것을 의미합니다. 사용자의 ID를 알고 있는 공격자가 재설정을 수행할 수 있습니다. 5년 전에 재설정 링크를 복사하여 붙여넣은 사용자는 계속 사용할 수 있습니다. 이는 엔트로피 결함이 아니라 설계 결함입니다.

엔트로피 검사: 122 임의 비트 — CSPRNG에서 생성된 v4를 무차별 대입으로 추측할 수 없는 이유

무작위성 검사는 필요하지만 충분하지는 않습니다. 버전 4은 4개의 버전 비트와 2개의 변형 비트를 예약하여 구현 시 다른 필드를 임의로 채울 때 128 - 4 - 2 = 122 임의 위치를 ​​남겨둡니다. 해당 파생어에는 만료, 보관 또는 승인에 대한 내용이 없습니다. 생성기 검사에서는 해당 필드가 Math.random 또는 타임스탬프가 아닌 CSPRNG에서 왔는지 묻습니다. ToolAcre는 해당 발전기 경계를 충족합니다. 디자인 검사는 애플리케이션별로 유지됩니다. 자격 증명 재설정에는 별도의 수명 주기, 단방향 저장된 표현, 성공적인 사용 후 무효화 및 서비스의 위험 정책에서 선택한 만료가 필요합니다. 사용자의 영구 레코드 ID를 재사용하면 ID가 안전하게 생성된 경우에도 분리가 실패합니다.

생성기 확인: UUID 토큰이 실제로 실패하는 경우 — Math.random 기반 생성, v1 타임스탬프 및 MAC 주소, 예측 가능한 시드

작동된 예: 세 가지 검사에 실패했다가 통과하는 비밀번호 재설정 체계입니다. 엔트로피 검사에 실패합니다. 서버는 v4 UUID로 포장된 Math.random()을 통해 재설정 토큰을 발행합니다. 공격자는 세 개의 토큰을 관찰하고 네 번째 토큰을 예측합니다. 생성기 확인에 실패합니다. 서버는 값에 생성 타임스탬프와 MAC 주소를 포함하여 v1 UUID을 재설정 토큰으로 사용합니다. 공격자는 타임스탬프를 읽고 재설정이 실행된 시기를 파악하고 검색 창을 좁힙니다. 엔트로피 검사는 통과했지만 디자인 검사에는 실패했습니다. 서버는 crypto.getRandomValues의 v4 UUID를 사용하지만 이를 데이터베이스에 일반 텍스트로 저장하고 만료를 설정하지 않습니다. 데이터베이스를 침해한 공격자는 재설정 토큰을 읽고 이를 사용하여 몇 주 후에 계정을 재설정합니다. 세 가지 검사는 독립적입니다. 세 가지를 모두 통과해야 합니다.

디자인 확인: 식별자 대 자격 증명 — 레코드의 기본 키를 비밀로 재사용하는 이유 두 가지가 독립적으로 순환되어야 합니다.

엔트로피 및 생성기 검사를 통과했지만 설계 검사(해시 없음, 만료 없음, 사용별 무효화 없음)에 실패하는 재설정 토큰 체계는 여전히 취약합니다. 서버 측 토큰 처리: 사용자가 비밀번호 재설정을 요청하면 crypto.getRandomValues에서 새로운 무작위 토큰(행 UUID 아님)을 생성합니다. 제시된 값이 아닌 단방향 표현을 저장하고, 정책별 만료를 설정하고, 성공적인 사용 후 기록을 무효화합니다. 사용자가 링크를 클릭하면 이메일로 사용자를 조회하고, 저장된 해시를 가져오고, 제공된 토큰을 해시와 비교하고, 만료를 확인하고, 토큰이 유효하고 아직 만료되지 않은 경우에만 재설정을 실행합니다. 재사용할 수 없도록 토큰을 즉시 무효화(삭제하거나 사용된 것으로 표시)하세요. 원시 토큰을 기록하지 마십시오. 사용자 ID와 작업만 기록합니다.

서버측 토큰 처리 — 해시 저장, 만료 설정, 사용 시 무효화, 원시 값 기록 안 함

토큰은 해시되지 않는 한 오류 메시지나 데이터베이스에 표시되어서는 안 됩니다. 전체 인증 설계는 UUID 문서의 범위를 벗어나지만 원칙은 유지됩니다. 122비트 무작위 토큰은 본질적으로 액세스 토큰이 아닙니다. 무작위성은 쉬운 부분입니다. ToolAcre 생성기는 CSPRNG 지원 UUID를 제공합니다. 어려운 부분은 설계입니다. 저장 전 해싱, 만료 시간 설정, 사용 무효화, 영구 ID를 임시 비밀로 재사용 방지, 누가 언제 무엇에 액세스했는지 감사합니다. 토큰의 엔트로피만을 기반으로 재설정 링크 방식을 승인하는 보안 검토자는 나머지 분석을 건너뜁니다. CSPRNG 지원 UUID가 해싱, 만료 및 무효화 없이 비밀번호 재설정 링크에 충분하다고 생각하는 개발자는 위협을 과소평가하고 있습니다. 무작위성은 추측을 방지합니다. 디자인은 재생, 만료 및 오용을 방지합니다.

실제 사례 — 각 검사에 대해 재설정 링크 방식을 검토하고 취약한 부분을 다시 작성

ToolAcre 생성기는 임의성 부분을 올바르게 수행합니다. 애플리케이션은 디자인 부분을 올바르게 수행해야 합니다. 세 가지 검사 모두에 대해 자신의 재설정 링크 코드를 테스트하십시오. Math.random이 아닌 CSPRNG(crypto.getRandomValues, crypto.randomUUID 또는 암호화 라이브러리)를 사용합니까? 토큰에 만료 시간이 있나요? 토큰은 저장되기 전에 해시됩니까? 토큰은 사용 후 무효화되나요? 코드는 사용자의 영구 ID를 임시 토큰으로 재사용하지 않도록 합니까? 이 모든 질문에 '예'라고 대답했다면 재설정 링크 디자인은 건전한 것입니다. ToolAcre 생성기는 CSPRNG 부분입니다. 나머지는 신중하게 검토해야 하는 애플리케이션 코드입니다. 세 가지 보안 계층을 이해하면 타사 UUID 라이브러리 및 프레임워크를 감사하는 데 도움이 됩니다. 라이브러리를 평가할 때 약한 무작위 소스가 아닌 CSPRNG(엔트로피 검사)를 사용하는지 확인하세요. 사용하는 소스와 그 이유를 문서화하는지 확인하십시오(생성기 확인).

여기서 다루지 않는 내용 — 토큰 엔트로피만큼 중요한 전체 인증 설계, MFA 및 속도 제한

예제 코드와 문서가 해싱, 만료, 무효화(설계 확인)와 같은 설계 원칙을 강조하는지 확인하세요. 세 가지 검사를 모두 통과하는 라이브러리는 드뭅니다. 대부분은 엔트로피에만 초점을 맞춥니다. ToolAcre 생성기는 crypto.getRandomValues를 사용하여 엔트로피 및 생성기 검사를 전달합니다. 설계 확인은 귀하의 책임입니다. 라이브러리는 만료 요구 사항이나 해싱 전략을 알 수 없습니다. 깨진 재설정 링크 시스템을 디버깅하면 일반적으로 세 가지 오류 중 하나가 드러납니다. 사용자가 더 이상 작동하지 않는 재설정 링크를 받았다고 보고하는 경우 문제는 만료일 수 있습니다. 즉, 토큰이 발행되었지만 사용자가 링크를 클릭하기 전에 만료되었습니다. 토큰이 여러 번 재사용되면 무효화가 중단됩니다. 오류 메시지나 디버그 출력에 토큰이 나타나면 로깅으로 인해 토큰이 누출됩니다. 재설정 링크가 한 사용자에게는 작동하지만 다른 사용자에게는 작동하지 않는 경우 만료 계산 시 데이터베이스 복제 지연이나 시간대 문제가 있을 수 있습니다. 합법적인 재설정 요청이 무작위로 실패하는 경우 CSPRNG가 손상될 수 있습니다(드물게).

요점: 무작위성은 쉬운 부분입니다. ToolAcre 생성기는 CSPRNG 지원 UUID를 제공합니다. 나머지는 디자인 분야입니다

로깅으로 시작: 재설정 링크 생성 및 확인을 위한 자세한 감사 로그를 활성화한 다음 문제를 재현하고 흐름을 추적합니다. ToolAcre 생성기는 처음 두 검사가 통과되도록 보장합니다. 재설정 링크 문제 해결은 거의 항상 설계 범주에 속합니다. 프로덕션 재설정 링크 시스템의 모범 사례에는 이전 토큰을 재사용하지 않고 모든 재설정 요청에 대해 새로운 무작위 토큰을 생성하는 것이 포함됩니다. 계정 및 생성 메타데이터와 함께 단방향 표현을 저장한 다음 서비스의 문서화된 위험 정책에서 만료를 선택합니다. 검증에 성공한 후 즉시 토큰을 무효화합니다. 재설정 요청 및 감사 성공을 기록합니다. 무차별 공격을 방지하기 위해 속도 제한을 구현합니다. SMS나 암호화되지 않은 채널이 아닌 이메일을 통해서만 재설정 링크를 보냅니다. 사용자에게 비밀번호 재설정 시도를 알립니다(무단 재설정을 감지할 수 있도록). ToolAcre 생성기는 무작위성을 제공합니다. 이러한 관행을 따르면 보안이 강화됩니다.