動的なハッシュの生成と操作のPDF forms

必要な知識

JEE上のAEM Forms Designerの経験が必要な場合もあります。また、スクリプトオブジェクトの関数にアクセスして呼び出す機能も必要です。

ユーザーレベル

開始

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

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

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

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

  • MD4とMD5 - Ronald Rivestが設計

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

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

メモ

MD4またはMD5には、よく知られたセキュリティの問題(いわゆるハッシュの競合)があります。 これらのハッシュの衝突と他のSHA-1ハック(虹のテーブルを含む)のため、私は2つ目のサンプルのSHA-256ハッシュ関数に集中することにした。 詳しくは、ウィキペディアの衝突虹のテーブルのページを参照してください。

スクリプトオブジェクトの確認

JEE上のAEM Forms Designerで提供されている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 forms

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

例1: ハッシュの生成

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

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

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

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

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

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

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

  1. JEE上のAEM Forms Designerでhashing_forms_sample2.pdfを開きます。 または、 Adobe ReaderまたはAdobe Acrobat Professionalを使用してサンプルを開いて表示することもできますが、ソースコードを表示することはできません。
  2. 「Password MAN」または「Password WOMAN」というラベルの付いた2つのパスワードフィールドの1つを選択し、パスワードを入力します。
    1. この男のパスワードはbob
    2. この女性のパスワードはaliceです
  3. フォーカスをパスワードフィールドから移動するか、Enterキーを押すと、入力したパスワードのハッシュが自動的に生成され、バックグラウンドで正しいパスワードの格納済みハッシュと比較されます。 正しい、ハッシュ化されたパスワードは、passwd_man_hashedpasswd_woman_hashedというラベルの付いた非表示のテキストフィールドに保存されます。 男性の正しいパスワードを入力すると、Man 1Man 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実装に関する追加情報も提供します。

属性

このページ