https://keepassxc.org/
インストール方法は、公式からインストーラをダウンロードしてインストールするのが良さそうだ。
一応KeePassXCはHomebrewを使用してもインストールできる。
HomebrewはダウンロードしたファイルのSHA256をチェックするようになっている。ただしHomebrew自体に正しくない値が登録されてた場合は通ってしまうだろう。本来的にはOpenPGPで、署名の確認をした方が良い。詳しい手順も掲載されている1。
ブラウザ拡張もある。以前 Microsoft Store
で KeePassXC
の偽アプリが登録されるという事件があったらしい2。怖すぎる。
これはKeePassXCだけの話ではないけれど、ブラウザ拡張もそうだし、他のアプリケーションやソフトウェアもそうだけれど、よくよく注意して使っていく必要がある。
またCLIも提供されているようだった。 keepassxc-cli
は KeePassXC
に梱包されている。
https://www.mankier.com/1/keepassxc-cli
keepassxc-cli --help
使い方: keepassxc-cli [オプション] command KeePassXC command line interface. 利用可能なコマンド: add データベースに新しいエントリーを追加する。 analyze パスワードの脆弱性や問題点を解析する。 attachment-export エントリーの添付ファイルをエクスポートする。 attachment-import エントリーに添付ファイルをインポートする。 attachment-rm エントリーの添付ファイルを削除する。 clip エントリーの属性をクリップボードにコピーする。 close 現在開いているデータベースを閉じる。 db-create 新しいデータベースを作成する。 db-edit Edit a database. diceware 新しいランダムなダイスウェアパスフレーズを生成する。 db-info データベースの情報を表示する。 edit エントリーを編集する。 estimate パスワードのエントロピーの推定。 export データベースの内容を指定した形式で標準出力にエクスポートする。 generate 新しいランダムなパスワードを生成する。 help コマンドのヘルプを表示する。 import XML データベースの内容をインポートする。 ls データベースのエントリーのリストを表示する。 merge 2つのデータベースをマージする。 mkdir データベースに新しいグループを追加する。 mv エントリーを新しいグループに移動する。 open データベースを開く。 rm Remove an entry from the database. rmdir Removes a group from a database. search 素早くエントリーを見つけ出す。 show エントリーの情報を表示する。 オプション: --debug-info デバッグ情報を表示する。 -h, --help Displays help on commandline options. --help-all Displays help including Qt specific options. -v, --version バージョン情報を表示する。 引数: command 実行するコマンドの名前。
新しくパスワード用の文字列を生成してみる。
徐々に使い方が分かってきた所で、Emacsからkeepassxc-cliを使うためのEmacs Lispを書いた
;;; keepassxc.el --- KeePassXC for Emacs.
;; Copyright (C) 2023 TakesxiSximada
;; Author: TakesxiSximada
;; Maintainer: TakesxiSximada
;; Version: 1.0
;; Package-Version: 20231104.0000
;; Package-Requires: ((emacs "29.1"))
;; Date: 2023-11-04
;; This file is part of soundplay.el.
;;; License:
;; This program is free software: you can redistribute it and/or
;; modify it under the terms of the GNU Affero General Public License as
;; published by the Free Software Foundation, either version 3 of the
;; License, or (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Affero General Public License for more details.
;; You should have received a copy of the GNU Affero General Public
;; License along with this program. If not, see
;; <https://www.gnu.org/licenses/>.
;;; Commentary:
;; KeePassXC Emacs Integration.
;;; Code:
(defvar keepassxc-database nil
"Current KeePassXC Database file path")
;;;###autoload
(defun keepassxc-cli-search (term &optional database)
(interactive
(list (read-string "KeePassXC Search Term: ")
(read-file-name "Database: "
(file-name-directory keepassxc-database)
(file-name-nondirectory keepassxc-database) t)))
(with-current-buffer (get-buffer-create "*KeePassXC*")
(shell-mode)
(setq-local comint-password-prompt-regexp "パスワードを入力してください:")
(setq-local proc (start-process-shell-command
"*KeePassXC*"
(current-buffer)
(format "keepassxc-cli search %s %s"
(shell-quote-argument (or database keepassxc-database))
(shell-quote-argument term))))
(set-process-filter proc #'comint-output-filter)
(switch-to-buffer-other-window (current-buffer))))
;;;###autoload
(defun keepassxc-cli-show (entry &optional database show-protected)
(interactive
(list (read-string "KeePassXC Show Entry: ")
(read-file-name "Database: "
(file-name-directory keepassxc-database)
(file-name-nondirectory keepassxc-database) t)
(yes-or-no-p "Show the protected attributes in clear text?")))
(with-current-buffer (get-buffer-create "*KeePassXC*")
(shell-mode)
(setq-local comint-password-prompt-regexp "パスワードを入力してください:")
(setq-local proc (start-process-shell-command
"*KeePassXC*"
(current-buffer)
(format "keepassxc-cli show %s %s %s"
(if show-protected "--show-protected" "")
(shell-quote-argument (or database keepassxc-database))
(shell-quote-argument entry))))
(set-process-filter proc #'comint-output-filter)
(switch-to-buffer-other-window (current-buffer))))
;;;###autoload
(defun keepassxc ()
(interactive)
(message "Hello KeePassXC World!"))
(provide 'keepassxc)
;; keepassxc.el ends here