mcpField
I
implementing-zero-knowledge-proof-for-authentication

implementing-zero-knowledge-proof-for-authentication

github.com/mukul975セキュリティ35.2k49 回インストール8 週間前に更新
リポジトリ

implementing-zero-knowledge-proof-for-authentication について

Pythonでゼロ知識認証を実装・評価するためのセキュリティスキルです。Schnorr識別、Fiat–Shamirによる非対話型証明、サーバーにパスワードを渡さない簡易パスワード証明を扱います。

主な機能

  1. 01Schnorr識別プロトコル
  2. 02Fiat–Shamir非対話型証明
  3. 03簡易ゼロ知識パスワード証明
  4. 04完全性・健全性・秘匿性の検証
  5. 05パスワード認証との比較

活用シーン

  1. 01パスワード認証のプロトタイプ構築
  2. 02証明のオフライン検証テスト
  3. 03ゼロ知識認証特性の評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill implementing-zero-knowledge-proof-for-authentication

インストール後、Claude Code で/implementing-zero-knowledge-proof-for-authenticationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py

詳細

認証のためのゼロ知識証明の実装

概要

ゼロ知識証明(ZKP)は、証明者が秘密(パスワードや秘密鍵など)を明かすことなく、その秘密を知っていることを示せる仕組みです。このスキルは、離散対数問題を用いたSchnorr識別プロトコルと、簡略化されたZKPP(ゼロ知識パスワード証明)を実装します。これにより、サーバーがユーザーのパスワードを一切知ることなく認証を行えるようになります。

使用するタイミング

  • 環境においてゼロ知識証明による認証機能を導入または設定する場合
  • コンプライアンス要件に沿ったセキュリティ統制を確立する場合
  • この分野のセキュリティアーキテクチャを構築または改善する場合
  • この実装を必要とするセキュリティ評価を実施する場合

前提条件

  • 暗号技術の概念およびツールに関する基礎知識があること
  • 安全に実行するためのテスト環境またはラボ環境にアクセスできること
  • 必要な依存関係をインストールした Python 3.8 以上の環境があること
  • テスト活動に対する適切な認可を得ていること

目標

  • ZKP認証のためのSchnorr識別プロトコルを実装する
  • Fiat-Shamirヒューリスティックを用いた非対話型ZKPを構築する
  • ゼロ知識パスワード証明(ZKPP)を実装する
  • 完全性、健全性、ゼロ知識性を実証する
  • ZKP認証と従来のパスワード検証を比較する

主要な概念

ZKPの性質
性質説明
完全性正直な証明者は、正直な検証者を常に納得させる
健全性不正直な証明者は、検証者を(無視できる確率を除き)納得させられない
ゼロ知識性検証者は、記述の真偽以外に何も学習しない
Schnorrプロトコル
  1. セットアップ: 公開生成元 g、素数 p、q(g の位数)
  2. 登録: 証明者が y = g^x mod p を計算(秘密 x から公開鍵を生成)
  3. コミットメント: 証明者が t = g^r mod p を送信(乱数 r を使用)
  4. チャレンジ: 検証者がランダムな c を送信
  5. レスポンス: 証明者が s = r + c*x mod q を送信
  6. 検証: g^s == t * y^c mod p を確認

セキュリティ上の考慮事項

  • 暗号学的に安全な乱数生成器を使用すること
  • チャレンジは(検証者の視点から)予測不可能であること
  • 非対話型証明では、衝突耐性のあるハッシュとともにFiat-Shamirを使用すること
  • ZKP単独では前方秘匿性は得られないため、TLSと組み合わせること

検証基準

  • 正直な証明者は常に検証に成功する(完全性)
  • 秘密を用いない乱数のレスポンスは検証に失敗する(健全性)
  • サーバーが秘密の値を受け取ることはない
  • 非対話型証明はオフラインで検証可能である
  • 認証を繰り返すたびに異なるトランスクリプトが生成される
  • プロトコルがリプレイ攻撃に耐性を持つ

コメント