(2016/10/6 19:45 訂正) 本稿の記述に私の誤解がありました。KeePassとchromeIPassとKeepassHttpのマスターパスワードの扱いに問題はありません。chromeIPassでブラウザの画面に表示されるのは、接続する時に入力したDBの識別子であって、マスターパスワードではありません。同様に、KeepassHttpがDBに保存するのも、おそらくブラウザと通信するための鍵であって、マスターパスワードではないでしょう。よって本稿は無意味となります。また、誤解を生まないために、関連箇所を取り消し線で訂正します。

Linuxで使うパスワード管理ツールは、一昨日、KeePassに決めたのだが、早くも気が変わった。というのは、KeePassはカスタムフィールドの扱いが良くない以外に、(関連プログラムのchromeIPassとKeepassHttpも含めて)マスターパスワードの扱いが非常識なのだ。具体的には、マスターパスワードをプログラムやブラウザの画面に平文で表示したり、DBに書き込んだりするのだそんないい加減なものは使いたくない。よく、みんな文句を言わずに使っているものだ。

それで、以下の候補を再検討した。

  • LastPass: かなり使いやすいが、クラウドは嫌だし、UIが本質的に脆弱なようなので(→ LostPass)、却下。
  • Keeper: 使うのにちょっと手間が掛かるが、基本的な機能はRoboFormと遜色ない。
  • Enpass: 動作が不安定だったので、却下。

しかし、Keeperにはちょっとした問題がある。他のアプリからデータ移行する際、CSV(あるいはTSV)中の改行を正しく扱えないのだ。具体的には、普通のCSVでは、""でくくればフィールド内に改行を書けるのだが、Keeperは認識しないで新しい行(レコード)とみなしてしまう。また、Keeper自身はCSVファイルを書く時には改行を"\n"と表記するが、それを読み込むと、改行にならずに"\n"と表示される。つまり、バグがあるのだ。CSVに"\\n"とかを書いても駄目だった。

KeeperはJavaで書かれているので、逆コンパイルしてコードを見て、いじってみる箇所("\n"を改行に変換している所)は分かったのだが、ビルドができないので諦めた。JREのバージョンを変えても直らなかったので、サポート依頼を出した。

取り得る手段は以下だ。

  1. 改行を我慢しつつ、Keeperの修正を待つ。
  2. Keeperに取り込んでから、改行を手で修正する。
  3. Keeperに取り込んでから、WindowsやLinuxの自動操作ツール(自動でマウスを動かしたり、キーボードを打つなど)を使って、改行を自動修正する。
  4. WineでRoboFormとブラウザを動かす。

手での修正は、データ数が数百なので大変だ。自動操作ツールを使うのはかなり難しそうだし、リスキーだ。Wineはやっぱり不安定で、今日はRoboFormすらうまく動かなかった。あとは、KeeperのDBを読み込んで暗号化を解除して、改行を修正して再度保存できればいいが、それができるならKeeperは脆弱だということになる。(あ、ソースがあるから、それを参考にしてプログラムを作ればできるのか? なんて考えたら、廃人への直行便だw)

という訳で手詰まり状態だが、時間はたっぷりあるので、試行錯誤しつつ待つかな。。。

(13:20 追記) その後、プログラムを無理やり変更(バイナリパッチ)しても効果がなく、そのモジュールをまるごと抜いてもエラーにならなかったので、更に調べたところ、別のモジュールが使われていることが分かった。そして、そこでは"\n"の変換を全くせずに、ただ読み込んでいるだけだから、何をしても無駄だったのだ。それで、とりあえずやれることと言えば、以下である。

  1. Keeperの修正を待つ。
  2. Keeperを自分で修正する。

Keeperの修正は、(多くのソフトベンダーのように、)余り期待できない。大抵は、「OSのバージョンは」とか「再現しない」とか「再インストールして下さい」とか関係ないことを言われ続けて、こっちがブチ切れるパターンだ。問題のあるプログラムの箇所を見せて指摘したいくらいだが、逆コンパイルは違法だったりライセンス条件違反なことが多いので、控えるしかない。まあ、気長に待って、その間に自分でビルドできるようになろうか。

(10/2 4:50追記) Keeperは無料版でもクラウドを使っていることが分かった。サイトでは、無料版は「ローカルのパスワードストレージ」としか書いてないのを信じていたから試したのだが、実際には、Linuxでしかデータを入れてないのに、Windows似もインストールしたら同じデータが出て来た。データディレクトリを消しても、ログインすると復活する。要は、別のソフトを作らずに手を抜いて、何度も広告を出して(クラウドを使うとうたっている)有料版に入らせようとしているのだ。確かに無料版ばかり使われたのでは利益にならないが、重要なところを誤魔化す会社は信用ならないし、ソフトも、上に書いたようにバグがあって今一つ信頼性がないので、止める。クラウドを使うなら、LasstPassの方が使いやすいからいい。

(10/2 10:54追記) LastPassを検討したのだが、使い勝手はいいのだが、データをクラウドに保存するため、バックアップするにはCSVでエクスポートするしかなく、それでは安全に保存できないので諦めた。クラウドだけで充分という考え方もあるだろうが、今までの経験上、単一の保存場所で安心することはできない。それから、無料版は一つのデバイスからしか使えないと書いてあったが、実際には、デスクトップPCは区別しないようで、同じアカウントでWindowsからもLinuxからもログインできてしまった。ということは、全世界のPCからログインできることになるので、好ましくない。なので、当面はWineでRoboFormとFirefoxを動かしつつ、他にいいのが出ないか、様子を伺うことにした。

それにしてもだ、Javaのプログラムはこんなに簡単に逆コンパイルできてしまって、大丈夫なのだろうか? 見て動作が分かるのだ。ノウハウ(があるとすれば)は流出するし、下手に作って中に暗号の鍵が入ってたら解読されまくるし、もし、自分でビルドできるようになるのであれば、勝手に改変されたものが出回るではないか(例えば、この例なら、僕はしないけど、「インポート機能改良版」とか言ってVectorとかSource Forgeなどに出すとかあり得る話だ)。多くのダウンロードサイトなんて、中身を確認しているかどうか不明だし、ユーザーだって、ダウンロードしたプログラムのチェックサムなんかを確認することはないだろうから、簡単に悪いことができてしまう。

そもそも、Javaのプログラム(classファイル)をバイナリパッチしても、プログラムをまとめたファイル(jarファイル)からモジュールを抜いても、全く検知されずに動いてしまったのは、果たして問題ないのか。多くのLinuxのネイティブなプログラムも、バイナリパッチしてもそのまま動くが、Javaはセキュリティが強いことを標榜していなかったか? せめて、jarは実行前にチェックサムか何かを確認すべきだろうと思う。もう何十年も遅い話だけど。。。

ちょっと気になるところだ。

PS. もしKeeperをビルドできるなら、広告みたいな鬱陶しい点があるし、データを勝手にクラウドにアップロードしかねないので、そういう機能をカットした私家版を作りたいw (13:28)

気になったので、Eclipseという開発環境でビルドできるか試したのだが、残念ながら、逆コンパイルしたソースは完全ではないようで、無理だった。具体的には、コンストラクタ(簡単に言うと、そのモジュールのデータを生成する部分)が不足していた。あとは、問題となっているモジュールを自分で作って入れ替えるとかいう話になるが、さすがに無理なので(なんとなくダチョウ倶楽部を思い出すがw)、止めておく。

そして、再度、RoboFormとブラウザをWineで動かしてみたが、RoboFormとFirefoxをWindow XPモードで動かす場合だけちゃんと動いた。そして、VivaldiもChromeも駄目だった。XPだと将来は対応されなくなる可能性が高いから、イマイチだ。Firefoxもフォントが汚くて、ちょっとどうかなあという感じだ。まあ、もう少し悪あがきしてみたい。(16:33)

(10/2 4:57 題を変更)

  •   0
  •   1

コメントを書く

名前    

メール 

URL