第8回 データ保護と暗号化はイコールではない?


川島 祐樹
NTTデータ・セキュリティ株式会社
コンサルティング本部 PCI推進室
CISSP

2010/1/27


 要件3「保存されたカード会員データを保護すること」を読む

 要件3.1は、下記の3点から構成されています。

  • 保存するカード会員データは最小限に抑える
  • データの保存と廃棄に関するポリシーを作成する
  • データ保存ポリシーに従って、保存するデータ量と保存期間を、業務上、法律上、規則上必要な範囲に限定する

 つまり、先ほど全体像で確認したカード会員データのライフサイクルについて、さらに踏み込んでインタビューすることになります。ここで期待することは「どこに、どのようなカード会員データが、どれだけの期間存在するのか」になります。ここではポリシーが必要になりますが、主に必要な項目は下記の情報となります。手順が必要となるようなものについては、ポリシーとは別に手順書を用意して、正しく処理が行えるようにしましょう。

  • データの種類
      CVV2、磁気ストライプデータ、PAN、有効期限、氏名など
  • 取得方法
      ユーザーの入力、カード会社からの入力、加盟店からの送付〜データ入力など
  • 保存理由
      オーソリゼーション(承認)で使用、売上処理で使用など
  • 保存場所
      サーバXのファイル/DB、紙(XX保管庫)、外部記憶媒体(DAT、LTO、CMT、CD、DVDなど)
  • 保存期間
      オーソリ完了まで、1カ月、3カ月など
  • 保存件数
      〜百件、〜万件など
  • 配布方法、配布先(外部への配布がある場合)
      加盟店にバッチ処理で伝送、郵送で配布など
  • 廃棄方法
      シュレッダーで裁断、溶解処理、消磁処理、破砕など

 もちろん、このようなポリシー/手順書の基で保存データを整理していくと「このデータはこんなに長期間保存しなくてもよいのではないか?」「なんで氏名は必要ないのに持っているの?」など、さまざまな疑問点、問題が出てくることと思います。その際は、「不要なデータは持たない」というたった1つの大原則の基、対応する必要があります。

 ここでいう「不要なデータ」かどうかの判断は、例えばPANを保存している場合に「すべてのけたが必要か?」といったことも含めて検討します。保存しているデータを整理し、不要なデータを徹底的に排除していくことが、暗号化以前に検討すべき重要なフェイズです。

 このフェイズを含め、PCI DSS準拠プロセス全体で必須といえるのが、カード会員データマトリクスです。これらの内容をマトリクス化し、どこに、何が、どのような状態で存在するのかを洗い出します。PCI DSSの審査報告書には、このカード会員データマトリクスを含める必要がありますので、QSAにも要求されるはずです。このマトリクスのフォーマットは、QSAによって異なる場合もあるでしょう。一例として、下記のようなマトリクスになると考えられます。

保存先 Aサーバ Bサーバ Cサーバ
保存場所 D:\DATA\XXX TRN_LOG.CRD
種類 PAN、有効期限 PAN
保存理由 売上 トラブルシュート
保存期間 1日 1カ月
件数 1万件 10万件
配布先 カード会社XYZ なし
保護方法 暗号化 切り捨て
廃棄方法 ワイプ処理 破砕(媒体廃棄時のみ)
表1 カード会員データの状態をマトリクス化する

 判読不能にする方法は暗号化だけではない

 全体で保存しているカード会員データの把握から、データの保存(廃棄)ポリシーおよび手順書まで対応が完了し、そのカード会員データはどうしても持たなければならない、となった場合に、いよいよ要件3.4以降の暗号化に関連する対策を検討する必要が出てくることになります。

 PCI DSSでは、「カード会員データの暗号化」というフレーズが話題になることが多いものの、必ずしも「暗号化」ではなく「カード会員データを判読不可能にする」ことが目標です。その手段として、PCI DSSでは下記の4つの方法が示されています。

(1)トランケーション

 トランケーションとは、データの一部を切り捨てることです。適切な位置とけた数でトランケーションすることで、カード会員データと見なさない、とすることができます。

 16けたのカード会員番号では、会員を識別するためには先頭の6けたと末尾の4けたを除いた残りの6けたが特に重要なデータであるため、先頭6けた、末尾4けたを残して中央の6けたを切り捨てることで、適切なトランケーションが行われたことになります。もちろん、もっと多くのけたを切り捨ててしまっても問題ありません。ちなみに、最後の1けたのチェックデジットは、そのカード番号が正常なものであることを確認するための「MOD 10」と呼ばれる式で算出される値になっています。

 MOD 10では、カード会員番号を右から数えて奇数番目のけたはそのまま、偶数番目のけたはそれぞれ2倍します。2倍して10を超えたものはそこから9を引きます。すべての数を足して、10の倍数になった場合、正しいカード番号、ということが分かります。

図2 MOD10(Luhn Formula)

 もちろん、この計算が合えば有効で使えるカード番号であるというわけではなく、入力ミスチェックなどでしか使用できません。お気付きの方もいらっしゃるかと思いますが、最後の1けたがこのチェックデジットである特性から、最後の1けたは分からなくても逆算することができます。

図3 MOD10で逆算すると最後の1けたが分かる

 例えば、下3けただけマスキングしていた場合、カード番号として下3けたが000〜999までの1000通りあり、あてずっぽうでも1000分の1の確立でしか当たらないように思えますが、実際はチェックデジットを逆算することによって100分の1に絞り込むことができてしまうのです。

(2)一方向ハッシュ

 一方向ハッシュは、不可逆の変換を行って、データを判読不可能にする方法です。この方法を使うことで、カード会員データは判読できなくなりますが、不可逆であるため復号することができません。一方向ハッシュはOSのパスワードやファイルの正当性の確認に使われることが多い技術ですが、業務上差し支えなければ、PCI DSS準拠のためにも有効な手段となります。

 これら2つの方法に共通していることは、「元のデータが分からなくなること」です。つまり、これを適用できる状況は、クレジットカードのオーソリゼーション(承認)処理や清算の処理などで、カード番号を使用しなくなった場合のみとなります。カード番号を使わないなら保存しておく必要はないのではないか、とも考えられますが、現実的には、問題発生時などに何らかの方法でそのカード番号が使用されたトランザクションを識別しなければならない、などということもあります。つまり、「全けた、オリジナルの番号は必要はないが、何らかの識別情報として使用する」、というようなケースにおいて活用できると考えられます。

(3)インデックストークンとパッド

 「インデックストークンとパッド」は、元のカード番号からワンタイムパッドで生成した暗号文を、元のカード番号への参照として使用する方法です。その性質上、使用する鍵の数は膨大になり、鍵管理のオーバーヘッドが非常に大きくなってしまうため、あまり現実的ではないと筆者は考えていましたが、最近になっていくつかの製品/ソリューションで、効率よく実現する手段を見かけるようになってきました。

(4)暗号化

 そして最後の暗号化ですが、基本的なコンセプトは以下の2点です。

  • 「強力な暗号化技術」を使用すること
  • 適切な鍵管理を伴うこと
2/3

Index
データ保護と暗号化はイコールではない?
  Page1
カード会員データの暗号化を検討する前に
Page2
要件3「保存されたカード会員データを保護すること」を読む
判読不能にする方法は暗号化だけではない
  Page3
PCI DSSで求められる「強力な」暗号化技術
パフォーマンスが落ちるので暗号化したくない?


オール・ザッツ・PCI DSS 連載インデックス


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間