動的 PDF Forms でのハッシュの生成と操作

必要な知識

スクリプトオブジェクトの関数にアクセスして呼び出すことができるなど、AEM Forms on JEE Designer に関する経験が必要です。

ユーザーレベル

経験の浅いユーザー

PDFフォームでPDFを非表示にし、ソースコード内やパスワードドキュメント内の他の場所で明確なテキストでパスワードを使用したくない場合、MD4、MD5、SHA-1、SHA-256 ハッシュの生成と操作の方法を理解することが重要です。

一意のハッシュを生成し、このハッシュを PDF ドキュメントに保存することでパスワードを難読化するという考え方に基づいています。この一意のハッシュは様々なハッシュ関数で生成できます。この記事では、PDFフォーム内での生成方法と使用方法を示します。

ハッシュ関数は、任意の長さの長い文字列(またはメッセージ)を入力として取り、出力として固定長の文字列を生成します。これは、メッセージダイジェストやデジタルフィンガープリントと呼ばれる場合があります。

JEE 上のAEM Forms Designer を使用すると、スクリプトオブジェクトに様々なハッシュ関数を JavaScript として実装し、動的PDFドキュメント内で実行できます。 この記事のサンプルファイルに含まれている PDF 例では、次のハッシュ関数のオープンソース実装を使用しています。

  • MD4 と MD5 - ロナルド・リベストによる設計

  • SHA-1 と SHA-256 - NIST で定義されるもの

ハッシュを使用する最大の利点は、明確なテキスト文字列を比較することで、パスワードを直接比較する必要がないことです。代わりに、2 つのパスワードの 2 つのハッシュを比較できます。 2 つの異なる文字列が同じハッシュを持つことはほとんどないので、両方のハッシュが同じ場合は、比較対象の文字列(この場合はパスワード)も同じであると見なすことができます。

メモ

MD4 または MD5 には、セキュリティの問題(いわゆるハッシュの競合)がいくつかあります。 これらのハッシュ衝突や他の SHA-1 ハック(レインボーテーブルなど)があるため、2 つ目のサンプルでは SHA-256 ハッシュ関数のみを使用することにしました。詳しくは、ウィキペディアにある衝突およびレインボーテーブルのページを参照してください。

スクリプトオブジェクトの調査

JEE Designer 上のAEM Formsで提供されている 2 つのサンプルの 1 つを開くと、階層パレットに 4 つのスクリプトオブジェクトが表示されます(下図を参照)。

変数

これらのスクリプトオブジェクト内のハッシュ関数の JavaScript 実装を確認するには、スクリプトオブジェクトを選択し、スクリプトエディターでコードを参照します。次の各ハッシュ関数がどのように実装されているかを確認できます。

  • soHASHING_MD4.hex_md4()
  • soHASHING_MD4.b64_md4()
  • soHASHING_MD4.str_md4()
  • soHASHING_MD5.hex_md5()
  • soHASHING_MD5.b64_md5()
  • soHASHING_MD5.str_md5()
  • soHASHING_SHA1.hex_sha1()
  • soHASHING_SHA1.b64_sha1( )
  • soHASHING_SHA1.str_sha1( )
  • soHASHING_SHA256.hex_sha256()
  • soHASHING_SHA256.b64_sha256()
  • soHASHING_SHA256.str_sha256()

このリストからわかるように、ハッシュの出力タイプごとに異なる関数を使用できます。エンコードする出力に応じて、16 進数の場合は hex_、Base64 の場合は b64_、単に文字列の場合は str_ をそれぞれ選択できます。

選択するハッシュ関数に応じて、ハッシュの長さは異なります。

  • MD4:128 ビット
  • MD5:128 ビット
  • SHA-1:160 ビット
  • SHA-256:256 ビット

サンプル PDF フォームの試用

この記事のサンプルファイルには、2 つの PDF forms が含まれます。最初のサンプルでは、文字列を入力し、その文字列の MD4、MD5、SHA-1 および SHA-256 ハッシュ値を生成できます。 2 つ目のサンプルは、正しいパスワードが入力された場合にテキストフィールドのロックを解除する単純なフォームです。

例 1:ハッシュの生成

最初のサンプルを試すには、次の手順に従います。

  1. サンプルファイルをダウンロードして解凍したら、JEE Designer 上の AEM Forms で hashing_forms_sample1.pdf を開きます。または、 Adobe ReaderまたはAdobe Acrobat Professional を使用してサンプルを開いて表示することもできますが、ソースコードを表示することはできません。
  2. テキストを消去というラベルの付いたテキストフィールド内で、ハッシュ化するパスワードまたはその他のメッセージを入力します。
  3. 4 つのボタンのいずれかをクリックして、MD4、MD5、SHA-1、または SHA-256 ハッシュを生成します。押したボタンに応じて、16 進数出力を生成する 4 つのハッシュ関数の 1 つが呼び出され、文字列またはメッセージがハッシュ化されます。

ハッシュ操作の結果が、ハッシュというラベルの付いたフィールドに表示されます。ハッシュの長さは、選択したハッシュ関数によって異なります。

すべてのサンプルでは、出力タイプとして 16 進数を使用します。スクリプトエディタを使用してサンプルを変更し、出力タイプを Base64 または単純な文字列に変更できます。

例 2:一致するパスワード

2 つ目のサンプルは、実際のパスワードを公開する必要なく、バックグラウンドでハッシュを比較する仕組みを示しています。入力したパスワードはハッシュ化されます。実際のパスワードは、非表示のフィールドに保存され、ハッシュ化されます。パスワードは、非表示となっているためではなく、ハッシュ化されることで保護されます。ハッシュ値からパスワードを再構築することは不可能なので、ハッシュ化された形のパスワードは公開しても安全です。比較はハッシュ間でのみ行われ、クリアテキスト内のパスワード間では行われません。両方のハッシュが同じ場合は、パスワードが同一であると仮定できます。

2 番目のサンプルを試すには、次の手順に従います。

  1. JEE Designer 上の AEM Forms を使用して hashing_forms_sample2.pdf を開くまたは、 Adobe ReaderまたはAdobe Acrobat Professional を使用してサンプルを開いて表示することもできますが、ソースコードを表示することはできません。
  2. Password MAN または Password WOMAN のラベルが付いた 2 つのパスワードフィールドの 1 つを選択し、パスワードを入力します。
    1. その男性のパスワードは bob
    2. その女性のパスワードは alice
  3. フォーカスをパスワードフィールドから移動するか、Enter キーを押すと、入力したパスワードのハッシュが自動的に生成され、バックグラウンドで保存されている正しいパスワードのハッシュと比較されます。正しい、ハッシュ化されたパスワードは、passwd_man_hashed および passwd_woman_hashed のラベルが付いた非表示のテキストフィールドに保存されます。その男性の正しいパスワードを入力した場合は、Man 1 および Man 2 のラベルが付いたテキストフィールドにアクセスできるようになり、テキストを入力できます。女性の分野でも同じ行動が起こります。
  4. 必要に応じて、「パスワードを削除」というラベルの付いたボタンをクリックし、テキストフィールドを無効にして境界線を変更できます。

2 つのハッシュ化された値を比較し、テキストフィールドを有効にするためのコードはとても簡単です。

if (soHASHING_SHA256.hex_sha256(this.rawValue) == passwd_man_hashed.rawValue){
     VAL_man_1.access = "open";
     VAL_man_2.access = "open";
     VAL_man_1.borderColor = "0,255,0";
     VAL_man_2.borderColor = "0,255,0";
}

ここからの移動先

この機能が必要となるのはどのような状況でしょうか。PDF フォームに、承認された個人のみに入力を制限するフィールドがあるとします。Sample_2.pdf のように、ドキュメント内のどこでもクリアテキストでは見られないパスワードを使用してこれらのフィールドを保護することで、パスワードを知っているユーザーのみがこれらのフィールドにアクセスできるようにします。

引き続き 2 つのサンプル PDF ファイルを参照してください。Sample_1.pdf で新しいハッシュ値を生成し、生成された値を使用して、Sample_2.pdf で使用するパスワードまたはハッシュ関数を変更できます。「属性」の節に記載されているリソースでは、ハッシュとこの記事で使用される特定の JavaScript 実装に関する追加情報も提供しています。

属性

このページ