ID TECH
すべての技術記事

技術記事

決済デバイス統合のためのツール:暗号化/復号ツール

ID TECH は、当社製品を使用した決済アプリの開発に携わる方々向けに、優れた無料ユーティリティを多数提供しています。最近の投稿では、次のものをご紹介しました: Parsomatic(Web フォームとして実装された無料のデータパーサー)、そして UDemo(当社のレガシー製品以外のすべてに対応する Universal SDK テストアプリ。Windows 向けに C# で実装)。さらに、当社の暗号化/復号ツールもぜひお試しいただきたいと思います。以下のリンクをクリックすれば、ブラウザで読み込めます: このリンク.

暗号化/復号ツールは、強力で完結型の単一ページ HTML アプリで、AES 暗号化、Triple DES、DUKPT 鍵導出、SHA ハッシュ、HMAC など、多くの機能をネイティブ JavaScript で実装しています。すべてのロジックは単一ページに含まれており(サーバー側の処理は一切ありません)、HTML ファイルをダウンロードしてブラウザ上で(たとえば Chrome の優れた開発者ツールを使って)直接ロジックを確認できます。

上のスクリーンショットからもわかるように、暗号化/復号ツールの最上部のボタンには、本ツールでできることの一部を示すドロップダウンメニューが表示されます。お客様からよくいただくご質問は、「リーダーから送られてくるトラックデータをどうやって復号すればよいか?」というものです(これは、磁気ストライプデータに含まれるクレジットカードのトラック情報や、EMV タグの一部を指す場合があります)。こうしたデータは通常、AES または Triple DES 暗号化のいずれかで暗号化されています(ただし、ID TECH ではその他のアルゴリズムにも対応しています)。このようなデータの復号は少し厄介ですが、それは復号操作そのものというよりも、鍵の生成方法と使用方法に起因します。

クレジットカード業界の大半のシナリオでは、リーダーは取引ごとに一意のワンタイム鍵を使用して機密のカードデータを暗号化します。これがいわゆる DUKPT 方式です。DUKPT(Derived Unique Key Per Transaction:取引ごとに導出される一意の鍵)では、 新しい鍵 が取引ごとに導出されるため、同じ鍵が二度使われることはなく(これによりリプレイ攻撃が防止されます)。リーダーは出荷時に一意の 128 ビット鍵を持っており、カードが読み取られるたびにカウンタがインクリメントされます。このカウンタは Key Serial Number(KSN)と呼ばれる値に含まれます。なお、KSN 自体は公開情報です(実際の復号シナリオでは、暗号化データとともに復号側へ送られます)。取引時には、KSN は特殊なアルゴリズムを用いて、リーダーの 元の 暗号鍵と組み合わされ、一意の 新しい 鍵が導出されます(一方向ハッシュを用いるため、ある鍵が万一盗まれても、それを使って他の鍵を計算することはできません)。このアルゴリズムは ANSI X.9-24 で定義されています。非常に巧妙な対称鍵管理方式ですが、実装は少々厄介です。そのため、当社が代わりに実装しました。(注:前回の投稿でご紹介した UDemo プログラムにも DUKPT の処理を行う復号機能が含まれていますが、ソースコードは付属していません。) 前回の投稿 にも DUKPT 処理を行う復号機能が含まれていますが、ソースコードは付属していません。

暗号化されたトラックデータを復号するには、その取引の KSN、BDK、および暗号化データが必要です。暗号化/復号ツールでは、上のスクリーンショットに示すように「Encrypt or decrypt data」を選択し、表示される小さな 導出中 . . . ボタンをクリックします。すると小さなダイアログが表示され、KSN(10 進数の 16 進バイト)と 16 バイトの Base Derivation Key(リーダーの初期化時に注入された初期 PIN 暗号鍵、すなわち IPEK の生成に使われた元の鍵を表します)を入力します。テストや開発用途では、ほとんどの方が BDK としていわゆる ANSI 標準テスト鍵(値:0123456789ABCDEFFEDCBA9876543210)を使用します。この値は暗号化/復号ツールの BDK のデフォルト値となっています(ただし簡単に上書きできます)。

10 バイトの KSN(スペースの有無を問わず 16 進バイト形式)を入力したら、生成したい鍵バリアント(PIN、Data、MAC)を選択し、大きな 鍵を導出 ボタンをクリックします。16 バイトの鍵が計算され、メイン画面に表示されます。自宅で試している方は、KSN として 62 99 49 01 19 00 00 00 00 02 を入力し(BDK はデフォルトのまま)、次のボタンをクリックして、 鍵を導出 導出されたデータ鍵の値が 1A994C3E09D9ACEF3EA9BD4381EFA334 になることを確認してみてください。

こうして得られた鍵を使えば、以下のような生データブロックを復号できます:

DA 7F 2A 52 BD 3F 6D D8 B9 6C 50 FC 39 C7 E6 AF 22 F0 6E D1 F0 33 BE 0F B2 3D 6B D3 3D C5 A1 F8 08 51 2F 7A E1 8D 47 A6 0C C3 F4 55 9B 1B 09 35 63 BE 7E 07 45 90 72 AB F8 FA AB 53 38 C6 CC 88 15 FF 87 79 7A E3 A7 BE

下の Output に示されているとおり、復号後のデータは「%B42」で始まり(ツールチップに復号データの ASCII 表示が含まれている点にご注目ください)、Mr. George W. Bush, Jr. のカードデータが含まれています:

たとえ 1 ビット でも鍵に誤りがあれば、復号結果は判読不能な意味不明のデータになります。(実際に試してみてください:この例をツール上で実行し、鍵のビットを 1 つランダムに反転させてみてください。)

これは暗号化/復号ツールができることのほんの一例にすぎません。DUKPT の仕組み(およびクレジットカードデータの復号方法)について詳しくは、以前公開した本テーマに関する 2 回連載の投稿をぜひご覧ください。 こちらから始まります.

鍵の注入、暗号化、MSR や EMV についてご質問がありますか? 当社の専門家にお気軽にお問い合わせください。いつでもお電話でご連絡いただけます: 1-800-984-1010.