先日、twitterで以下のようなツイートを目にしました。

じいさん「肉まんください」
女店員「おいくつですか?」
じいさん「いくつに見えますか?」
女店員「・・いくつでしょうかね・・?」
じいさん「もう80なんですよ」
女店員「肉まん80個で7392円になります」
じいさん「いや・・そうじゃなくて」
女店員「7392円になります」
じいさん「・・・」


間の抜けたやり取りが面白いということでリツイートされてきたものです。

これに対して私の友人が「同じもの80個の値段がどうして7392円という金額になるのか」と疑問を呈していました。

なるほど数的感覚に優れた疑問だと思います。友人が言いたいことをもう少し詳しく言い直すと、「単価x円のものを80個買ったならば総額80x円になるはずだから、請求される金額は80で割り切れるはずである。ところが7392円は10で割り切れないことがパッと見で明らかで、おかしい」ということです。

上記の話が実話か作り話かはわかりませんが、現実に起こり得ないことが盛り込まれているとなると、一気に作り話臭くなってしまいますよね。

しかしながら、肉まん80個で7392円というのは、実は何らおかしな話ではありません。

ポイントは「消費税」です。

税込表示x円にそのまま80をかける(つまり、税抜きの金額にまず消費税をかけ、その後に80倍する)と確かに総額は80x円になります。

しかし、税抜き価格に80をかけ、後から消費税を掛けると、80で割り切れる整数になるとは限りません。

実際冒頭のツイートで出てくる7392円は、税抜き価格88円(税込92円)の肉まんを80個買って消費税を後掛けすることで実現することができます。

compatible1

最初に消費税を掛けると丸められてしまう小数点以下の端数が、省略されずに反映されている形ですね。

小数点以下の端数を切り捨てるか、四捨五入するか、切り上げるかについて法律による基準はなく、事業主の方針によってばらついているようですが、今回は仮に小数点以下の端数は切り捨てると仮定しましょう。以下、「消費税をかける」と言ったら、「1.05を掛けてから小数点以下を切り捨てる」という操作を指すものとします

すると今回の現象は、ガウス記号を使って以下のように記述できます。

compatible2

左辺が税抜表示で80個分の値段を足してから消費税を掛けたもの、右辺が個別の商品にまず消費税を掛けてから80個分足したものです。

この現象は80個に限った話ではなく、より本質的には以下のように言い表すことができます。

compatible3

左辺が消費税後掛け、右辺が税込表示をそのまま足した金額です。

ここで「x円に消費税をかける」という操作が[1.05x] で表されていることに注意しましょう。この[1.05×何か]という関数をTでと置くと、上記の性質は以下のように見やすくまとめることができます。

compatible4

こういう状況を数学的には「消費税をかけるという操作と、足し算するという操作は可換ではない」と言います。「Tは準同型ではない」という言い方もします。

数学では関数同士が可換かどうかは非常に重要で、可換な関数をいくつも繋げた「可換図式」というものを考えることがよくあります。可換図式を描くにあたっては関数同士が可換かどうかを予め検証する必要があるわけですが、これが慣れるまではなかなか難しく、数学のできる方でも苦手意識を持っている方が多くいらっしゃいます。学生だけで専門書を輪講している際など、みんなで考えてもわからず、(本当はすごくいけないことですが)「もうこれ可換ってことにして先に進む…?」という雰囲気に出くわしたこともあります。

専門書で可換図式ばかり見ていると、「わりと可換性って成り立ってるんじゃない?」という錯覚に陥ってしまうこともあるのですが、実は可換というのは非常に強い条件であり、そうそう簡単に成り立ってくれるものではありません

上記の肉まんと消費税の例はまさに「可換性が成り立たない例」ですね。他にも例えばある数を二乗してから二倍した数と、二倍してから二乗した数は、一般に一致しません。他にも可換でない例はいくらでも作ることができます。

数学を離れて現実の世の中に目を向けてみるとなおのこと、だいたいのことは可換にはできておらず、我々は無意識的にそのことを自覚しているように思います。

例えば毎日夕食後に2時間勉強してから6時間寝ているというサイクルの人が、夕食後すぐ6時間寝て朝2時間勉強することを強要されたら、パフォーマンスに大きな違いが出るでしょう。同じ成果を挙げたい状況において、6時間寝ることと2時間勉強することは可換ではありません。

「この人の話を5年早く聴きたかった!」とかいうのも、「話を聴く→5年間過ごす」ということができていれば、「5年間過ごす→話を聴く」で至ってしまった現在よりも、より望ましい自分になっていただろうという考えの現れです。

このように数学でも数学以外でも、「可換」というのはそうそう簡単に成り立っている性質ではないので、「二つの操作の順序を入れ換える」という場面に出くわした際は、それにより結果に違いは出ないのかとアンテナを張る意識を持つことが大切です。


最後に、既に訪れているクラウド時代において、「写像の可換性」が我々のプライバシーを守るために重要な役割を担うことになるというお話をさせていただこうと思います。(蛇足ですがたまたま今日の日本経済新聞の一面で「IT各社がインドにクラウド拠点を作る」という話題が扱われています。)

クラウドとは「クラウドコンピューティング」を略した言い方です(略称として使われるだけでなく、「クラウド」自体も意味を持った用語として使われるので注意が必要です)。詳しくはWikipediaのクラウドコンピューティングのページ等を参照していただければと思いますが、一言で言うと「計算やデータ保存を外部委託しよう」という概念です。

例えば、色んなデータを自分のパソコンの中やUSBメモリに保存して持ち歩くのではなくて、インンターネット上に保存することにより、手ぶらで出かけてもネットに繋がったパソコンさえあればどこからでもアクセスできるようになります。例えばDropboxやEvernoteなどのサービスは有名かと思います。【関連サイト:Dropbox, Evernote(Wikipediaより)】数年前は数千円を出してUSBメモリを購入しなければならなかった2ギガバイトという容量を今や無料で使用できるのですから、技術の進歩は本当にすさまじいです。

また、何かを計算したい時にソフトウェアをいちいちインストールして計算するのではなくて、どこかのサイトにアクセスし、Google検索するような感覚でサイトに計算してもらう、というのもクラウドコンピューティングの一例です。無料で数学的な計算をしてくれる代表的な例としてはWolfram AlphaSageという数式処理システムが挙げられます。私はこれら2つのサイトの存在を初めて知った時は本当に驚きました。サイトにアクセスできる環境さえあれば、高性能のパソコンを持たなくても大量の計算ができる、というのもクラウドコンピューティング発展の重要なモチベーションです。

さて、このようなサービスを受ける側にとって、一番確かめておきたいのが「セキュリティはちゃんとしているのか」ということです。

例えば2ギガの容量となると、写真であれば数百枚は保存することができるわけですが、それらが全て流出したらたまったものではありません。

実際にクラウド導入を検討している事業者が一番の懸念要因として挙げているのが「セキュリティ」であるという調べがあり、サービスを提供する側としても、セキュリティに関する悪い噂だけは立たないようにしようと必死で努力しているはずで、データ保存に際しての情報流出対策だったりパスワード管理などは、既存の技術をできる限り取り入れて万全を期している会社が殆どでしょう。

問題は「計算委託」の際のプライバシー保護です。

例えばどこかに保存してある資料を「あいうえお順に並べ替えて欲しい」という要求を出すとします。並べ替えというのも一種のアルゴリズムに則った計算ですから、これは計算の外部委託です。

この場合、素朴に考えると、どうしても計算を依頼する相手に対して、資料のタイトルを教えなければいけません。タイトルを隠したまま(つまり、暗号化したまま)だと、どれが「あ」から始まる資料なのか、どれが「い」からなのか、相手はわからないからです。

ところが、資料のタイトルを第三者に知られてしまうのは、情報流出以外の何物でもありません。例えば資料の中には「●●年度予算」や「社員名簿と住所」などのタイトルが含まれることが往々にしてあり、タイトルだけでも知られてしまうと、「あの人は重要なデータを持っているようだ。不正ログインできないか試してみよう」などのモチベーションを与えてしまうことに繋がりかねません。

「●●という資料を探してくれ」という計算依頼も、同様ですね。

「自分で計算したくない」という欲求を満たそうとすると、常にプライバシーの危機に直面するというジレンマがあります。


このジレンマを解決するにあたって、「写像の可換性」が重要な役割を担います。

まず先ほどから出てくる「計算」をもう少し具体的に述べると、コンピュータ上の命令は全て電気信号であり、つきつめていくとデジタル回路をどのように進むかというところに帰着されます。そしてデジタル回路はブール代数と呼ばれる数学の言葉で記述することができます。ブール代数は「足し算」と「掛け算」の二種類の演算が許された代数系です。

つまり、あらゆる計算命令は「足し算」と「掛け算」の組み合わせでできた関数とみなすことができます。

さて、今、Eという関数で暗号化しDという関数で復号できるような暗号系があったとしましょう。

但し、単なる暗号系ではなくて、関数Dは「足し算」「掛け算」の両方と可換という性質を備えているとします。そうするとその組み合わせでできているあらゆる計算命令とも、可換になるわけです。

すなわち、仮に「xというファイルを探す」という計算がfという関数で記述されているとすると、Df=fDが成り立つことになります。

そうするとあなたは、探して欲しいファイル名を相手に伝えることなく、欲しいファイルを探すという作業だけを相手に依頼することができます。

具体的にどうするかと言うと、「そちらに保管してあるxというファイルを探したいんですけど」と依頼するかわりに「そちらに暗号化して保管してあるE(x)というフィアルを探してください」と依頼を出し、f(E(x))を返してもらいます。あとはこれにDをかければ、Df=fDが成り立っているお蔭でD(f(E(x)))=f(D(E(x)))=f(x)となって、無事「xを探す」という計算fを、x自体の名前は伝えることなく、外部委託できたことになります。


このように、復号化関数が「足し算」「掛け算」両方と可換になるような暗号を「完全準同型暗号(fully homomorphic encryption)」と言います。

完全準同型暗号の利便性は既に上で述べた通りですが、現在の大問題として、実際に使用できるレベルの完全準同型暗号は、未だ作られていません!

「掛け算」のみと可換な暗号は、たくさん知られています。例えば有名なRSA暗号や、エルガマル暗号と呼ばれるものは掛け算と可換になり、実はこれらの性質によって電子マネーや電子投票と言ったものの安全性が担保されています。また、「足し算」のみと可換のものとしては、例えばパイラー暗号というものがあります。

しかしながら、完全準同型暗号の構成は2009年に当時スタンフォード大学の院生だったクライグ・ジェントリー氏が発明・発表するまで完全なる未解決問題でした。(私は学会でジェントリー氏の講演を直接聴いたことがあるのですが、非常に物静かかつ謙虚で、学者らしい方でした)

ジェントリー暗号により、完全準同型暗号を作るというところまでは解決したのですが、この暗号は計算に物凄く時間がかかるので、実用できる代物ではありません。

一昨年や昨年に、ジェントリー暗号に続く完全準同型暗号がいくつか作られたり、それらの演算スピードを改良する方法が発表されたりしていますが、それでも未だ実用できるレベルには至っていないのが現状です。そしてこの段階の学術発展に大きく貢献できるのは、暗号業界では「理論屋」と呼ばれる我々数学者なのだと思います。

もしあなたが、復号化関数が「足し算」「掛け算」の両方と可換になる、"安全かつ効率的に計算可能な"暗号系を作ることができたとしたら、有名になったり特許を取ったりできるかもしれません。問題自体を把握するのに専門的知識はあまり必要ないので、まとまった時間の取れる方は是非是非チャレンジしてみてください!


よろしければ人気ブログランキングにワンクリックお願いします★