12 March '2006 - 04:14 | 技術動向 簡単に復号できても平文よりマシ
社内のソース管理は、プロジェクトごとにいろいろあるようだけれど、おれが関わっているやつは CVS か Subversion を使っている。 以前は CVS しか使ってなかったのだけれど、みんな Subversion がいいって言うもんだから、だいぶ前から、おれが管理してるプロジェクトは、ぜんぶ Subversion になってる。svn+ssh で使えば面倒なことなく使えるって教えてもらったんで、それならいいかと思って使い始めたのだけれど、最近は結局 https も使い始めた。というのも Trac を使いたいとかワガママをいうやつが出てきて、仕方なく apache2 いれて Trac を使えるようにしたのだけれど、そうなると、だったら apache2 で LDAP 認証するようにしたら、きめ細かく認証の設定ができていいじゃんってことになって、なんだか知らないが結局面倒なことになっていっているという具合。
まあ、面倒って言っても emerge して設定するだけのことだから、実はぜんぜん面倒でもなかったりしたのだけれど、ひとつ、大きな問題が残った。
それは、svn コマンドが ~/.subversion/auth/svn.simple/whatever にパスワードを平文で保存してしまうということ。
いままで svn+ssh だったからぜんぜん知らなかったのだけれど、それを知って、すごくビックリした。ていうか、ありえないだろ。
どういう経緯でそうなってるのか、とりあえず dev list archives を検索してパラパラとみてみた限り、案の定、700 になってたら問題ないだろ、どうしてもいやなら ~/.subversion/config に store-passwords = no って書けばいい、みたいな感じだった。まあ、想像通り。
ちゃんとした認証の仕組み(たとえば公開鍵・秘密鍵方式)を作らない限り、クライアントアプリは平文のパスワードが必要なので、そうなると、もしパスワードを暗号化して保存したとしてもそれを平文に復号できる必要があるわけで、パスワードなしに復号できるような仕組みはそもそも安全でもなんでもないので、そんなものに頼るよりも、ファイルシステムと root を信用する方がよっぽどマシだ、と。
まあ、理屈はそうなんだけど、それでもやっぱりパスワードが平文で保存されるのは嬉しくない。間違って人のを見てしまっても困る。どういう状況があるかは分からないけれど、たとえば /home 以下のファイルを grep して偶然誰かのパスワードに引っかかったりとかしても困る。わざわざ見ようとしなくても、見てしまう可能性はあるし、見えてしまった時にそれが平文になってるかなってないかでは雲泥の差だ。たとえそれが簡単に復号できる base64 や rot13 みたいなものであったとしても、わざわざ復号しないと意味を成さないし、信用する root なら人のパスワードをいちいち復号するようなことはしないのだから、やっぱり平文じゃない方が断然いい。
そういうわけで、なんでないのかさっぱり分からないし、本当はとっくにどっかに落ちているのかも知れないけれど、見つけられなかったし、まあ、そもそも数行のハックですむことなので「svn コマンドがパスワードを平文ではなしに base64 でキャッシュするようにするパッチ」を書いた。これで何かが安全になるわけではまったくないけれどそれでも平文よりかは100倍マシだと同意する人は使って下さい。
ちなみに、dev list では svnserve を使うときに使えるパスワードのファイルが平文ってのが困るって話もあったけれど、それは完全に別の話だし、ちゃんとした認証の仕組みを作るにはクライアントも巻き込まないといけないから、そんな面倒なことは apache2 に任せとけって話でここまできてると思うので、今後もずっと解決しないと思う。
結論として、今後も当分は svn+ssh か https のどちらかしかまともな方法はないし、https でクライアントが svn コマンドの場合はとりあえず、このパッチでお茶を濁す、と。
追記
一応、パッチを dev list に投げておいたけれど、予想通りの反応が帰ってきた。つまり、「安全じゃないのに安全だと思われるかも知れないから、この方法は受け入れないことに決めている」と。まあ、他人のポリシーなのでとうぜん彼らの自由ですし、確固たる信念なんでしょうから、特に文句はないです
A→鋭 / B→美 / C→紙
のような置き換えにして、暗号化ではなく翻訳です。とか。だめかな。。。
かみぞう - 14 April '2006 - 22:44
それにしても、原理原則至上主義の人たちは、どうも practical な妥協が極端にヘタな気がします。原理原則を極端に無視する友人たちから、おまえ(みたいな原理原則主義者)が言うなって叱られるんですけれどね。
ひろしま - 14 April '2006 - 23:08