こりゃ、ほたえな

種々雑多なことを書き捨てていく予定です。UTF-8 対応と聞いて、はてなダイアリーからの移行を考えてますが、はてなブログはまだまだ完成までの道は遠いようです。

クレジットカード番号のセキュリティ

Wiredの記者マット・ホーナンさんがアカウントの乗っ取りにあった事例について思うこと。

要するに、このカード番号の4桁の数字を、特に重要な情報ではないのでウェブ上に表示しても構わないとアマゾンは考えているが、一方のアップルは本人確認の重要情報として利用しているということだ。

http://wired.jp/2012/08/14/amazon-apple-security-hacked/

マットさんは、アマゾンがクレジットカード番号(PAN, Primary Account Number)の末尾4桁を表示していることを問題視しているようだけど、PCI DSSの3.3条は、末尾4桁を表示できるとしている。PCI DSSは、5大カードブランド(VISA、MasterCard、JCB、AMEX、Diners)が策定したセキュリティ基準。アマゾンや楽天市場で買い物をするとき、カード番号の末尾4桁が表示されるのはPCI DSSに根拠があることなのだ。

つまり、カード番号の末尾4桁は公開情報であり、アマゾンの表示は(そうする必要があるならば)問題がない。

したがって、この公開情報を本人確認のために使用しているアップルのほうが間違っている。



ところで、ユーザにパスワードの入力を求めるときは入力された文字を伏せるべきでない、という議論がある(参考1:パスワードを隠すのをやめよう – U-Site、参考2:COOKPADの「伏せ字にせず入力」ボタンは素晴らしい | 徳丸浩の日記)。

入力された文字を伏せるのは、たとえば背後にいる人物にパスワードを見られないようにするためだけど、しかしクレジットカード番号の入力を非表示にしている例を見たことがない。深刻な被害につながる可能性は往々にしてクレジットカードのほうが大きいと思うのだが…。



カード番号は普通、16桁の数字で表現される。とすれば、番号の組み合わせは10の16乗になるはずだ。

しかし先頭の6桁はカードの種類を表しているもので、所有者を特定する(=非所有者を排除する)ためのものではない。とくに最初の1桁は、4ならVISA系、5ならMasterCard系、3ならJCBか、AMEX、Dinersとほぼ特定できる非常に重要な数字で、あらかじめカードの種類が分かっているなら、この桁はだれでも推測が容易ということだ。2桁目以降はやや推測が難しくなるが、後続する数字のパターン数はごく少数に限られているので、総当たりするよりはずっとチェックすべき範囲はせばまる。


また、カード番号の生成にはルーン・アルゴリズムというものが使用されていて、全ての番号の組み合わせのうち90%はもともと使用されていない。つまり10%の有効な組み合わせはあらかじめ分かっている。

よってカード番号の組み合わせは10の16乗よりもはるかに少ない。



もっとも、いまはカード番号だけで買い物ができないようになっているので(別途3~4桁のセキュリティコード等が必要)、そういう意味での不正使用を心配する必要はない。問題なのは、アップルのようにカード番号を本人確認のために使用しようとすることだ。