こんにちは。かっしーです。

以前のブログでこのような投稿がありました。

 

楽しい暗号スイートの話

 

こちらでは暗号スイートという、「複数の暗号化アルゴリズムの組み合わせ」について解説しています。

ふむふむ、暗号化、復号、共通鍵、公開鍵、秘密鍵……

 

そもそも暗号アルゴリズムの「基本」についての理解が足りないと分からない(?)

そこで、私と同じようなことを思った方を対象に、今回は暗号アルゴリズムの基本を説明していきます。

 

暗号とは

 

Wikipediaによると、

暗号とは、セキュア通信の手法の種類で、第三者が通信文を見ても特別な知識なしでは読めないように変換する、というような手法をおおまかには指す。いわゆる「通信」(telecommunications)に限らず、記録媒体への保存などにも適用できる。

とのことです。

 

今回は暗号の中でもシーザー暗号という最もシンプルで広く知られている暗号を例に、暗号アルゴリズムの考え方を見ていきましょう。

まずは再びWikipediaからシーザー暗号の定義を見てみます。

シーザー暗号は単一換字式暗号の一種で、平文の各文字を、辞書順に3文字分シフトして暗号文を作る暗号である。(中略)極めて単純な暗号であるが、現代の暗号においても重要な、規則(アルゴリズム)および鍵といった2つの要素が既に含まれている

シーザー暗号とは、古代ローマの軍事指導者ガイウス・ユリウス・カエサル(英語読みでシーザー)が使用した暗号アルゴリズムで、以下の特徴があります。

 

  • 平文の各文字を、辞書順に固定の文字数分シフトするという規則性(アルゴリズム)がある
  • シフトする文字数というがある

 

この規則性と鍵という考え方は、現在一般的に使用されている暗号アルゴリズムにも受け継がれています。

それでは実際にシーザー暗号を模した暗号を用いて、暗号文を作ってみましょう。

上の図は「アルファベットを1文字シフトする」暗号を図式化したものです。

例えば弊社の社名「oliva」だったら、

一番上の小文字アルファベットを真ん中の大文字アルファベットに変換し、「NKHUZ」という暗号文になります。

なんだか暗号らしい感じがしてきましたね。

 

暗号の性質

 

まず、暗号の性質を理解する上で、重要なキーワードがあります。

それは、平文暗号文暗号化復号暗号アルゴリズムです。

 

 

  • 平文:秘匿・隠蔽の処理が何も行われていない意味の分かる情報
  • 暗号文:特定のルールに従って変換された意味の分からない情報
  • 暗号化:意味の分かる情報を特定のルールに従って意味の分からない情報に変換すること
  • 復号:特定のルールに従って変換された意味の分からない情報を元の意味の分かる情報に戻すこと
  • 暗号アルゴリズム:意味の分かる情報を意味の分からない情報に変換する手段のこと
  • 鍵:暗号アルゴリズムに用いられる一定の規則

 

そして、暗号の性質として次の5つがあります。

 

それぞれの性質について説明していきます。

 

性質①

先ほど例で示した通り「平文olivaを鍵1(1文字シフト)で暗号化すれば、暗号文は常にNKHUZとなる」ということです。

つまり、「2つの暗号文が同じならば、元となった平文も同じである」と推測することができます。

 

性質②

例えば同じ平文に異なる鍵(シフト文字数)で暗号文を作ると、次のようになります。

 

性質③

反対に暗号アルゴリズムと鍵が分からなければ、解読することは困難であるということができます。

 

性質④

暗号アルゴリズム(ここでは文字列をシフトする暗号)さえ分かれば、たとえ鍵(シフトする文字数)が分からなくても、暗号文を1文字ずつシフトしていくことで、いずれは正解であるolivaにたどり着くことができるということです。

 

性質⑤

鍵1の暗号文NKHUZを鍵2で復号するとpmjwbとなり、olivaには戻りません。

 

暗号のもつ弱点

 

ここまで暗号のもつ性質について見てきましたが、これらの性質にはいくつか弱点があります。

 

性質①より、例えば「AさんがBさんに定期的に暗号文でデータを送信しており、この通信を傍受している第三者に◯日と×日の暗号文が同じ内容だと発見された」場合、以降の暗号化は無意味になってしまいます。

これに対する基本的な解決策が性質②です。つまり、鍵を毎回変更していれば暗号文が変わるため、解読が困難になります。

 

また、性質③より「少なくとも暗号アルゴリズムまたは鍵のいずれか一方は秘密にしなればならない」と考えることができますが、現在一般に普及している暗号アルゴリズムは全て仕様が公開されているため、鍵を秘密にしておくことが現実的といえます。

 

なぜ暗号アルゴリズムが公開されているのかというと、「秘密はいずれバレるもので、公開することによって外部の専門家からアルゴリズム上の問題点を指摘してもらう方が得策」という前提があるからなのです。

 

他にも、性質④より「暗号アルゴリズムが公開されている以上、いつかは解読される可能性がある」といえます。つまり、解読されるまでの時間をできる限り長くして、解読を無価値にする必要があります。

具体的には、鍵の桁数(鍵長)の長い暗号アルゴリズムを使用するということです。

 

鍵長はビット数で表現され、例えば共通鍵暗号の1つであるAESは、鍵長を128ビット、192ビット、256ビットから選択することができます。

具体的な計算はここでは割愛しますが、鍵長が長くなるほど膨大な値となり、全ての鍵を試すことが現実的でなくなってきます。

 

最後に、性質⑤のような「暗号化する時と復号する時に同じ鍵を使用する」暗号アルゴリズムを共通鍵暗号といいます。

これに対して、「暗号化する時と復号する時では異なる鍵を使用する」暗号アルゴリズムを公開鍵暗号といいます。

この2つの暗号はよく耳にすることもあるのではないしょうか?

しかし、共通鍵暗号には「鍵の配送」という悩ましい問題があり、それを克服するために生まれたのが、公開鍵暗号なのです。。

 

と、今回はここまでにさせていただこうと思います。

 

おわりに

 

今回は暗号アルゴリズムへの理解を深めるための、入門的な部分について説明しました。

ここまで読んでくださった皆さんは、暗号アルゴリズムの基本的な考え方について理解を深めることができたのはないかと思います。

暗号アルゴリズム、奥が深いです。

 

さらに一歩先、実際に使われる暗号化アルゴリズムにも興味が湧いてきたら、以下なども面白いかもしれませんね。

  • 共通鍵暗号と公開鍵暗号
  • ブロック暗号とストリーム暗号
  • 暗号アルゴリズムの歴史

 

もしかしたら他のolivaメンバーが記事を書いてくれるかも…?