【セキュリティ基礎】共通鍵暗号の歴史と代表的な暗号化処理

ブロックチェーンに限らず、インターネットを構成する技術の中で大切な暗号化技術。

新人時代、情報処理試験の勉強していた頃は密教のマントラみたくAESやDESを暗記していたので、一体何が何やら全く理解していませんでしたが、一度暗号化について歴史含め、体型的に学びたいと思い、こちらを読んでみました。

暗号化自体、結構複雑な処理をしていることも多く、一応本書でも図を交えながら丁寧に説明されていますが、一度読んでくらいで理解するのは中々に困難(;^_^

まずは暗号化で大切と言われる3つの要素の中の「共通鍵暗号」をざっと流し読みしてみました。

シーザー暗号

歴史上最もシンプルな暗号化が、古代ローマでも利用されていたシーザー暗号。

暗殺時に「ブルトゥス、お前もか」と言った事でお馴染みのガイウス・ユリウス・カエサル(英語読みでシーザー)が使用したことから名付けられた暗号化処理。

仕組みは至極単純で、アルファベットを決まった数だけ巡回的にずらすこと(例えばa→c、c→e)で暗号化しますが、26文字のアルファベットを巡回的にずらすだけでは25通りのパターンしかなく、組み合わせが少なすぎるので現代では使い物になりません。

バーナム暗号

第一次世界大戦中にギルバード・バーナムが考案した暗号。

バーナム暗号は平文と同じ長さの鍵を用意して排他的論理和(XOR)を取って暗号化している。

◼️ バーナム暗号の手順.

〜AさんからBさんへ3ビットのメッセージm(001)を暗号化して送るケース〜

1. 事前にメッセージmと同じ長さの鍵m(乱数列r:例として011)を共有しておく.

2. Aさんはmとrの排他的論理和を計算して結果c(010)を算出.

3. Bさんはcとmの排他的論理和で結果を複合化(001)して算出.

鍵 xor 鍵 = 0だから以下の関係が成立。

POINT暗号文 xor 鍵 = 平文 xor 鍵 xor 鍵 = 平文.

鍵に規則性がない(乱数である)のであれば、破ることは限りなく不可能。

しかし以下の欠点もあります。

◼️ バーナム暗号の欠点.

・メッセージと同じ長さである鍵の共有が困難.

・通信毎に鍵を変えなければならない.

仮に使いわますと、アタッカーに規則性を見破られ、破られる可能性大。

RC4

ロナルド・リーベルトが考案した状態遷移型のストリーム暗号。

KSAではデータをある規則性でスクランブルさせ、一見すると規則性が見出せないように攪拌でき、PRGAで要素同士を更に入れ替え、状態を変化させ続け、平文と排他的論理和して暗号化。

POINTR鍵スケジューリングアルゴリズム(KSA) + 擬似乱数生成アルゴリズム(PRGA)で構成.

アルゴリズムはシンプルなので、少ないコード量でコーディング出来ます。

Pythonのサンプルコードを見つけたので、気になる方は コチラご参照下さい。

SSLやWEPなど広く使われていましたが、現在では破られています。

2種類の暗号処理

暗号化をアルゴリズムの観点で分類すると、ストリームとブロックの2種類に大別。

まずはストリーム暗号。

◼️ ストリーム暗号.

・1bitや1byteなど細かい単位で処理.

・次々に乱数を発生させ、平文の要所(bit/byte)に乱数掛け合わせ(排他的論理和).

・ブロック暗号に比べて処理が単純で速度が速い.

* 擬似乱数発生器を使えば、ある条件下(シート値)で毎回同じ値が算出される.

次にブロック暗号。

◼️ ブロック暗号.

・一定サイズのブロック単位で処理.

・転字と換字の組み合わせ.

* 転字:あみだくじのように順番を入れ替える行為.

* 換字:いくつかのビットをまとめて別データに置き換える行為.

DES

DESはData Encryption Standardの略称で、ブロック暗号の一つ。

ハードウェアでの実装に適しており、ブロック暗号は転字と換字とラウンド鍵を混ぜる操作を繰り返すことで暗号化されるが、DESも概ね同じで最初にデータを二つの山に分ける特徴があります。

DES処理の流れが説明されているので コチラの説明 が分かりやすい!!

ちなみにDESの開発者にちなんで、暗号アルゴリズム(入力データを32bitずつに分割し、16段の暗号化処理を繰り返す)は「ファイステル構造」と呼ばれています。

◼️ DESに対する攻撃方法.

1. 総当たり攻撃

2. 差分解読法

3. 線形解読法

ちなみに難攻不落のDESを落として見せたのが、三菱電機の松井充さんという日本人だったと知った時は、日本人として誇りに思いましたが、FEALという線形解読法で成果を挙げたそうです。

AES

AESはAdvanced Encryption Standardの略称で、ブロック暗号の一つ。

DESの後継であり、ハードウェアだけでなく、ソフトウェアでの実装にも適しています。

AES( 詳細 )はブロック長が128bit、鍵長(かぎちょう)に応じてAES-128、AES-192、AES-256の3種類が用意されており、鍵長を長くすれば安全性が増しますが、その分計算量も増加。

AESの構造は「SPN構造」と呼ばれ、入力データを幾つかのブロックに分け、置換と転置を繰り返し行いますが、同じデータ長ならばDESよりもAESの方が高速に処理可能。