Entry

KeePassのデータベースを複数の端末で同期する

自分のIDやパスワードを保存して管理するKeePass(現バージョン: 2.22)というソフトがある。自分は元々、IDやパスワードの管理にID Managerというソフトウェアを使用していたが、今回このKeePassに乗換えることにした。
乗り換えの一番の理由としては、IDやパスワードをAndroid携帯端末で参照したかったため。ID ManagerはWindows限定のため、使用できる環境が限られるが、一方のKeePassはマルチプラットフォーム対応で、AndroidやiOS等、様々な環境で使用できる。
ところがここで問題になるのは、複数の端末同士でデータを同期させる方法について。複数端末で使用するには当然、PCで入力した情報がAndroid端末で参照できないといったような、データの齟齬を発生させないような運用にしたいところ。
ここでは、そんな複数端末で情報を同期させる方法について調べたことについて書いておく。

ID ManagerからKeePassへデータ移行

今回の話とは直接関係ないけれど、ID ManagerからKeePassへデータ移行する方法について、とりあえず書き残しておく…とはいえ、世の中にはやはり同じ事を考える方がいるようで、以下のページにある「IDM2KeePass」を使うと簡単に終わる。

[I2K]IDM2KeePass 1.00 – MoonWing

これを使うと、ID ManagerからエクスポートしたXMLファイルを、KeePassでインポートできるXMLファイルに変換してくれるので、それをKeePassでインポートすれば良い。なお、XMLファイルには生のパスワードがテキストで保存されているため、インポートした後のXMLファイルを必ず削除すること。

IDM2KeePass

同期方法

KeePassのデータを同期させる方法は(自分が考えられる方法として)大きく分けて2種類。サーバ利用と、クラウドストレージ利用。
サーバ利用とは、HTTP(WebDav)やFTPといったデータ転送プロトコルを利用して、自分が管理するサーバを介してデータの同期を行う方法。クラウドストレージ利用とは、DropBoxやGoogle Drive等に代表されるクラウドストレージサービスを利用してデータの同期を行う方法。

各々のメリット・デメリットは以下の通り。

メリット デメリット
サーバ 個人で管理できるので(比較的)データが狙われにくい。
汎用プロトコルなので扱いやすい。
別途サーバが必要。
セキュリティ設定も個人で責任を負う必要あり。
クラウドストレージ 既存のサービスを利用するので管理が楽。
基本的にセキュリティの信頼性は高い。
外部サービスにデータを預けるので、サービスによってはデータ流出の懸念有。
データを必ず同期用フォルダに配置しなくてはいけない。
専用アプリが必要。

メリット、デメリットを考慮した上で、何れかを選択する。基本的に楽なのはクラウドストレージを利用する方法なので、よく分からない人はこちらが良いと思われる。なお、何れを選択するにせよ、KeePassデータベースファイルを開くパスワードは必ずサーバやクラウドストレージサービスのパスワードと異なる物に設定しておく事。そうすれば、仮にデータが流出しても、KeePassのデータが破られる可能性は低くなる。

以降では、それぞれの同期方法を使用したWindowsとAndroidの同期について簡単に説明する。
なおここでは、KeePassデータベースを読込・編集を行うソフトについて、Windows側は公式ソフト、Android側はKeepass2Android、またはそのオフライン版を使用することとする。

クラウドストレージによる同期

ここでは、クラウドストレージの代表格、Dropboxを利用する方法について説明する。

[Windows側]

Dropbox

通常の同期と同様、Dropboxのクライアントソフトをインストールする。その上で、KeePassのデータベースファイル(*.kdbx または *.kdb)をDropboxの同期用フォルダに置く。これでWindows側の同期は完了。
ちなみに、クライアントを使わずにDropBoxにデータを転送するKPDataSaveというプラグインもあるけれど、データの保存を行うだけで同期が出来なかった。どうもDropboxへのバックアップ用らしい。多分。

[Android側]

アプリケーションを選択

Androidについても、同様にDropbox のクライアントアプリをインストールする。
その上で、Keepass2Androidでデータベースの選択時にフォルダアイコンをタップし、「アプリケーションを選択」からDropboxアプリを選択する。するとDropboxフォルダのデータを参照できるので、同期されたKeePassデータベースファイルを選択する。これで、Dropboxに保存されたKeePassデータを読み込むことができる。
以降はDropboxアプリによりデータが同期されるので、最新データが反映されるようになる。
Dropboxによる同期の手順は以上。要は同期をDropboxアプリに任せてしまうというだけの話なので、面倒がなくてとても楽。

サーバによる同期

ここでは、FTPによる同期方法について説明する。なお、当然ながら同期を行う前に、FTPサーバをサポートした自前のサーバかホスティングサーバを用意する必要がある。加えて、SFTP(SSH File Transfer Protocol)かFTPS(File Transfer Protocol over SSL/TLS)といったセキュアな通信をサポートしている事が望ましい。

[Windows側]

KeePass URLから開く

KeePassで配布している公式ソフトウェアは、FTPやWebDAVといったプロトコルを標準でサポートしている。
ソフトウェアを開いて、「ファイル」→「データベースを開く」→「URLから開く」を選択して、KeePassデータベースファイル保存先のFTPパス及び、FTPのID及びパスワードを入力すると、自動的にFTPサーバにアクセスしてデータを取得する。以降はデータベースを開く度にFTPアクセスしてデータを更新するようになる。また、保存時は自動的にFTPにアップロードしてデータを更新する。
なお、標準ではFTPSやSFTPといった通信をサポートしていないので、それらを利用する場合はIOProtocolExtというプラグインを使用する。このプラグイン(IOProtocolExt.plgxファイルと、IOProtocolExt_WinSCPフォルダ)をKeePassインストールフォルダに置く(または、インストールフォルダにpluginという名前のフォルダがあればそちらを読み込む)。KeePassソフトウェアを起動すると「ツール」メニューに「IOProtocolExt Options」という項目が増えているので、FTPSを利用する場合はこれを選択して、「FTPS」の何れかの項目にチェックを入れる。(サーバ仕様によるので、利用サーバの仕様を確認すること、利用しない場合はチェックを入れないこと。)

例えば、自分が利用するさくらのレンタルサーバ スタンダードは以下のような設定になる。
FTPS接続の場合、URLは「ftps://(ドメイン名):21/home/(アカウント名)/(データベース保存パス)/(ファイル名)」で、「IOProtocolExt Options」の「Explicit SSL」にチェックを入れる。
SFTP接続の場合、URLは「sftp://(ドメイン名):22/home/(アカウント名)/(データベース保存パス)/(ファイル名)」となる。
なお、他のサーバの場合FTPSは990番ポートかもしれないので、その辺は自分のサーバの仕様を確認する。

ただしこの方法の場合、必ずFTP上にデータが保存されローカルにデータが残らない、すなわちネット接続されていない場合は参照できないという問題がある。
この問題に対する解決作としては2通り考えられる。一つは通常ローカルに保存し、必要に応じてFTPに保存する方法。もう一つは、通常FTPに保存し、必要に応じてローカルに保存する方法。この場合、KeePassソフトウェアの「トリガー」という機能を使うことで、データ保存時に自動的にこれらを実行させることができる。トリガーの「イベント」を「データベースファイルを保存中」に、アクションを「使用中のデータをエクスポート」または「使用中のデータベースをファイル/URLと同期する」にすることで、データ保存時に自動的にデータベースを別の場所に保存させることができる。ちなみに推奨は、通常FTPに保存し、それと同時にデータベースにエクスポートする方法。理由は、アクションに「使用中のデータベースをファイル/URLと同期する」を指定した場合FTPのユーザー名とパスワードを入力することになるが、ソフトウェアの仕様上、これが生データとしてローカルに保存されてしまうというから。つまり、FTPのパスワードが簡単に見えてしまう状態になり、セキュリティ上望ましくない。

KeePassトリガー

[Android側]

アプリケーションを選択

Keepass2Android(オフライン版じゃない方)は、標準でHTTP(WebDAV)、FTPへのアクセス機能を持っているので、メニューから「Open URL」を選択してそのままFTPのパスを設定をすれば良い。
…が、携帯端末の場合これはあまりよろしくない。何故ならば、基本的にFTPはIDとパスワードが平文で流れるから(暗号化してないWebDAVも同様)。必ずプロバイダと接続するような固定回線の場合は比較的問題が起こりにくいが(それでも望ましくはない)、外で持ち歩く端末でIDとパスワードを流すことはとても危険となる。携帯キャリアの3GやLTE回線に接続するならまだ良いが、問題は外部のWi-Fiに接続する場合。外部のWi-Fiはアクセスポイントから先がどのような通信経路を辿っているのかが全く分からない。場所によってはわざと回線を開放して、通信を傍受するようなアクセスポイントも存在する。そんなわけで、携帯端末で素のFTPを利用するのは避けた方が無難。…とはいえ、今のところデータを上手く同期させるにはこのFTP接続を用いるしかない。WebDAVによるDigestも未対応とのこと。ちなみに、ftps://で繋ぎに行くと通常のFTPで接続しにいくので注意。この辺は将来に期待するしかない(と思う)。
また代替案として、ES ファイルエクスプローラーのようなFTP(FTPS/SFTP対応)接続可能なファイラを使用して、代わりにFTP接続してもらう方法がある。あらかじめ、ESファイルエクスプローラーにサーバのFTP情報を登録する。次に、Keepass2Android(オフライン版でも可)のファイル選択において、Dropboxと同様にデータベースファイルの選択時に「アプリケーションを選択」表示された際、「ESファイルエクスプローラ」を選択して、登録しておいたFTP接続先にアクセスし、データベースファイルを選択する。これにより、サーバ上のファイルを取得し、ファイルを開くことができる。
ただし、このデータは自動的に同期されることはないので、サーバ上のデータが更新された場合は再読込を行う必要があるし、端末で書き込んだデータはサーバに自動的に反映されない。なので、端末で閲覧するだけの用途なら使えるが、更新してデータを同期させるような用途には向かない。
そんなわけでサーバ利用の場合、Android端末は閲覧専用で運用するのが無難。

まとめ

なんか面倒なことをグダグダ書いてはみたけど、サーバ利用の方は設定が面倒な上に対応も中途半端なので、あまりお勧めはしない。特に拘りがなければ、クラウドストレージサービスを使って同期を行うのが無難。Dropboxyの他、GoogleDrive等でも同様の事はできるので、自分の好きなサービスで運用するのが良いと思われる。また、iPhoneでも多数のKeePassソフトウェアが存在するので、同様の運用は可能と思われる。

Comments (0 件)

コメントを残す

メールアドレスが公開されることはありません。