界面已本地化;技能原文保持作者语言。部分长说明页面以英语提供。
探索技能
开发与工程 · SKILL.md

implementing-zero-knowledge-proof-for-authentication

implementing-zero-knowledge-proof-for-authentication

【开发与工程】Zero-Knowledge Proofs (ZKPs) allow a prover to demonstrate knowledge of a secret (such as a password or private key) without revealing the secret itself. This skill implements the Schnorr identificati

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: implementing-zero-knowledge-proof-for-authentication description: Zero-Knowledge Proofs (ZKPs) allow a prover to demonstrate knowledge of a secret (such as a password or private key) without revealing the secret itself. This skill implements the Schnorr identificati domain: cybersecurity subdomain: cryptography tags: [cryptography, zero-knowledge-proof, authentication, privacy, zkp] version: "1.0" author: mahipal license: Apache-2.0

Implementing Zero-Knowledge Proof for Authentication

Overview

Zero-Knowledge Proofs (ZKPs) allow a prover to demonstrate knowledge of a secret (such as a password or private key) without revealing the secret itself. This skill implements the Schnorr identification protocol and a simplified ZKPP (Zero-Knowledge Password Proof) using the discrete logarithm problem, enabling authentication where the server never learns the user's password.

Objectives

  • Implement Schnorr's identification protocol for ZKP authentication
  • Build a non-interactive ZKP using Fiat-Shamir heuristic
  • Implement zero-knowledge password proof (ZKPP)
  • Demonstrate completeness, soundness, and zero-knowledge properties
  • Compare ZKP authentication with traditional password verification

Key Concepts

ZKP Properties

PropertyDescription
CompletenessHonest prover always convinces honest verifier
SoundnessDishonest prover cannot convince verifier (except negligible probability)
Zero-KnowledgeVerifier learns nothing beyond the statement's truth

Schnorr Protocol

  1. Setup: Public generator g, prime p, q (order of g)
  2. Registration: Prover computes y = g^x mod p (public key from secret x)
  3. Commitment: Prover sends t = g^r mod p (random r)
  4. Challenge: Verifier sends random c
  5. Response: Prover sends s = r + c*x mod q
  6. Verify: Check g^s == t * y^c mod p

Security Considerations

  • Use cryptographically secure random number generators
  • Challenge must be unpredictable (from verifier's perspective)
  • For non-interactive proofs, use Fiat-Shamir with collision-resistant hash
  • ZKP alone does not provide forward secrecy; combine with TLS

Validation Criteria

  • Honest prover always verifies successfully (completeness)
  • Random response without secret does not verify (soundness)
  • Server never receives the secret value
  • Non-interactive proof is verifiable offline
  • Multiple authentications produce different transcripts
  • Protocol resists replay attacks
我的收藏