共通鍵暗号化方式は、暗号鍵と復号鍵に同じ鍵を使用する暗号化方式です。同じ鍵を対称的に使用することから「対称鍵暗号」と呼ばれたり、鍵は秘密にしないといけないことから「秘密鍵暗号」とも呼ばれます。

暗号化・復号化に使用する鍵が共通であることが共通鍵暗号の最も大きなポイントです。

共通鍵暗号では、暗号化・復号化に使用する鍵を秘密にすることによって平文を秘匿するという使い方をするため、鍵を第三者に知られてはいけません。もし第三者に知られたらその鍵を使った暗号化はもう安全ではなくなります。

共通鍵暗号のメリット

共通鍵暗号化方式のメリットは、処理速度にあります。仕組みが単純なため、暗号化処理、復号化処理がともに高速です。

共通鍵暗号のデメリット

暗号化および復号化に同じ鍵を利用する暗号のため、その鍵を入手されてしまったら、その時点で使えなくなります。そのため、鍵管理には十分に気を配る必要があり、鍵配送問題というやっかいな問題について考えなければなりません。

鍵配送問題とは、暗号化・復号化に利用する鍵ファイルをどうやって相手に秘密裏に受け渡しをするかという問題です。暗号化と復号化を別の場所や別の人が実施する場合、例えば単純にメールで渡せば良いではと思うかもしれませんが、そのメール自体が盗聴されている可能性もあります。

加えて、鍵は通信相手ごとに用意しないといけません。例えば、3人でやり取りするのであれば、3個、4人であれば6個と、必要な鍵の数は倍々で増えていきます。一般的に、n人でデータをやりとりしようとすると、それぞれ自分以外の相手の鍵が必要です。n人が自分以外のn-1人の鍵が必要ですから、n(n-1)個です。相手とは同じ鍵でやり取りするため、n(n-1)/2個となります。つまり、100人では4,950個、1000人では、499,500個の鍵が必要になります。共通鍵暗号方式では、共通鍵が漏えいした時点で機密性が失われるため、その数の鍵を誰にも知られないように管理しなければいけません。

この問題を深く考えていくと、共通鍵暗号を使用するには下記のような矛盾が浮かび上がってきます。

共通鍵暗号使用の矛盾

鍵は安全な方法を使って秘密裏に受け渡しする必要がある(鍵が漏えいしてしまうと、第三者が暗号文を復号化できてしまいます。)

  • 共通鍵暗号を使用するということは、鍵を秘密裏に受け渡しできる前提があるということ。
  • 鍵を秘密裏に受け渡し可能であれば、(暗号化する前の)平文も秘密裏に受け渡し可能な場合が多い。
  • 平文が秘密裏に受け渡し可能であれば、そのまま平文を受け渡しすればよい(共通鍵暗号を使用する必要がない)

秘密裏に受け渡し可能にもかかわらず平文を秘密裏に受け渡しすることが難しいような場合等には共通鍵暗号は有効です。しかし、それはとても特殊なケースであり、そのようなケースでしか使えないようであれば、共通鍵暗号自体使う必要はないという結論になってしまいます。
そこで、この共通鍵暗号に存在するデメリットを解決する方法として、公開鍵暗号が発明されました。公開鍵暗号については次の記事で説明していきます。

共通鍵暗号のアルゴリズム

共通鍵暗号のアルゴリズムには大きく分けてブロック暗号とストリーム暗号があります。

ブロック暗号

ブロック暗号は、平文をブロックごとに分け、ブロック内のビットを撹拌(かくはん)することにより暗号化する方式です。例えば128bitずつ分割し、それぞれのブロック長よりも長い平文を暗号化する時の方法として、モードという仕組みがあります。代表的な暗号化モードとしてはECB、CBC、CFB、CTR、OFB、GCM等があります。

例えばECBモードは、各ブロックを独立に暗号化する単純な方式です。仮に1ブロック目と2ブロック目の平文が同じである場合、1ブロック目と2ブロック目の平文が同じになるため、比較的脆弱です。何故なら、暗号文のあるブロックが解読されてしまった場合、暗号文で同じ値を持つブロックは全て同じ平文のブロックであるため、芋づる式に解読されてしまう可能性があります。

これに対し、CBCモードは初期化ベクトル(IV:Initialization Vector)という値を持っており、各ブロックの平文が同じであったとしても、初期化ベクトルの値により暗号文の各ブロックが異なるようになっています。各ブロックの暗号文を連鎖させていくことにより、同じ平文ブロックから同じ暗号文ブロックが原則として生成されないようになっています。

ストリーム暗号

ストリーム暗号は、鍵から生成した擬似乱数ビット列と平文をビット単位で排他的論理和(XOR)を取ることで暗号文とする暗号化方式です。ビット単位で計算できるため一般にブロック暗号よりも高速ですが、ブロック暗号の方が安全と言われています。

以下に代表的な共通鍵暗号アルゴリズムを記載します。

名称暗号強度方式鍵長(bit)補足
DES64bitブロック暗号56脆弱であり、既に使用は禁止されている
RC4ストリーム暗号40~2048脆弱であり、既に使用は禁止されている
3DES64bitブロック暗号168(=56*3)鍵長112bit暗号化と同等の強度と見なされる。非推奨
AES128bitブロック暗号128、192、2562019年現在の主流
Camellia128bitブロック暗号128、192、256NTTと三菱電機による共同開発

暗号の危殆化

暗号の危殆化(きたいか)とは、安全とされていた暗号が攻撃の研究やコンピュータの性能向上により安全でなくなることです。
危殆化した暗号方式として、DESやRC4が挙げられ、既に使用は禁止されています。3DESも推奨リストから外れており、互換性維持以外の目的では使うべきではない暗号方式となっています。(2021年現在)

CRYPTREC暗号リスト(電子政府推奨暗号リスト)
https://www.cryptrec.go.jp/list.html