目次

概要

Wrapper vers. 3.6.0 以降、スタンダード版およびプロフェッショナル版では、 パスワードや機密データを難読化し、設定ファイルに安全に保存することが可能になります。 難読化は真の暗号化とは区別されるべきですが、実際のテキストやパスワードを隠し、カジュアルな観察者がエンコードされた値を覚えるのを 非常に困難にすることで、ある程度のセキュリティを提供します。

設定をロードする際、Wrapper は難読化されたトークンをデコードし、それらが参照されるプロパティ値を機密データとしてマークします。 機密データとしてマークされたプロパティ値は、追加の予防措置をもって扱われます。 まず、セキュアなファイルからロードされたことを確認し、次に、平文での公開なしに意図された目的でのみ使用されることを保証します。

値がコンソール、電子メール、ログ、コマンドラインなどに表示される可能性のあるプロパティの使用を除外するため、 難読化されたトークンをその値に含めることが許可されているのは、限られたプロパティセットのみです。 また、環境への情報漏洩を防ぐために、変数定義での使用も禁止されています。

注意

難読化されたトークンをその値に含めることが許可されているプロパティは、以下に限定されます。

機密データを含むプロパティ値は、以下のセキュリティ予防措置をもって処理されます。

  • 機密テキストを含むファイルのパーミッションがチェックされ、ファイルをロードするには制限された読み取りアクセスが必要となります。 詳細については、こちらのページをお読みください。

  • 機密テキストはログ内でマスクされ、固定数の「*」文字で構成されるマスクに置き換えられます。

  • 「タスク マネージャー」(Windows) や「ps」(Unix) などのプロセス一覧ツールでクリアテキストが公開されるのを防ぐため、 プロパティ値は Java コマンドラインで参照されることは許可されません。 アプリケーションパラメーター内の機密データをコマンドラインではなくバックエンドチャネル経由で渡すことを許可するには、 プロパティ[wrapper.app.parameter.backend]を「TRUE」に設定する必要があることに注意してください。

パスワードをエンコード/難読化するためにいくつかのメソッドが利用可能です。 その一部には秘密鍵を使用できます。 Wrapper は、データをエンコードし、秘密鍵を生成するためのコマンドを提供します。 このページでは、各コマンドのオプションについて説明します。

警告

Wrapper が提供する難読化手法は、上記に関連するセキュリティ対策とともに、主に Java アプリケーションの外部への 機密データの平文漏洩を防ぐように設計されています。 [wrapper.app.property.<n>]プロパティを使用するか、 [wrapper.app.parameter.backend]を「TRUE」に設定することで、 システムプロパティとアプリケーションパラメーターを安全に Java アプリケーションに渡すことが可能です。 ただし、Java コードによって一度受け取られると、これらの値はシステムプロパティまたは 文字列配列内に平文として保存されることに留意してください。

以下の問題に注意してください。

- 難読化された秘密情報(または設定ファイル)を入手した者が、システムプロパティをダンプするための単純な Java アプリケーションを作成し、 Wrapper を使って起動することで、簡単にパスワードを解読できてしまう可能性があります。 したがって、機密データを含む Wrapper 設定ファイルは、常に承認されたユーザーのみがアクセスできるようにすることが重要です。 Wrapper は起動時に機密ファイルのパーミッションをチェックし、パーミッションの調整方法を示すガイダンスを提供しますが、 ファイル権限を実際に編集するのはユーザーの責任です。 また、ファイルパーミッションを可能な限り制限して設定した秘密鍵ファイルを使用することも推奨されます。

- マシンにアクセスできる誰かが、デバッガーを使用して Java アプリケーションのメモリをトレースし、平文のパスワードが格納されている 文字列値を発見できてしまう可能性があります。常に Java アプリケーションを安全な環境で実行するようにしてください。

データの難読化

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

--cipher」コマンドは、Wrapper でパスワードまたは機密データをエンコードし、 関連する「cipher」設定を生成するために使用できます。

値を正確にエンコードする方法を指定するには、「--cipher」コマンドを使用する際にいくつかのパラメーターが必要です。 以下のセクションでは、各パラメーターの設定方法について説明しますが、まず、設定ファイル内でエンコードされた値がどのように見えるかを 見てみましょう。 次の構文が使用されます。

%zrmVK5-Zp7qHptL9Yu66qr|<cipher_name>%

  • % %」はエンコードされたトークンの区切り文字で、

  • zrmVK5-Zp7qHptL9Yu66qr」はエンコードされた値で、

  • <cipher_name>は値をエンコードするために使用される設定の識別子です(下記を参照)。

値のエンコーディングは、以下のプロパティセットで設定できます。

  • [ [wrapper.cipher.<n>.name] ]プロパティ:インデックス「<n>」のエンコーディング設定の識別子、

  • [ [wrapper.cipher.<n>.method] ]プロパティ:エンコーディングメソッド(下記を参照)、

  • [ [wrapper.cipher.<n>.private_keyfile] ]プロパティ:秘密鍵へのパス。

一部のメソッドではデフォルトのコンフィギュレーションが定義されており、その場合は上記のプロパティを省略できます。 このようなデフォルト設定では、カスタムの秘密鍵は使用されず、<cipher_name> はメソッド名と同じになります。


次に、「--cipher」コマンドの使用方法の詳細に入ります。

wrapper --help」は、以下の出力を表示します。これについてさらに詳しく説明します。

  --cipher パスワードを難読化し、[wrapper.cipher.*]プロパティとともにトークンを生成し、
    それをコンフィギュレーションファイルで使用して安全性を高めます。
    エンコードされる値は Wrapper のパイプを利用して Stdin(標準入力)に送信しなければなりません。
    それ以外の場合は、プロンプトが表示されます。
    次の「引数」が利用できます。
      --method <メソッド名> 次のメソッドのいずれかを利用できます。
          base64   : Base64 でエンコードします
          base64url: URL を修正された Base64 でエンコードします
          obf      : 難読化された固定文字列を生成します
          robf     : 難読化されたランダムな文字列を生成します
      --name <cipher name> 任意の暗号名。「--private_keyfile」が指定されている場合、
        この引数は必須です。
      --private_keyfile <ファイルパス> 秘密鍵への任意のパス
        (「obf」と「robf」メソッドで利用可能)です。
      --encoding <utf8 または utf-8> Stdin を読み込むときに使用するエンコード。
      --echo エンコードの問題をデバッグするために入力をエコーします
        (実際のパスワードでは使用しないでください)。
      --simple 指定されている場合、出力には難読化された文字列のみが含まれます。

メソッド

--method」パラメーターは、エンコーディング手法を指定するために使用されます。

次の手法が使用可能です。

  • 「 [base64] 」:標準の Base64 エンコーディング

  • 「 [base64url] 」: URL の Base64 を修正(「+」を「-」に置き換え、「/」を「_」に置き換え)

  • 「 [obf] 」:独自の難読化手法(同じ入力では常に同じ出力が生成されます)

  • 「 [robf] 」:独自のランダム難読化手法(同じ入力からランダムな出力が生成され、暗号解読に対してより強力になります)

注意

base64」と「base64url」は公に知られているエンコーディングメソッドです。 エンコードされた値は、対応するプレーンテキストよりも長く、覚えるのが困難です。 しかし、エンコードされた文字列を入手している者は、非常に簡単に解読できます。

obf」または「robf」は、使用されるアルゴリズムが公に知られていないため、 容易にはデコードできません。 セキュリティ強化のため、エンコード中に個別のセキュアなファイルに保存された秘密鍵を指定することもできます。 最も強力な暗号化方式 (AES、RSA など) と同じレベルのセキュリティを実現できるとは主張しませんが、 秘密鍵と組み合わせて「obf」または「robf」を使用すると、かなり優れたデータ保護が実現します。

暗号名

--name」パラメーターはオプションです。 使用する場合は、その後に値のエンコードに使用される設定の識別子が後に続く必要があります。

このパラメーターは、「--private_keyfile」が指定されている場合に必須です。

指定された値は、[wrapper.cipher.<n>.name]プロパティを設定するために使用されます。 たとえば、「--name obf1」が指定された場合、次の設定が生成されます。

wrapper.cipher.1.name=obf1

秘密鍵ファイル

--private_keyfile」パラメータはオプションです。 使用する場合は、その後に秘密鍵ファイルへのパスを指定する必要があります。

このパラメーターは、エンコーディングメソッドが「obf」または「robf」であり、かつ --name パラメーターも指定されている場合にのみ使用できます。

秘密鍵が指定されていない場合、エンコーディングは難読化としてのみ機能し、望ましくない観察者が値を覚えるのを難しくするだけです。 設定ファイルが適切に保護され、非公開で編集されている場合は難読化だけで十分かもしれませんが、秘密鍵ファイルを指定することで セキュリティをさらに強化できます。 その場合、デコードには秘密鍵を格納するための別のファイルが必要となり、このファイルは開いたり編集したりする必要はありません。 鍵ファイルは、常にアクセスが制限された安全な場所に保存する必要があります。 その鍵にアクセスできる人は誰でもパスワードを簡単に解読できるようになります。

指定された値は、[wrapper.cipher.<n>.private_keyfile]プロパティを設定するために使用されます。 たとえば、「wrapper --cipher --method obf --name obf1 --private_keyfile ../conf/my_private_key」は次の設定を生成します。

wrapper.cipher.1.name=obf1
wrapper.cipher.1.method=obf
wrapper.cipher.1.private_keyfile=../conf/my_private_key

シンプル出力

--simple」パラメーターは、エンコードされた値のみを含む出力を生成するために 使用される単一のフラグ(値なし)です。

--simple」パラメーターを使用しない場合、出力は次のようになります。

エンコードされたトークン:
    %K401JeI7GaHRplWDz15c6hmXkKM_9CoFrAo8P|r1%

コンフィギュレーション:
    wrapper.cipher.1.name=r1
    wrapper.cipher.1.method=obf
    wrapper.cipher.1.private_keyfile=mykey

--simple」パラメーターを使用すると、出力は次のようになります。

%K401JeI7GaHRplWDz15c6hmXkKM_9CoFrAo8P|r1%

--simple」パラメーターは、出力を自動化されたプロセスで使用したり、 別のコマンドに渡したりする必要がある場合に便利です。

例として、次のコマンドは「obf」メソッドで値「mypassword」をエンコードします。 Wrapper の出力は「sed」コマンドに渡され、トークン「@pw1@」がエンコードされた値に置き換えられます。

設定例(Unix):

cat file_containing_password | ./wrapper --cipher --method obf --simple | sed -i "s/@pw1@/$(cat)/g" ../conf/wrapper-private.conf

エンコーディング

--encoding パラメーターはオプションです。 標準入力(Stdin)を読み取る際に使用するエンコーディングを指定します。

このオプションが指定されていない場合、Windows では ANSI コードページが使用され、 Unix では現在のセッションのロケールのエンコーディングが使用されます。

現在、次の値のみがサポートされています。

  • [default]

  • [utf8] または [utf-8]

設定例(cmd.exe で: input.txt の先頭行を utf-8 で読み取る):

type input.txt | wrapper.exe --cipher --method obf --encoding utf8

注意

PowerShell コンソールでは、変数 $OutputEncoding が、 データをネイティブアプリケーションにパイプする際に使用するエンコーディングをい指定します。 一部の環境では、デフォルト値が ASCII である可能性があり、これによりすべての非 ASCII 文字が疑問符に置き換えられます。 UTF-8 文字を含むファイルの内容を読み取る場合、$OutputEncoding が正しく [System.Text.Encoding]::UTF8 に設定されていることを確認してください。

設定例(PowerShell で: input.txt の先頭行を utf-8 で読み取る):

$OutputEncoding = [System.Text.Encoding]::UTF8
Get-Content .\input.txt -Encoding UTF8 | .\wrapper.exe --cipher --method obf --encoding utf8

エコー

--echo」パラメーターは、難読化される前に Wrapper が受信した入力データを印刷するために使用できる単一フラグ (値なし) です。 これは、エンコーディングの問題を検出するのに役立ちます。

警告

重要:このオプションはデバッグ目的でのみ利用可能です。 入力を端末に平文で表示させるため、実際のパスワードには決して使用しないでください。 誤って機密データを印刷した場合は、端末をクリアしてください。

注意

--echo」オプションと「--simple」オプションは同時に使用できません。

説明

Wrapper が標準入力ストリームを読み取る際、独自のエンコーディング、または指定されている場合は「--encoding」 オプションの値でそれを解釈します。 ほとんどの場合、使用されているエンコーディングが正しいかどうかを判断する方法はなく、いずれの場合もデータを難読化します。 難読化された出力のみの場合、入力文字列のエンコーディングの問題に気づくのは非常に難しい場合があります。 「--echo」オプションを追加することで、ユーザーは入力が Wrapper によって正しく受信されたかどうかを確認できます。

設定例(誤ったエンコーディング):
type inpututf8.txt | wrapper.exe --cipher --method obf --echo

...

入力データ:'NiA±o'

エンコードされたトークン:
    %59qW5A=k2naYbzKiXOUcGc5OA598K0Kq6|obf%

設定例(正しいエンコーディング):
type input.txt | wrapper.exe --cipher --method obf --echo --encoding utf8

...

入力データ:'Nino'

エンコードされたトークン:
    %_G2moKq5aFVvtwAn6pyk5MS4G6Hm4mR|obf%

秘密鍵の生成

対応バージョン :3.6.0
対応エディション :プロフェッショナル版スタンダード版コミュニティー版 (未対応)
対応プラットフォーム :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Wrapper は、特定のエンコード方式で使用される秘密鍵を生成するための「--keygen」コマンドを提供します。

警告

Wrapper は、デフォルトで Wrapper を実行しているユーザーにのみ読み取りおよび書き込み権限が付与された鍵を生成します。 Unix システムでは、このユーザーがファイルの「所有者」となり、所有者のみが読み取り・書き込み権限を持ちます。 これらの権限は後で変更できますが、最小限に抑える必要があることに留意してください。 通常、Wrapper を実行しているユーザーのみが秘密鍵にアクセスすることを許可されるべきです。

秘密鍵のパーミッションを調整する方法を学ぶには、こちらのページをお読みください。

wrapper --help」は以下の出力を表示しますが、これについてさらに詳しく説明します。

  --keygen パスワードを難読化する際に使用する秘密鍵ファイルを生成します。
    次の「引数」が利用できます。
      --method <メソッド名> 秘密鍵が使用される難読化方法を設定します:
          obf :固定難読化用のキーを生成します
          robf:ランダムな難読化用のキーを生成します
      --private_keyfile <ファイルパス> キーファイルのファイル名を指定します。

メソッド

現在、「obf」と「robf」メソッドのみが秘密鍵を使用できます。さらに、両方とも同じ鍵形式を使用するため、「obf」メソッドを 指定して生成された鍵は「robf」メソッドに使用でき、その逆も可能です。

--method」パラメーターは、異なる鍵形式を使用する新しいエンコーディングまたは 暗号化メソッドを追加する将来の Wrapper バージョンとの互換性のために存在します。

秘密鍵ファイル

--private_keyfile」パラメーターは、生成された鍵が書き込まれるファイルへのパスを 指定するために使用されます。

参照: セキュリティ

暗号設定:

セキュアファイル:

コマンド: