2013年

7月

11日

【iDempiere Lab】パスワードの暗号化について

Compiere Distributionのパスワードの初期保存状態について

 業務アプリケーションレベルでのセキュリティー管理で重要な事の1つはユーザーのIDとログイン時に認証に使用するパスワードの管理だと思います。通常、業務アプリケーションではIDとパスワードは個人毎に付与され、その管理は個人に委ねられます。そのため個人が不注意に他人にIDとパスワードを教えてしまう事は、システム的には防ぎようがありません。

 IDとパスワードを他の人に教えてはいけないよ、というのはどのシステムでも言える事で、例えシステム管理者であってもユーザーのパスワードは知らない方が(知ることのできない方が)セキュリティー的に好ましいと言えると思います。

 ここで1つ注意が必要になるのですが、多くのCompiere Distributionでは初期状態ではパスワードは平文で保存されています。これは、セキュリティー的に無頓着というわけではなく、オープンソースの特性上、デモ環境に用意されているユーザーのIDやパスワードは公開して誰でも試せるようにしておきたいという意図からだと私は理解しています。その証拠に、暗号化する処理がちゃんと用意されています。

 私のこれまでの経験では、Compiere(コンピエール)ADempiere(アデンピエレ)iDempiere(アイデンピエレ)の3つのCompiere Distributionは、初期状態ではパスワードは平文で保存されています。

 

多くのCompiere Distributionでは初期状態ではパスワードは平文で保存されている。

AD_userテーブル
AD_userテーブル

 nameカラムに入力されているデータがIDで、passwordカラムに入力されているデータがパスワードになります。IDがSuperUserのパスワードはSystemだというのが、簡単に判別できます。

 ちなみに、上記画像で紹介している4つのユーザーIDとそのパスワードはシステム管理者とサンプルユーザーのIDと初期パスワードであり、Compiereの時代から公表されていますので、本番導入の際には、少なくともパスワードは変更しておく事を強く推奨致します。

 それではPasswordを暗号化する方法として、まずはCompiere(コンピエール)の頃からある暗号化プロセス(Column Encryption)を実行する方法を紹介したいと思います。

 

暗号化プロセス(Column Encryption)を実行する方法

 Systemクライアントにログインし、アプリケーション辞書のテーブルとカラムウィンドウを開きます。テーブルとカラムウィンドウで、暗号化したいカラムの設定画面に行きます。ここでは、例としてAD_UserテーブルのPasswordカラムを暗号化してみたいと思います。

テーブルとカラムウィンドウのカラムタブ
テーブルとカラムウィンドウのカラムタブ

 カラム暗号化ボタンを押します。そうすると、カラム暗号化ポップアップウィンドウが表示されますので、暗号化フラグと現在設定の変更フラグをONにします。

カラム暗号化ポップアップウィンドウ
カラム暗号化ポップアップウィンドウ

 暗号化処理が終了すると、下記のようなメッセージが表示されます。メッセージは、「org.compiere.util.Secureクラスを呼び出して、18件のデータを暗号化し、暗号化するフラグをONにしたよ。」という内容だと思います。

実行ログ
実行ログ
AD_Userテーブル
AD_Userテーブル

 確認するとpasswordカラムに保存されているデータが先ほどの平文から暗号化されているのがわかります。

 この暗号化の処理はiDempiereではorg.compiere.process.ColumnEncryptionクラスがプロセスエンジンから呼び出され、実際の暗号化処理はorg.comoiere.utile.Secureクラスに処理を引き継いでいます。

 暗号化の処理的には、Cipherクラスを使用して、暗号化のアルゴリズムを差し替えて色々な暗号処理ができるような作りになっていますが、デフォルトでは、DES(Data Encryption Standard)という暗号処理が施されるようです。

 

 下記のようなパラメータ指定で、いったん暗号化(Encryption)したデータも、復号化(Decryption)してもとの平文に戻す事もできます。

 ここではパスワードを例にして暗号化の処理を説明しましたが、この機能はパスワード以外も暗号化する事ができます。

パスワードをハッシュ化する方法

 iDempiereでは、DESの暗号化処理の他にも、パスワードについては、ハッシュ化する方法が実装されています。

 ハッシュ方法としては、MUserクラスを確認してみるとSHA512を採用しているようです。

 システムコンフィグ設定で、USER_PASSWORD_HASHのValue(検索キー)をYに変更します。初期設定値はNになっています。

 これだけの設定で、新規に追加されたパスワード及び更新があったパスワードについてはハッシュ化されてデータベースに保存されます。

 

 既に登録されているパスワードについて、ハッシュ化したい場合はパスワードをハッシュ化(Convert passwords to hashes)するプロセスを実行します。

 パスワードをハッシュ化する(Convert passwords to hashes)プロセスを実行する際には、先に紹介した、システムコンフィグ設定のValue(検索キー)の設定をNにしておく必要があります。

 パスワードをハッシュ化すると、次のように既に登録されているパスワードもハッシュ化されます。

AD_Userテーブル
AD_userテーブル

参考サイト

関連するコンテンツ