SSLってどんな技術でできてるの?~鍵を使った暗号化その2 共通鍵暗号編~

SSLってどんな技術でできてるの?~鍵を使った暗号化その2 共通鍵暗号編~

前回のコラムでは、SSL/TLS で使用している鍵を利用した暗号化の種類を紹介しました。今回は共通鍵暗号の1つ、DES についてみていきます。現在は使用されることはありませんが、現在主流になっている共通鍵暗号技術の源流とも言うべき技術です。DES の仕組みをを理解することで現在の暗号化技術の基礎を学ぶことができます。

DESとは

今回は DES (Data Encryption Standard) という 共通鍵暗号方式 についてご紹介していきます。

DESの概要

DES は1977年に アメリカ合衆国連邦情報処理標準規格に採用された共通鍵暗号方式です。初期に利用されていた非常に有名な技術で、同じ鍵を二者間が共有 し、その鍵を利用して 暗号化と復号化 を行います。

つまり鍵を知っている第三者が居る場合、その第三者も暗号化されたデータを復号化できてしまうということです。

DESはシンプルな仕組みでできており、鍵の長さ(これが暗号の安全性に直結します)が短く、現在のコンピュータの計算能力を駆使すれば、鍵を計算で解読することができてしまいます。そのため、現在は 安全性が保障できないので、使用することはありません。

DESを複雑化した、現在の共通鍵暗号方式

ただ、現在利用されている共通鍵暗号方式は、DESの考え方や技術を元に、より解読されにくいよう複雑化したものになります。そのため、DESによる暗号化のための方法を学ぶことにより、現在の共通鍵暗号の基礎を理解 することができます。

DES は、暗号化したいデータを 鍵 及び ラウンド関数 という計算法則に則って、ぐちゃぐちゃにスクランブル し、分かりにくくすることを目標としています。逆に復号化の際は、ぐちゃぐちゃにスクランブルされたデータに対し、ラウンド関数を暗号化時とは逆順に処理することで、元に戻していくことを目標としています。

このような暗号化の処理は 卵とスクランブルエッグ の例にたとえられます。卵を溶き、ぐちゃぐちゃに混ぜながら焼くと、スクランブルエッグが出来上がります。出来上がったスクランブルエッグを見ても、もとの卵の詳細な姿は想像できません。これが 平文 と 暗号文 に当たります。

現実ではスクランブルエッグは元の卵に戻すことができませんが、暗号化されたデータはただのデータなので再度加工が可能です。スクランブルエッグを再度卵に戻す際には、スクランブルエッグを作る際に行った 作業を巻き戻す ことによって、もとの卵に戻します。このような処理をデータに対して行っています。

DESによる暗号化時の処理

まず、データとは単なる 0 と 1 のビットの列 です。文字も映像も画像も音声もすべて 0 と 1 でコンピュータ内では扱われます。つまり 元データ である ビット列(平文) をスクランブルし、作ったビット列が 暗号文 です。また、スクランブルしたビット列を、元のビット列に戻したのが複合化された平文です。

暗号化・復号化とブール論理

さて、コンピュータではどのようにして 0 と 1 のビット列をスクランブルしたり元に戻したりするのでしょうか。これはビットに対する計算である、ブール論理 を利用して実現します。ブール論理では、単項演算子である NOT (補集合) や、二項演算子である OR (和集合) や AND (共通部分) などを利用してビットに対する計算を行います。そして今回のDESでは、二項演算子 の1つである XOR (Exclusive OR:排他的論理和) を利用します。

XOR は簡単に言うと、同じもの同士で足し算をすると 0、違うもの同士で足し算をすると 1 になる仕組みです。

例を使ってご紹介

単純な例を挙げて説明します。

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

となるため、

10101010 XOR 01010101 = 11111111

となります。これは、

平文 XOR 鍵 = 暗号文

と同義です。暗号文に対し、鍵を使ってXORを取ると、複合化され、平文に戻ります。

11111111 XOR 01010101 = 10101010

いかがでしょうか。同じ鍵を使って同様に XOR を取ると 平文 が現れます。鍵が分かってしまうと、簡単に暗号文を平文に複合化できてしまう という一例です。そのため、鍵は盗まれてしまわないように厳重に保管しておく必要があります。

DES では、XOR を利用して平文の暗号化と複合化を行います。行っていることは非常に単純ですが、それを 繰り返し たり、関数 を使用することによって暗号の解読を防いでいます。

DESの仕組みの解説

ここからは上記の情報を元に、DESが実際にどのような処理を行って暗号化と複合化を行っているか を解説していきます。ビット列に対してXOR を使用していたり、それを何度も繰り返すことによって 平文をスクランブル していく様を確認してみてください。

DESによる暗号化(1) データのスクランブル

DESによる暗号化では、64bit (8Bytes) 単位 に データを分割 し、XOR 計算や データの置き換え を行ってデータのスクランブルを行います。
復号化 の際には 逆の処理 を行うことによってデータを元に戻します。

まず暗号化するデータを 64bit ごとの細かなデータに分割 します。
64bit以下の分割できないような小さいデータや、大きなデータを分割する際に残った小さなデータについては、足りない部分を0で埋めて、64bitデータに加工してから、暗号化を行っていきます。

DESによる暗号化(2) 秘密鍵

また、分割した64bitのデータを暗号化するための サブ鍵 として、DESでは64bitのビット列を利用します。これが 秘密鍵 で、サブ鍵とは秘密鍵をベースに作られた48bitのビット列です。

DESでの暗号化処理の流れを以下の図に表します。

入力された64bitのデータを 初期転値 というビット位置の入れ替え操作を行い、スクランブルします。その後初期転値された 64bit の 32bitごとの2つのブロック に分けます。

分けた左側 (上位32bit) に対して、ラウンド関数 ではじき出されたビット列と XOR の計算 をします。

ラウンド関数による計算では、XOR 計算をしない方の32bit列が内部で使用されており、また、秘密鍵となる64bitのビット列が利用されています。

これが 1回分の暗号化のための計算 となります。

DESによる暗号化(3) さらなるデータのスクランブル

ただこれではスクランブルが不十分なので、さらに暗号化のための計算を行っていきます。ただ、この後は何か新しい計算をするわけではなく、左右の32bitを入れ替えて、同じ暗号化関数ではじき出されたビット列との XOR の計算を行います。DESではこの処理を 16回 行って、データのスクランブルを行います。

こうしてできたのが出力された 64bitの暗号文 です。
復号化の際には上記の逆の操作を行うことにより復号することが出来ます。

公開されていることによって保障されるアルゴリズム

冒頭でも記載しましたが、DES ではこのように 暗号化のための仕組みが公開 されています。

DESに限らず、現在広く利用されているような暗号化のための仕組みは、暗号化のアルゴリズムが公開されているものがほとんどです。暗号化アルゴリズムが公開されているというのは、一見すると不安な気がしますが、実際は暗号化のアルゴリズムが公開され、それが様々な暗号研究者によって 検証 され、安全であると保障 されているということなのです。

このような十分検証された暗号化方法は、暗号化アルゴリズムが堅牢かつ解読が難解で、鍵がわからなければ復号化は事実上不可能なので、いかにして鍵を特秘するかが重要です。

まとめ

今回は共通鍵暗号方式の一つ、DES についてご紹介しました。現在利用されている共通鍵暗号方式の、元となる技術について、学んでいただけましたでしょうか。

次回は、RSAなどを解説していきますのでお楽しみに。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。