架空のdカード プリペイドを作成してみよう!(演繹編)
皆さん、架空のクレジットカード番号を不正作出してみたくありませんか? してみたいですよね?
前回の帰納編に引き続き、不正利用されやすいと噂の「dカード プリペイド」を対象に、ネット上の情報から各種規則を帰納し、演繹により架空のカード番号を作り出すことに挑戦してみようと思います☆(ゝω・)v
dカード プリペイドの帰納結果
ここまでの情報をまとめると、ポインコデザインのdカード プリペイドの帰納結果は次の通りです。
- カード番号:5302-370h-000l-mnop
- 名義人:PREPAID MEMBER
- 有効期限:発行の4年後
- セキュリティコード:不明
カード番号の下4桁が判明すると、ほぼ全桁が特定されてしまう危うさがよくわかります。
皮肉にも末尾のチェックディジット(p)のおかげで欠けている桁の組み合わせが絞られてしまうのです。
チェックディジットの計算
有効なカード番号を絞り込むには、Luhnアルゴリズム(modulus 10, MOD-10)によりチェックディジットを計算する必要があります。
ところがネット上に公開されているのは、実在の16桁のカード番号がMOD-10に合致するか否かを判定するプログラムばかりで、架空の15桁の番号からチェックディジット1桁を算出するものは見つかりません。それもそのはず、普通はショッピングサイトなどで入力を検証するために利用するアルゴリズムですから、クレジットマスター的にチェックディジットを算出・付加しようとするのは開発者か犯罪者くらいのものです。
仕方ないので任意の入力値からチェックディジットを算出・付加して出力するWindowsバッチを作りました。
- MOD-10.bat (1KB)
::Usage: MOD-10.bat [number or numlist.txt] @echo off cd /d %~dp0 :MAIN setlocal enabledelayedexpansion if "%1"=="" ( set /p s=">" call :LUHN !s! call :MAIN ) else if exist "%1" ( for /f "usebackq" %%i in ("%1") do (call :LUHN %%i) ) else ( call :LUHN %1 ) endlocal exit /b 0 :LUHN setlocal enabledelayedexpansion set num=%1 set sum=0 set digit=0 set checkdigit=0 call :STRLEN %num% for /l %%i in (1,1,%len%) do ( set digit=!num:~-%%i,1! set /a odd=%%i%%2 if !odd! equ 1 ( set /a digit*=2 if !digit! geq 10 (set /a digit-=9) ) set /a sum+=!digit! ) set /a checkdigit=10-(%sum%%%10) echo %num%%checkdigit:~-1% endlocal exit /b :STRLEN set str=%1 set len=0 :LOOP if not "%str%"=="" ( set str=%str:~1% set /a len=%len%+1 goto :LOOP ) exit /b
使用例1
>MOD-10.bat >36436 364364
使用例2
>MOD-10.bat 36436 364364
使用例3
>more cardnumber.csv 42424242424242 51051051051051 35660020203605 3782822463100 305693090259 60111111111111 >MOD-10.bat cardnumber.csv 424242424242424 510510510510515 356600202036056 37828224631003 3056930902597 601111111111116
バッチなので実行速度がネックですが、そこは割り切りましょう。
架空の会員番号の作成
次はバッチに食わせる元データの生成ですが、Excelのフィル機能に甘えることにしました。
- 000000000-000009999.csv (160KB)
- 010000000-010009999.csv (160KB)
- 020000000-020009999.csv (160KB)
- 030000000-030009999.csv (160KB)
- 040000000-040009999.csv (160KB)
- 050000000-050009999.csv (160KB)
- 060000000-060009999.csv (160KB)
- 070000000-070009999.csv (160KB)
- 080000000-080009999.csv (160KB)
- 090000000-090009999.csv (160KB)
現在の発行枚数は10万枚に満たないことから、1万枚分のセットを10グループ分作れば十分でしょう。
架空のカード番号の作成
さて、いよいよ架空のカード番号の作成です。
>MOD-10.bat 000000000-000009999.csv>000000000-000009999.txt
こんな感じでbatにcsvを食わせて、リダイレクトで出力内容をファイルに保存します。
- 000000000-000009999.txt (176KB)
- 010000000-010009999.txt (176KB)
- 020000000-020009999.txt (176KB)
- 030000000-030009999.txt (176KB)
- 040000000-040009999.txt (176KB)
- 050000000-050009999.txt (176KB)
- 060000000-060009999.txt (176KB)
- 070000000-070009999.txt (176KB)
- 080000000-080009999.txt (176KB)
- 090000000-090009999.txt (176KB)
これで架空のカード番号リストが出来上がりました\(^o^)/
手持ちのdカード プリペイドのカード番号は上記の中に含まれていましたでしょうか? 番号検索の際は、ブラウザのCtrl+Fキーによるページ内検索か、ローカルのテキストエディタでの検索機能をご利用ください。決して「あなたのカード番号が漏れていないかチェックします」などと謳うWebサービスにあなたのカード番号を送信してはなりません。サービスの提供者に悪意がなくても、意図せずログに残ってしまったり、悪意のある第三者が経路上のデータを盗み見ていないという保証はどこにもありません!
dカード プリペイドから得られた教訓
dカード プリペイドの発行が始まってからというもの、SNS上でのカード番号(の一部)を自ら晒し、周りから指摘を受けて慌てて削除するという事例が多発したため、実際に一部の情報から決済に必要な情報が復元できることを示せば危機感を持ってもらえるのではないかと思い、今回の検証に至りました。
同じようなトラブルがau WALLETで発生した際は「カード情報を自らネットに晒した結果の自業自得」で済んだのですが、もし今回の検証結果が正しければdカード プリペイドでは本人に過失がなくても不正利用されるリスクが高いということになってしまいます。
バンドルカードが1年前に同じようなことをやらかした時に「やってはいけないこと」という認識を業界全体で共有しておくべきだったのかもしれません。※半年ほど前からバンドルカードはランダムな番号を発行するようになりました。
今回の検証を通して得られた教訓は次の通りです。
利用者としての教訓
- カード画像をネットに上げない
- 半端なモザイク処理は無意味
- カード番号の下4桁を晒さない
- 売上票控えは厳重に処理する
- 残高は常に限りなく0にしておく
- dカード プリペイドの破棄を検討する
発行事業者としての教訓
- 先着順の限定デザインにはしない
- 他人と共有したくなるデザインにしない
- 推測しやすい会員番号にしない
- 安全性を疎かにしない
国際ブランドを持つプリペイドカードが次々と登場していますが、ICチップ非対応の磁気ストライプカードだったり、3Dセキュアに非対応だったり、コスト重視でセキュリティが疎かになっているように思います。
お約束
最後になりましたが、ここで示したカード情報の不正利用は犯罪です。
刑法第161条の2
- 人の事務処理を誤らせる目的で、その事務処理の用に供する権利、義務又は事実証明に関する電磁的記録を不正に作った者は、5年以下の懲役又は50万円以下の罰金に処する。
- (省略)
- 不正に作られた権利、義務又は事実証明に関する電磁的記録を、第1項の目的で、人の事務処理の用に供した者は、その電磁的記録を不正に作った者と同一の刑に処する。
- 前項の罪の未遂は、罰する。
プリペイドカードは割賦販売法の対象にならないためクレジットカードの不正利用に比べて罪が軽いと認識していますが、その他いかなる刑事上・民事上の責任が発生しても当方は責任を負いません。
最近のコメント