UStackUStack
AxKeyStore icon

AxKeyStore

AxKeyStoreは、クライアント側で暗号化して秘密情報を暗号データのみとして保存するセキュアなオープンソースCLI。GitHubを未信頼ストレージに。

AxKeyStore

AxKeyStoreとは?

AxKeyStoreは、秘密鍵、キー、パスワードを管理するためのセキュアなオープンソースコマンドラインインターフェース(CLI)ツールです。主な目的は、自分のプライベートGitHubリポジトリを暗号化ストレージとして使用しつつ、GitHubを未信頼ストレージとして扱うことです。

AxKeyStoreでは、クライアント側で暗号化を実行します。リモートのGitHubリポジトリに保存されるのは暗号化データのみで、リポジトリに平文の秘密情報は残りません。また、ローカルファイルシステムに秘密鍵、マスターキー、パスワードを平文で保存することもありません。

主な機能

  • GitHubプライベートリポジトリを暗号化バックエンドとして使用: 自分が制御するプライベートリポジトリに暗号化バイナリblobとして秘密情報を保存。
  • すべての秘密情報処理をクライアント側暗号化: アップロード前に自分のマシンで秘密情報を暗号化。平文の秘密情報はネットワーク上を送信されません。
  • ゼロトラスト/多層暗号化モデル: ローカル設定(GitHubアクセストークンやリポジトリ名を含む)を暗号化するLocal Master Key (LMK)と、保存される実際の秘密情報を暗号化するRemote Master Key (RMK)を使用。
  • モダンな認証付き暗号化と鍵導出: LMK暗号化にArgon2idとXChaCha20-Poly1305を使用。3層構造により、GitHubに到達するのは暗号化アーティファクトのみ。
  • GitHub AppsとDevice Flowによる統一認証: GitHub AppsとDevice Flowを組み合わせてセキュアに認証。
  • 初期化と操作のためのCLIワークフロー: ログイン、リポジトリ初期化、シンプルなコマンドセットによる秘密情報管理コマンドを含む。
  • 階層カテゴリ整理: api/production/internalのようなカテゴリで秘密情報を整理。
  • マルチプロファイル対応: 異なるログイン、マスターパスワード、GitHubリポジトリで複数の保管庫を管理。

AxKeyStoreの使い方

  1. CLIをインストール: macOS/Linuxでは提供のシェルインストールスクリプトを実行。WindowsではPowerShellインストールスクリプトを実行。スクリプトはバイナリをダウンロードし、$HOME/.axkeystore/binに配置、PATHを設定。
  2. GitHubアカウントでログイン: axkeystore loginを実行。初回ログイン時にMaster Passwordを設定。このパスワードで機密のローカルGitHubアクセストークンを暗号化。
  3. 必要なGitHub Appをインストール: ログイン中にCLIがユーザーまたは組織向けGitHub Appインストールリンクを提供。リポジトリアクセスを許可するためアプリをインストール。
  4. ストレージリポジトリを初期化: axkeystore init --repo <repo-name>を実行(組織/オーナー指定時はmy-org/my-secret-storeのように)。他のマシンで既に初期化済みの場合は、初期化時にプロンプト。

初期化後、CLIを使ってプライベートGitHubリポジトリの暗号化blobとして資格情報を保存・取得できます。

ユースケース

  • 平文で保存せずにGitHubホスト資格情報を保管: APIキー、パスワード、その他の秘密情報を暗号化データのみでプライベートリポジトリに保存。
  • カテゴリで環境やドメイン別に秘密情報を分離: api/production/internalのような階層カテゴリで整理し、環境間を簡単にナビゲート。
  • 異なるGitHubリポジトリ間で複数の保管庫を管理: 異なるリポジトリやマスターパスワードで別プロファイルを維持。複数プロジェクトや組織で作業時に便利。
  • ローカル資格情報保管をロックダウン: GitHubアクセストークンやリポジトリ名(ローカル資格情報)をLocal Master Keyで暗号化し、ユーザーのMaster Passwordで保護。
  • 未信頼リモートストレージでのクロスマシン使用: 別のマシンで同じ暗号化リポジトリを初期化(init時にプロンプト)。リモートは暗号化blobのみを保持し、各クライアントが暗号化を処理。

FAQ

  • AxKeyStoreはGitHubに平文の秘密情報を保存しますか? いいえ。クライアント側で暗号化し、プライベートGitHubリポジトリには暗号化バイナリblobのみを保存します。

  • 暗号化キーやマスターパスワードがネットワーク上で送信されますか? プロジェクトでは、平文の秘密情報、マスターキー、パスワードがネットワークに触れないと記述。暗号化は自分のマシンのみで実行。

  • AxKeyStoreはどのような認証を使いますか? GitHub AppsとDevice Flowを使用して認証します。

  • AxKeyStoreはローカルデータをどのように保護しますか? Master PasswordでArgon2idとXChaCha20-Poly1305により暗号化されたLocal Master Key (LMK)を使用し、LMKでGitHubアクセストークンやリポジトリ名などのローカル設定を暗号化。

  • インストールでサポートされるOSは? リポジトリにmacOS/Linux(install.sh経由)とWindows(install.ps1経由)のインストールスクリプトを提供。

代替案

  • クライアント側暗号化の他のCLIベースシークレットマネージャー: ローカルでシークレット暗号化し、暗号テキストのみをリモートバックエンド(S3、Git、その他のストレージ)に保存するツール(類似の非信頼ストレージモデル)を探す。
  • 専用パスワードマネージャー(ボルトベースアプリ): 暗号化と同期を管理するローカルアプリやデスクトップ/モバイルボルトを使用;バックエンドがパスワードマネージャー管理のため、プライベートGitHubリポジトリを自分で制御するワークフローと異なる。
  • 暗号化ツール付きGitベースシークレットストレージ: Gitに暗号化ファイルを保存し、自身の暗号化ツールに依存する手法;AxKeyStoreに比べ、専用CLIとそのキー管理モデルを使わず、自分で暗号化ワークフローを管理。
  • 管理型暗号化のクラウドシークレットマネージャー: 管理システムにシークレットを保存するサービス;AxKeyStoreの記述モデルとは異なり、クライアント側非信頼ストレージアプローチが主設計パターンでない場合あり。
AxKeyStore | UStack