こんにちは、積分定数です。数学大好き人間として避けて通れないのが暗号理論です。そこで今日は、そもそも暗号って何?どういう仕組みなの?といった点にフォーカスを当てて説明していきます。
ウィキペディアにはこう書いてあります。
暗号とは、セキュア通信の手法の種類で、第三者が通信文を見ても特別な知識なしでは読めないように変換する、というような手法をおおまかには指す。
例えば、好きな子に向けて書いたラブレターを友達とかに見られたくないですよね。そこで「あなたがすきです」という文に特定の操作をすることで「いにちぎせくどせ」という意味不明な文字列に変えることができます。これは母音を1つずらしただけなのですが、第三者には伝わらないので十分暗号化に成功したと言えます。この「母音を1つずらす」という操作が暗号理論でいう「鍵」に当たります。ラブレターを書く際は母音を1つずらして書くことを強くお勧めします。
暗号の強度とはつまり「鍵」の強さに依存します。前述の「母音を1つずらす」という鍵はちょっと賢い人なら解読してしまうかもしれません。そこで求められたのが「平文(暗号化する前の文)を暗号化するのは簡単だけど、暗号文から平文を割り出すことが難しい」というような鍵です。そんな都合のいい鍵があるわけ、、、あるんです。
皆さん、素因数分解って知ってますか?簡単に言うと全ての正の整数は素数の積で表せるってことです。素数とは「1と自分自身以外に約数を持たない数」のことです。文では分かりにくいので実際にやって見ましょう。
まずは10を素因数分解します。すると
10=2×5
と表せますよね。2と5は「1と自分自身以外に約数を持たない数」、つまり素数です。このように、全ての正の整数は素数×素数×....で表せるのです。
今みたいに10を素因数分解しろ、という話なら簡単に2×5と答えが出せますが、数が大きくなってくると素因数分解はだんだんと難しくなっていきます。例えば8633を素因数分解しろと言われたら、、
8633=89×97 (89も97も素数)
となります。こんなの、普通わかりませんよね。しかし逆に
89×97=8633
という計算は小学生でもできます。この性質を暗号に利用したのです。
そこで、「ある文を入力したら適当な巨大素数pに変換してくれる関数」を考えます。つまり「あなたがすきです」という文を入力したら何十桁もある巨大な素数に変換してくれるのです。そして鍵に使うのももちろん巨大素数。ここでは鍵の巨大素数をqとします。すると、送られてくる暗号文Nは
N=p×q
と表せますね。この暗号文Nからpとqを解読するには現代の最速コンピュータを使っても数億年かかると言われています。しかし「あなたがすきです」という文を鍵を使って暗号文Nに変換するのはとても簡単です。これが現代の暗号理論の基礎となった考え方です。
3.暗号通貨との関係性
ブロックチェーン上に記録された何桁もの数字とアルファベットの羅列を見たことはありませんか?あれは16進数によって表されたれっきとした"数字"なのです。ビットコインに使われている暗号はハッシュと呼ばれる関数によって作られています。例えば「AさんはBさんに1BTC送金した」という取引はハッシュ関数によって英数字の羅列に変換されるのです。そしてやはり16進数によって表された英数字の文字列を読み解いて、元の取引履歴を読み取ることは現代のコンピュータでは事実上不可能なのです。現代のコンピュータでは…