Cloudflare Pages에서 Better Auth를 붙여 보다가 CPU time limit 에러가 계속 발생하였습니다. 그래서 Codex와 함께 만들어보았습니다. Cloudflare는 Worker끼리 공개 URL 없이 Service Binding과 WorkerEntrypoint RPC로 직접 통신할 수 있게 해 두고 있어서, 내부 인프라 성격의 기능은 이쪽이 더 자연스럽겠다고 봤습니다. 그래서 Better Auth와 같은 인증 로직에서 사용할 수 있는 private password hasher Worker 템플릿을 구상해보았습니다. 구조는 단순합니다. auth를 담당하는 caller Worker가 private service binding으로 hasher Worker를 붙이고, 실제 해시와 검증은 hashPassword() / verifyPassword() 같은 RPC 메서드로만 호출합니다. public HTTP는 GET / metadata/health 정도만 최소로 두고, 비밀번호 해싱 자체를 외부 endpoint로 노출하지 않는 쪽을 기본 전제로 잡았습니다. 즉, “해시 API를 공개한다”기보다 “password hashing을 Cloudflare 내부 Worker 컴포넌트로 분리한다”는 쪽에 더 가깝습니다. 구현은 TypeScript Worker shell 위에 Rust/Wasm kernel을 두고(전체 Rust vs 와 비교를 위해 간단한 벤치마크 테스트 후 결정), 해시 알고리즘은 Argon2id 기준으로 잡았습니다. 이 템플릿의 포인트는 Argon2id 자체를 소개하는 데 있지 않고, Cloudflare Workers 안에서 password hashing을 어떤 경계로 분리해 운영할지에 있습니다. 앱 Worker는 인증 흐름과 세션 관리에 집중하고, 해시/검증은 별도 hasher Worker가 담당하는 식입니다. Better Auth와 같이 쓰는 흐름도 같이 고려했습니다. Better Auth는 기본적으로 scrypt를 사용하지만 password hash/verify를 커스터마이즈할 수 있기 때문에, caller Worker에서 hasher Worker를 호출하는 식으로 연결할 수 있습니다. 그리고 기존 계정이 legacy scrypt 포맷을 쓰고 있더라도 로그인 시점에 검증한 뒤 verifyAndMaybeRehash()로 새 Argon2id 해시로 점진적으로 올리는 흐름을 상정했습니다. 즉, 기존 사용자의 비밀번호를 한 번에 모두 바꾸게 하기보다는, 실제 로그인 트래픽을 따라 조금씩 stronger preset으로 옮겨가는 마이그레이션 경로를 염두에 두고 만들었습니다. 운영 관점에서는 Cloudflare Free와 Paid를 같은 기준으로 보기 어렵다는 점도 같이 반영했습니다. Free에서는 CPU 한도가 작아서 Argon2id 기본 구성을 그대로 쓰기 버거울 수 있으므로 standard-2026q1와 별도로 free-tier-fallback-2026q1 같은 preset을 두는 구성을 생각했습니다. 다만 fallback preset은 어디까지나 플랫폼 제약을 고려한 운영 타협안이지, 보안 기준선처럼 소개하려는 값은 아닙니다. Free에서 시작하더라도, 이후 Paid로 올리면서 stronger Argon2id preset으로 재해시를 진행할 수 있게 문서와 예시에 gradual migration 흐름을 함께 담아두었습니다. 정리하면, 이 템플릿은 “Cloudflare Workers에서 비밀번호 해시를 어떻게 계산할까”보다는 “Cloudflare Workers에서 password hashing을 어떤 경계로 분리해서 운영할까”에 더 가까운 저장소입니다. Better Auth를 Workers에서 돌리면서 해시 구간의 부담을 분리해 보고 싶은 경우, public hash endpoint를 열고 싶지 않은 경우, legacy scrypt 계정을 점진적으로 Argon2id로 옮기고 싶은 경우에 출발점이 되면 좋겠습니다. repo: https://github.com/imjlk/cloudflare-auth-hasher-template
benchmark: https://github.com/imjlk/cloudflare-auth-hasher-template/tree/codex/benchmark-workspace
deploy: [Deploy to Cloudflare 링크] (Cloudflare 계정에 로그인 후 바로 배포해 보실 수 있습니다.)

2 weeks ago
10







English (US) ·