피드로 돌아가기
Dev.toSecurity
원문 읽기
Password-less Server 설계로 DB 유출 시 비밀번호 노출 가능성 0% 달성
I built ZKP auth so passwords never touch your server
AI 요약
Context
기존 bcrypt 해시 기반 인증 방식은 서버 내 비밀번호 데이터 저장으로 인해 DB 유출 시 GPU 기반 무차별 대입 공격에 취약함. 비밀번호가 요청 바디를 통해 서버로 전송되는 구조적 한계로 인해 발생하는 보안 리스크를 근본적으로 제거할 필요성이 제기됨.
Technical Solution
- PBKDF2 및 SHA-512를 통한 브라우저 내 Keypair 생성으로 비밀번호의 서버 전송을 완전히 차단한 설계
- Schnorr Proof of Knowledge 및 Fiat–Shamir transform을 적용하여 비밀번호 공개 없이 소유권만 증명하는 ZKP 메커니즘 구현
- Server-issued random nonce(Challenge)를 활용한 일회성 인증으로 Replay Attack 가능성을 원천 봉쇄
- 서버 저장소 내 비밀번호 해시 대신 32-byte Public Key만 보관하여 데이터 유출 시에도 공격자가 활용 가능한 정보 제거
- @noble/curves 라이브러리를 통한 검증된 암호화 프리미티브 사용으로 구현 안정성 확보
실천 포인트
1. 서버에 비밀번호 해시를 저장하는 대신 Public Key 저장 방식으로 전환 가능한지 검토
2. 인증 과정에서 일회성 Nonce를 도입하여 Replay Attack 방어 체계 구축
3. 암호화 로직 구현 시 Custom Primitive 대신 감사 완료된 표준 라이브러리(@noble/curves 등) 사용