「35を2つの素数の積で表わしなさい」という問に答えられますか?答えられますよね?答えは5と7です。では、221なら?これはちょっとむずかしい。答えは(?) 。どうして難しいのか?それは馬鹿正直に221をいろいろな素数で割って見て割り切れるかどうか確かめなくてはならないからだ。これは別に僕らがバカなせいではなくて、頭のいい数学者もいまのところこのような「総当たり」的なやり方でしか、数を素数の積に分解するやり方を知らず、また、きっとそのようなやり方しかないだろうと信じられている。未来の銀行の暗証番号システムではこのやり方を使う。まず、銀行と顧客の間である数を決めておく。例えば、13としよう。顧客が銀行の口座からお金を降ろすとき、銀行の計算機は13という数を入力することを要求するのではなく、13にある数をかけてできた数、例えば221を顧客に見せる。顧客はここであらかじめ決められている13という数で221を割ることにより、銀行の計算機が13にかけて221を出したある数、つまり、17を知ることができる。銀行の計算機は顧客が17を返してくれば正しい顧客として認識して預金の引き出しを許可し、さもなければ拒否する。このやり方かなら、電話を何回もかけまくって暗証番号をあてる、というやり方は使えないことが解るだろう。221に対しては17を返すのが正しいが、次に電話をかけたときは銀行の計算機は221以外の数、例えば、377を提示してくるかもしれない。この時は17でなく29を返さなくてはいけない、というように返すべき値が常に変化し続けるから総当たりで暗証番号を知ることはできない。それでも勿論、偶然一致することはあるかもしれないが、この偶然は単純な暗証番号方式に比べてずっと少ない。しかも、単純な暗証番号方式では4桁の場合、10000回電話をかけられたら必ず当たってしまうが、この新しいやり方では何回やっても「必ずあたる」ということにはならない。
ここで頭のいい人ならこう考えるかもしれない。「221が13と17の積だというのは計算機を使えばすぐにわかるではないか。だから、銀行の計算機が221を示したら、素早く計算して13と17をかけてできる数が221であることをしることができる。ここで正しい13を返せばお金が引き出せる。間違いの17を返しても、正しい答えが13だと解ってしまうから全然、暗証番号にならないぞ。むしろ前より悪いではないか?」と。だが、心配ご無用。「情報セキュリティの科学」という本によれば、10桁の数をあらかじめとりきめておいて、銀行の計算機にこれに10桁の数をかけて20桁の数を提示するようにさせれば、この20桁の数がどのような2つの数の積であるかを知るために必要な計算量は、現存する最高速のスーパーコンピュータを借り切って計算しても1200日あまり(勿論、夜昼なく動かし続けての話だ)かかることが解っている。あなたの預金が1000万円以下なら、スーパーコンピュータを1200日借り切るのにかかる費用に比べて全然無視できるほどわずかなお金なのでだれもそんな馬鹿なことはしないと保証できる。だから、何も心配することはないのだ。