エンジニアが暗号理論を学んでみた。〜暗号の基礎編〜

f:id:cluex-developers:20170228215203j:plain

こんにちは、神山です。
今まで週3日運動してたのですが、今冬、寒さのあまり週1日のみになってしまいました。極端に寒さに弱いです。

今回は暗号理論についてブログを書かせて頂きました。

暗号理論とは

暗号理論は暗号の仕組みを研究する分野になります。Wikipediaを引用させて頂きました。

暗号理論では主に次の二つを扱う。

  • 暗号系 (cryptosystem) の構成方法や性能・安全性などに関する研究
  • 暗号や電子署名といった守秘 (confidentiality) や完全性 (integrity) を実現する、 暗号アルゴリズムや暗号プロトコルの研究

暗号理論では、主として、アルゴリズムプロトコルによってセキュリティ機能を実現する研究(情報セキュリティ)がなされており、 OSやネットワークの特徴を生かしてセキュリティ機能を実現する研究(コンピュータセキュリティやネットワークセキュリティ)と区 別される。
暗号理論には、情報理論、符号理論、計算複雑性理論といった計算機科学、数論や代数幾何離散数学といった数学、時には 力学系などの物理学の知見が用いられることもある。

引用元: https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E7%90%86%E8%AB%96

要するに、暗号のアルゴリズムの仕組みと安全性を学ぶ学問ということです。ただ、学ぶには大学レベルの数学(主に代数分野)の知識が必要になります。
自分は数学科出身の為、大学時代に少しだけかじりました(専門外だったので習熟度は低いですが…)。最近になって、HTTPSの仕組みを学ぶのに必要になり再度勉強しております。

暗号の代表例

例えば、シーザー暗号とかRSA暗号とか聞いたことある人も多いのではないでしょうか。また合言葉も暗号の一種と言えます。

そこまで詳しくない人もいると思うのでシーザー暗号について説明しようと思います。 シーザー暗号はもとのメッセージ(アルファベットの文字列)を適当に決めた数字の数だけシフトさせて暗号化する方法です。

シフトさせる文字数を3文字としたとき。
a -> d
k -> n
のように、3文字シフトさせて暗号化する。

「THE ALFEE」
をシーザー暗号(文字数3)で暗号化すると、
「WKH DOIHH」
となる。

メッセージを送りたい人に事前に「3文字シフトで」と伝えておけば、暗号を送り合うことができます。

ちなみにシーザー暗号の由来は、ジュリアス・シーザーから来ております。 ジュリアス・シーザーは紀元前に活躍したとされる政治家、軍人です。「賽は投げられた」という有名な言葉を残しております。

馴染み深い例として、シェイクスピアの戯曲「ジュリアス・シーザー」はご存知でしょうか?
「ブルータス、お前もか」というセリフが出て来る有名なものです。

その「ブルータス、お前もか」のセリフを放った人こそ、ジュリアス・シーザーです。

用語

基本的な知っておくべき用語を挙げました。先程のシーザー暗号を例に取り説明します。

  • 平文
    暗号化したいメッセージのことです。「THE ALFEE」が平文です。

  • 暗号化
    平文を暗号化することです。「THE ALFEE」を「WKH DOIHH」とすることです。

  • 復号
    暗号文を正規の方法で平文に戻すことです。シーザー暗号で「3文字シフトした」と共有されていた場合、「WKH DOIHH」から「THE ALFEE」という平文を取り出すことを指しております。
    ちなみに復号化という言葉が使われることもありますが同じ意味になります。ただ復号という言葉に「暗号を平文に戻す」という意味があるので、復号「化」とすると意味が2重になる為、本当は間違いらしいです。

  • 暗号化方式
    暗号の名称です。シーザー暗号やRSA暗号などにあたります。


  • 平文を暗号化するのに使うもの、また暗号文を復号するのに使うものです。暗号化方式がシーザー暗号の場合、シフトさせる文字数が鍵です。上の例だと「3」が鍵になります。

  • 解読
    これは復号と似て非なるものなので注意してください。暗号文から平文を取り出すことではあるのですが、鍵を知らない状態で取り出すことです。
    例えば、「探偵が暗号を解読した」というセリフがドラマ等であると思います。これは探偵が鍵を知らない状態で暗号を読み取るからです。基本的に探偵がするのは「解読」です。
    もし「復号」としたら、探偵自身が重要参考人ですね(暗号を平文に戻す方法を知っているということなので)。

そもそも暗号とは?

最後に暗号を数学的に説明しようと思います。

暗号化方式とは。
P: 平文の集合(plaintext)
C: 暗号化文の集合(ciphertext)
K: 鍵の集合(key)
E: 暗号化関数の集まり(encryption function)
(暗号化関数とは、平文を暗号化するもの。シーザー暗号(文字数3)で暗号化することだと考えればよい。)
D: 復号関数の集まり (decryption function)
(復号関数とは、暗号文を復号するもの。暗号文をシーザー暗号(文字数3)で復号することだと考えればよい。)
この5つからなるものを暗号化方式という。また下記を満たさなくてはいけない。

∀k ∈ K, ∀p ∈ P, ∃e ∈ E => ∃d ∈ D, d(k, e(k, p)) = p
(直訳すると、適当な鍵を用いて平文を暗号化したとき、必ず復号できる方法があるということ。)

数学用語で書いてみましたが、基本的に最後の直訳を理解して頂ければ大丈夫です。 数学こそ、簡単な言葉をただ難しくする暗号ですね。

他にも、秘密鍵暗号(共通鍵暗号)とか公開鍵暗号とか書きたいことがあるのですが、内容が重くなりすぎるのでまた別の機会で書こうと思います。

We’re hiring!!

Cluexではビジネスサイド、エンジニアサイド共にメンバーを募集しています!
お気軽にご連絡下さいませ! エンジニアの方、ぜひ情報交換しましょう!

www.wantedly.com

www.wantedly.com