共通鍵暗号方式
共通鍵暗号方式(Common key cryptosystem)
暗号化と復号化に同一の鍵を用いる方式です。
秘密鍵暗号方式(secret key cryptosystem)や対称鍵暗号(Symmetric key encryption scheme)、慣用暗号方式とも呼びます。
共通鍵暗号方式では、暗号化処理におけるアルゴリズムの分類としてブロック暗号とストリーム暗号に分けられます。
ストリーム暗号
平文をデータの流れ(ストリーム)として、ビット・バイト・文字毎に処理する暗号方式です。
「キーストリーム(鍵ストリーム)」と呼ばれる擬似乱数を暗号鍵として使用します。
処理が単純化できるため処理速度が速く、暗号化によるデータサイズの増加がありません。
「RC4」、「SEAL」や「MULTI-S01」などの暗号方式があります。
ブロック暗号(block cipher)
平文を一定サイズのブロックに分割して、ブロックごとに暗号処理を行う方式です。
処理を複雑にすることで暗号強度を高めることができますが、処理速度が遅いことがあります。
「DES」や「AES」などの暗号方式があります。
暗号アルゴリズムのモード
ブロック暗号では、固定長のブロックデータ毎に暗号処理を繰り返すこととなります。
この暗号処理を繰り返す方法を「モード」といいます。
暗号の処理モードは以下のものがあります。
ECB (Electronic Code Book)
暗号ブロック間の関連性はなく、平文をブロックごとに区切り暗号化する方式です。
平文ブロックを暗号化したものが暗号ブロックになる対応表が作成されるため、「電子符号表モード」と呼ばれることもあります。
平文ブロックがブロック長に満たない場合には「パディング(padding)」データで埋めます。
EBCはシンプルであるため処理は高速ですが、暗号強度は弱いといえます。
同一の平文ブロックから同一の暗号ブロックが生成されるので解読の手がかりを与えてしまうことが挙げられます。
CBC (Cipher Block Chaining)
ブロックの暗号結果(暗号ブロック)を次の平文ブロックとXOR演算し、その結果を暗号化する方式です。
暗号ブロックを連鎖させることで、単体ブロックから解読することを防止することができます。
また、始点ブロックの暗号化には外部から与えた初期ベクトル(Initial Vector:IV)を用います。
IVにより、同一平文を再度暗号化しても、異なる暗号文を生成することができます。
CBCは、ブロック単位で関連することで暗号強度が高めており、一般的に使われる暗号処理です。
CFB (Cipher Feedback)
ブロック単位で暗号鍵を生成することで、暗号強度を高めます。
処理方式は以下の通りです。
- 初期ベクトル(IV)を暗号化します。
- 1番目の平文と暗号済みIVでXOR演算して、1番目の暗号ブロックを生成します。
- 2番目の平文と1番目の暗号ブロックでXOR演算して、2番目の暗号ブロックを生成します。
- 以降同様の処理を行います。
OFB (Output Feedback)
ブロック単位で暗号鍵の暗号化を毎回繰り返す方法です。
処理方式は以下の通りです。
- 初期ベクトル(IV)を暗号化して平文ブロックとXOR演算します。
- すでに暗号化したIVをさらに暗号化して平文ブロックとXOR演算します。
- 以降同様の処理を行います。
暗号強度が高く、ブロック単位の独立性が高い特徴があります。
CTR (Counter mode)
CTRモードは1ずつ増加するカウンタを暗号化して、鍵ストリームを生成するストリーム暗号です。
カウンタを暗号化したデータと平文ブロックをXOR演算して暗号ブロックを生成します。
カウンタの初期値は「ノンス」という暗号化毎に生成する異なる値を利用します。
備考
DES(Data Encryption Standard)
DESとは1977年アメリカFIPSで採用された対象暗号(ブロック暗号)です。
DESは1999年には24時間以内での解読が可能となっています。
triple-DES
DESを3回実行することで暗号強度を高める仕組みで、IBMが考案した暗号です。
DESとの上位互換性を持たせてあり、DESで暗号化されたデータをTriple-DESで復号することが可能です。
AES(Advanced Encription Stardard)
DESに代わって2000年から採用された標準の暗号です。
Rijndael(ラインダール)という暗号アルゴリズムです。