Zeta Crypto — 小型 Rust 暗号ライブラリとCLI

Security

概要

Zeta Crypto は「学習用」に焦点を当てた軽量な Rust 製ライブラリとコマンドラインツールです。主機能として 12 語の BIP39 ニーモニック生成、ニーモニックからの鍵導出(簡易な PBKDF2 ベース)、secp256k1 を使った ECDSA 鍵生成・署名・検証、ランダム 32 バイトの 16 進鍵生成などをサポートします。プロジェクトはファイル数やコミット数が少なく、ソースを追いやすいため、暗号・ウォレットの基本動作を理解したり試作を行う際に有用です。なお README にもある通り、実運用向けの安全性保証はしていません。

GitHub

リポジトリの統計情報

  • スター数: 6
  • フォーク数: 4
  • ウォッチャー数: 6
  • コミット数: 4
  • ファイル数: 5
  • メインの言語: Rust

主な特徴

  • 12語の BIP39 ニーモニックを生成して人間可読なシードを作成
  • 簡易 PBKDF2 ベースでニーモニックから鍵を導出(学習目的)
  • secp256k1 による ECDSA 鍵ペア生成・署名・検証をサポート
  • CLI(zeta-cli)で即座に操作を試せるコマンド群/ランダム 32 バイト鍵生成

技術的なポイント

このプロジェクトは「理解しやすさ」と「最小構成」を優先しており、暗号機能を小さなコードベースで示しています。ニーモニック生成は BIP39 準拠の 12 語を提供すると記載があり、一般に BIP39 はエントロピー→語リストの変換とチェックサム付与を行います。ニーモニックからの鍵導出は「単純な PBKDF2 ベース」とあり、これはニーモニックと任意のパスフレーズを PBKDF2(HMAC-SHA 系)で伸長して鍵材料を得る実装を指すと考えられますが、リポジトリは「学習用」であり、BIP39/BIP32 の標準的な HD(階層的決定性)ウォレットの完全互換を必ずしも保証しません。具体的には、BIP39 の標準実装は PBKDF2(HMAC-SHA512, 2048) を用いて seed を作り、その seed から BIP32 で鍵とチェーンコードを派生しますが、ここではより単純化された導出を行っている可能性があります。

署名アルゴリズムは ECDSA on secp256k1。これは一般的な暗号通貨と互換性の高い選択で、Rust では sepc256k1 や k256 クレートを使うのが普通です。ランダム生成には OS の CSPRNG(rand クレート経由)を使って 32 バイト乱数を出力する機能があり、テスト・デモ用途での鍵生成に便利です。CLI(cargo run —bin zeta-cli)でニーモニック生成、鍵導出、データ署名・検証、ランダム鍵生成などを手早く試せます。

セキュリティ上の注意点としては、(1)PBKDF2 のパラメータ(反復回数やハッシュ関数)が強度に直結するため適切な値を使うこと、(2)標準的な HD ウォレット互換性が必要なら BIP32/BIP44 等の導入が望ましいこと、(3)メモリの安全な消去や定数時間実装、強固な RNG の保証などが本番用途では必須、という点が挙げられます。改善案としては BIP39/BIP32 の厳密実装、より強い KDF(Argon2 等)の検討、ユニットテスト/ベクトルテストの追加、シークレットの安全な取り扱い(メモリロック/ゼロ化)などが考えられます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .DS_Store: file
  • .gitignore: file
  • Cargo.toml: file
  • README.md: file
  • src: dir

使い方(簡易)

README によれば CLI バイナリ名は zeta-cli で、Cargo 経由で実行できます。主要な操作は次のような流れです(実行例は README のサンプルを参照):

  • ニーモニック生成: cargo run —bin zeta-cli — GenMnemonic(等)
  • 鍵導出: ニーモニックから PBKDF2 ベースで秘密鍵を生成
  • 署名 / 検証: 任意データの ECDSA 署名と検証を実行
  • ランダム鍵: 32 バイトのランダム HEX を生成して出力

CLI とライブラリ実装が分離されているため、学習後はライブラリ部分を抽出して別プロジェクトへ組み込むことも容易です。

まとめ

小規模で学習に最適、実運用には改良が必要。

リポジトリ情報:

READMEの抜粋:

Zeta Crypto

Tiny Rust library and CLI demonstrating mnemonic, key derivation, signing and verifying.

For learning and prototyping only.

Features

  • Generate 12-word BIP39 mnemonic
  • Derive wallet from mnemonic with simple PBKDF2-based key derivation
  • ECDSA secp256k1 keypair generation, signing and verifying
  • CLI for quick testing and wallet operations
  • Generate random 32-byte hex keys (for demo/testing)

CLI Examples

# Generate new mnemonic
cargo run --bin zeta-cli -- GenM...