アカウント名:
パスワード:
直感的には「1/11(9%)の割合で検出できないケースがありそう」と思ったのですが…
もしかしたらすでにお読みになられてるかもしれませんが、上原哲太郎氏の考察 [digitalforensic.jp]によると、末尾チェックデジットが0の場合、・「隣あう数字が入れ替わった場合」の9.6%が検出できない・「ある一桁の数字を間違えた場合」の9.1%が検出できないそうです。
モンテカルロな調査なので数式的な説明はありませんが、そういった操作で mod 11 が1→0または0→1と変化する(そのためどちらもチェックデジットが0になる)ような数字列が9.6%/9.1%の割合で存在する、という話で。
「11%ほど」ってところは、私(安岡孝一)自身ちゃんと条件を書いてないのですが、まあ、予想される最悪値なのです。例を挙げると、「000000000000」っていう(絶対に使われない)マイナンバーに対しては、各桁は、上から順に2,9,3,4,6,8,2,9,3,4,6っていう打ち間違いが素通しされうるので、「11%ほど」だったりします。もちろん平均値は、もう少し下がるかもしれません。
なるほど了解しました。そういう考え方でしたら、上原氏の調査では「平均値で9.1%になる」ということになりますかね。
平均値は、うーん、「ある一桁の数字を間違えた場合」の「ある一桁」にチェックディジットを含んでない場合は1/10、含んでる場合は11/120あたりになるかしら。いえ、その、まだ真面目に検討してないので、間違ってたらごめんなさい。
私もちょっと考えて見ました。
チェックデジットが0のままであるためには、p が 1 だけずれる必要がありますが、mod 11 は11通りなのに各桁の数字は10通りしかないので、ある一桁に対して、1/10の割合で「mod 11 が1つずれるような数は存在しない」ことになり「ある一桁の数字を変えても、チェックデジットがやっぱり0になる」ような間違いが存在するケースは 9/10 だけ。(例えば、000000000140は、j = 1、k = 4 → sum = 11 → p = 0 で、チェックデジット 0 ですが、p = 1 になる(k×2 mod 11 = 9 になる) k は存在しませんので、kの桁では、間違えてもチェックデジットの衝突するケースはありません)
そのため、桁毎に見て「その1桁を変えて、チェックデジットが0のまま」な数の存在割合が9/10で、それが11桁あるので、ある数値に対して「ある一桁の間違いだけどチェックデジットが一致する数値」の数は平均(9×11/10)個。
結果、「ある一桁」にチェックディジットを含んでない場合は、「ある一桁の間違い」が各桁9通り×11桁なので、衝突割合は (9×11/10)/(9×11) = 1/10。「ある一桁」にチェックディジットを含む場合は、「ある一桁の間違い」が各桁9通り×12桁なので、衝突割合は (9×11/10)/(9×12) = 11/120。になる、って感じでしょうか。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
他の各1桁の単純な打ち間違いを素通しするのは9%ほどでは? (スコア:1)
直感的には「1/11(9%)の割合で検出できないケースがありそう」と思ったのですが…
もしかしたらすでにお読みになられてるかもしれませんが、上原哲太郎氏の考察 [digitalforensic.jp]によると、末尾チェックデジットが0の場合、
・「隣あう数字が入れ替わった場合」の9.6%が検出できない
・「ある一桁の数字を間違えた場合」の9.1%が検出できない
そうです。
モンテカルロな調査なので数式的な説明はありませんが、そういった操作で mod 11 が1→0または0→1と変化する(そのためどちらもチェックデジットが0になる)ような数字列が9.6%/9.1%の割合で存在する、という話で。
条件付き確率の最悪値と平均値 (スコア:2)
「11%ほど」ってところは、私(安岡孝一)自身ちゃんと条件を書いてないのですが、まあ、予想される最悪値なのです。例を挙げると、「000000000000」っていう(絶対に使われない)マイナンバーに対しては、各桁は、上から順に2,9,3,4,6,8,2,9,3,4,6っていう打ち間違いが素通しされうるので、「11%ほど」だったりします。もちろん平均値は、もう少し下がるかもしれません。
Re: (スコア:1)
なるほど了解しました。
そういう考え方でしたら、上原氏の調査では「平均値で9.1%になる」ということになりますかね。
Re: (スコア:2)
平均値は、うーん、「ある一桁の数字を間違えた場合」の「ある一桁」にチェックディジットを含んでない場合は1/10、含んでる場合は11/120あたりになるかしら。いえ、その、まだ真面目に検討してないので、間違ってたらごめんなさい。
Re:条件付き確率の最悪値と平均値 (スコア:1)
私もちょっと考えて見ました。
チェックデジットが0のままであるためには、p が 1 だけずれる必要がありますが、mod 11 は11通りなのに各桁の数字は10通りしかないので、ある一桁に対して、1/10の割合で「mod 11 が1つずれるような数は存在しない」ことになり「ある一桁の数字を変えても、チェックデジットがやっぱり0になる」ような間違いが存在するケースは 9/10 だけ。
(例えば、000000000140は、j = 1、k = 4 → sum = 11 → p = 0 で、チェックデジット 0 ですが、p = 1 になる(k×2 mod 11 = 9 になる) k は存在しませんので、kの桁では、間違えてもチェックデジットの衝突するケースはありません)
そのため、桁毎に見て「その1桁を変えて、チェックデジットが0のまま」な数の存在割合が9/10で、それが11桁あるので、
ある数値に対して「ある一桁の間違いだけどチェックデジットが一致する数値」の数は平均(9×11/10)個。
結果、
「ある一桁」にチェックディジットを含んでない場合は、「ある一桁の間違い」が各桁9通り×11桁なので、衝突割合は (9×11/10)/(9×11) = 1/10。
「ある一桁」にチェックディジットを含む場合は、「ある一桁の間違い」が各桁9通り×12桁なので、衝突割合は (9×11/10)/(9×12) = 11/120。
になる、って感じでしょうか。