暗号化アルゴリズムについて(AES / Blowfish / DES)
暗号化とは
暗号化とは、データの内容を他人に分からなくするための方法である。例えば、データベースにユーザのパスワードを保存する際に使用される。なぜパスワードを暗号化する必要があるのか?万が一、データベースの情報が漏洩しても、攻撃者のその情報を解読されないようにするためである。
暗号化のプロセス
暗号化は、一定の規則により行われる。元のデータを暗号鍵というデータを使って暗号化すると、全く別のデータになる。例えば、「password_12345」というデータが、「fgerelmfsddfw32r3:;3」という形で、暗号鍵によって暗号化される。暗号化したデータを元に戻したい場合、この暗号鍵を使って、再度元のデータに戻す。このプロセスを復号化と呼ぶ。
暗号化アルゴリズム
有名なアルゴリズムを3つ紹介する。AES、Blowfish、DESである。
AES
AESとは、Advanced Encryption Standardの略であり、後ほど説明するDES(Data Encryption Standard)に代わって、新しい暗号方式としてアメリカ政府に採用された暗号化アルゴリズムである。AESは共通鍵暗号方式と呼ばれ、暗号化と復号化に同じ鍵を使う暗号方式である。共通鍵暗号方式では、利用する人数に応じて「共通の秘密鍵」を作る必要がある。つまり2人だけだと1種類、3人だ3種類、4人だと6種類、5人だと10種類といった具合である。
AESは、データを一定量(ブロック)に分けて、暗号化していくブロック暗号であり、暗号長は128ビットである。1文字が1バイト(8ビット)のため、abcdefghという文字があれば、8文字x8ビット=64ビットとなる。つまり、データを16文字ずつに分けて、暗号化する。
AESの鍵長は128ビット、192ビット、256ビットの3種類である。鍵長が長くなれば、安全性は増す一方で、その計算量は増えて時間がかかる。暗号化は複数の演算を連続して行うラウンドを繰り返すことで行われる。ラウンドは、SubBytes、ShiftRows、MixColumns、AddRoundKeyという4つの操作で構成される。
- 128ビット鍵:10ラウンド
- 192ビット鍵:12ラウンド
- 256ビット鍵:14ラウンド
Blowfish
AESとの違いを以下に記載する。AESha高速でセキュリティの高い暗号化アルゴリズムである一方、Blowfishは古いアルゴリズムで、現在はあまり使用されていない。
鍵長の違い
AESは、128ビット、192ビット、256ビットの鍵長をサポートする。一方で、Blowfishは、32ビットから448ビットの間の鍵長をサポートする
暗号化速度の違い
AESは、ブロック暗号化の中でも高速なアルゴリズムであるが、Blowfishは低速なアルゴリズムで、AESより暗号化速度が遅い。
セキュリティの違い
AESは米国政府の承認を受けた暗号化アルゴリズムであり、世界中で広く使用されている。一方で、Blowfishは現在あまり使用されていないが、昔は比較的安全とされていた。
アルゴリズムの違い
AESは、SubBytes、ShiftRows、MixColumns、AddRoundKeyの4つの基本操作から構成されるRijndaelアルゴリズムをベースにしている。一方で、BlowfishはFeistel構造と呼ばれるアルゴリズムを使っている。Feistel構造とは、同一の関数を繰り返す、繰り返し暗号である。
DES
AESとの違いを以下に示す。
鍵長の違い
AESは128、192、256ビットの鍵長をサポートするが、DESは56ビットの鍵長しかサポートしない。そのため、AESはより高いセキュリティレベルを提供できる。
暗号化速度の違い
AESはDESより効率的な暗号化アルゴリズムであるため、高速に暗号化処理できる。
参考
Discussion