皆さんこんにちは。
最近は徐々に朝晩が寒くなってきましたね。そろそろヒーターを出そうか悩んでいる筆者です。
年末に向けて忙しくなってくる時期と思いますが、体調に気をつけて年末まで突っ走りましょう。

さて、今回のテーマは暗号についての話です。
暗号の歴史から最新の耐量子コンピュータ暗号の最新情報までお届けしたいと思います。

暗号化とは

暗号とは自分と特定の第三者だけが秘密の情報を知ることができるように、特定のルールに従って情報を変換したり元の状態に戻す技術のことを指します。
現代のインターネットでは暗号の利用が一般的になっていますが、この暗号技術のおかげで安心してインターネットを通じてクレジットカード決済ができています。

暗号の歴史

現在ではインターネット上で情報を送受信する際に暗号化を施すことが主流となっていますが、インターネット以前の時代では、どのような暗号が使われていたのでしょうか?

実は、形は違えど古代から利用されてきました。

最古の暗号は紀元前3200年頃に描かれたヒエログリフというエジプトの象形文字であると言われています。ヒエログリフは長い間解読ができませんでしたが、19世紀頃にフランス人の学者により解読に成功しました。

近代のものでは第二次世界大戦でナチス・ドイツが用いたローター式暗号機である「エニグマ」は皆さんもよくご存知だと思います。
エニグマは、基本的には換字表(文字毎の変換ルール表)を1文字毎に切り替える仕組みで、1文字毎にローターを回転させることで換字表を切り替え、ローターの数を増やすことで換字表の数を増やす工夫をしていました。暗号者と解読者のローターの初期位置(これが共通鍵)を合わせることで解読できるようにしていました。

暗号の種類

それでは、具体的にどのような暗号の種類があるのか見ていきましょう。
代表的なものとしては、DES暗号、AES暗号、RSA暗号、ECC暗号があります。
順番に概要を紹介していきましょう。

DES暗号

DESは「Data Encryption Standard」を省略したもので、共通鍵暗号方式を用いた暗号化アルゴリズムの1つです。後に登場する二重DESやトリプルDESと区別するため、シングルDESとも呼ばれています。
アメリカ連邦政府標準が公募によって暗号化方式を募集し、1977年にDESが採用されました。
鍵長は56bit(パリティチェック用データを加えると64bit)の暗号鍵を利用します。
しかし、1994年頃からDES暗号を破る技術が徐々に現れ始めました。

DES暗号の改良型として出てきたのが二重DESです。これはDESを2回繰り返すことにより暗号強度を強めようとしたものです。しかし、解読方法がすぐに考案されてしまったため、すぐに姿を消してしまいました。

二重DESを改良した暗号としてトリプルDES(3DES)があります。これは、暗号→復号→暗号を途中で暗号鍵を変更しつつ3度繰り返したものです。そのため、処理を行うコンピュータの負荷が高くなってしまうというデメリットがありました。
しかしながら、トリプルDESも安全性の低下により、米国立標準技術研究所が2023年以降の使用禁止を提案しています。

AES暗号

現在アメリカの標準規格となっているのはAES(Advanced Exception Standard)です。
暗号の実装はDESとは全く異なりますが、DESと同じく共通鍵暗号方式を用います。
鍵長はDESと比較して長く、128bit / 192bit / 256bit から選択可能です。
2001年にNIST(米国標準技術研究所)により採用され、現在も広く利用されています。
主に、無線LANの通信を保護するための規格「WPA2」やインターネット上のデータ通信に利用されています。

RSA暗号

1977年にアメリカの3名の研究者により発明された暗号方式です。3名の名前のアルファベットのそれぞれの頭文字から「RSA」と名付けられました。 現在インターネットで広く使われている暗号方式です。
DESやAESとは異なり、公開鍵暗号方式を用います。
公開鍵暗号方式とは暗号鍵を2つ利用する方式で、鍵A(秘密鍵)で暗号化した暗号データは、鍵Aと対となる鍵B(公開鍵)でしか復号できない方式を指します。
そのため、データの作成者を検証するデジタル署名にも応用することができます。

実は、公開鍵を素因数分解することにより秘密鍵を導くことは理論上可能なのですが、
現代のコンピュータの技術では膨大な時間がかかることから、(実用的な観点から)安全とされています。

ECC(楕円曲線)暗号

ECC(Elliptic Curve Cryptography)暗号とは楕円曲線暗号の略で、RSA暗号に代わって徐々に標準になりつつある公開鍵暗号方式を利用した暗号方式です。1985年頃に2人の数学者が発明しました。
RSAと比較して、より小さい鍵長でかつ低い演算負荷で同等以上の強度の暗号が生成出来ることから、演算能力の低いIoT機器での利用が期待されています。
例えば、RSAで 2048 bit の鍵長で作成した暗号は、ECCでは 224bit の暗号と同じ強度の暗号を得ることができます。

暗号の安全性=離散対数問題の難解さ

これまで暗号の種類について解説してきましたが、これらは本当に安全なのでしょうか?

公開鍵暗号方式に限っての話になりますが、暗号が安全と言える根拠には現代のコンピュータでは「離散対数問題の解が現実的な時間で得られない」という前提があります。ここで言う解というのは秘密鍵のことで、公開鍵から秘密鍵を得ることを指します。

もちろん鍵長が長ければ長いほど安全性は増しますが、それだけ暗号処理に必要な計算量は増えますのでコンピュータの負荷は上がります。そのため、場面に応じた暗号方式・鍵長を選択する必要があります。

離散対数問題自体の解説は少し長くなってしまいますので、本記事での解説は避けますが、決して秘密鍵が導出できないというわけではなく、導出までの時間が途方も無く必要であるという理由から「現実的な観点で安全といえる」ということを覚えておいてください。

では「量子コンピュータが実用化されたらどうなるの?」という疑問が出てくると思いますが、それについては最後の章で触れたいと思います。

HTTPSの仕組み

ここで、暗号が使われている具体的な実用例を見てみましょう。
今では広く使われているブラウザ〜WEBサーバ間の通信方式であるHTTPSでは、公開鍵暗号方式と共通鍵暗号方式を場面ごとに使い分ける「ハイブリッド方式」を用いています。

Linux や mac をお使いの方は curl コマンドを使ってWEBサーバとの通信を見てみましょう。
以下のコマンドを実行すると、データ通信を行う前の準備段階であるネゴシエーションと呼ばれる、暗号方式や鍵情報などをやりとりするデータ交換の様子を見ることができます。

$ curl -v [WEBサーバのURL]

試しに弊社のサイトへアクセスしてみると、以下のような結果が得られました。

「* TLSv1.2〜」と出力されている箇所が実際にネゴシエーションを行っている部分です。
証明書や公開鍵をサーバから受け取ったり、共通鍵をサーバへ送ったりという事を行っています。
一部を抜粋して説明しますと以下のようになります。
(簡略化のためにわかり易く記載している為、実際とは若干異なる部分があります)

> TLSv1.2 (OUT), TLS handshake, Client hello (1):
> TLSv1.2 (IN), TLS handshake, Server hello (2):
クライアントとサーバ間でお互いが利用可能な暗号種類の一覧を交換し、利用する暗号アルゴリズム等のルールを取り決めます。

> TLSv1.2 (IN), TLS handshake, Server key exchange (12):
サーバ側で秘密鍵・公開鍵を生成して、クライアント(ブラウザ等)へ共通鍵を暗号化するための公開鍵を送信します。

> TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
クライアントは共通鍵を生成し、共通鍵を上記で受け取ったサーバの公開鍵で暗号化した状態でサーバへ送信します。

> TLSv1.2 (IN), TLS handshake, Finished (20):
サーバが受信した共通鍵を秘密鍵で復号化し、共通鍵を受領した旨のメッセージです。これ以降は共通鍵で暗号化して通信を行います。

> SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
共通鍵の交換方法が「ECDHE」、データ通信の暗号方法が「AES(鍵長 128bit)」でネゴシエーションが完了した旨のメッセージです。

HTTPSではこのようにして暗号アルゴリズムの決定と暗号鍵の交換を行っています。
このような暗号に関わる通信処理が行われていることを初めて知った方もいらっしゃるかもしれませんが、私達が意識しないところで多くの暗号技術が使われています。

量子コンピュータによる驚異

ここ数年で、小規模ながらGoogleやIBMから量子コンピュータの実装が出始めてきました。そこで最も気になるのが、量子コンピュータによる暗号解読の可能性についてではないでしょうか。

実は、米国標準技術研究所(NIST)では数年前からPQC(Post-Quantum Cryptography)/ ポスト量子暗号の標準化プロジェクトと呼ばれる、耐量子公開鍵暗号アルゴリズム(量子コンピュータでも解読が難しい暗号アルゴリズム)の募集・採用プロジェクトが進められています。

2016年8月2日〜2016年9月16日にプロジェクトに関する最初のパブリックコメントの募集があり、2017年11月30日に最初の候補アルゴリズムの募集が締め切られました。
本コラム執筆時点(2022/11/1)ではラウンド3の審査が完了しており、公開鍵暗号方式は「CRYSTALS-KYBER」、デジタル署名方式は「CRYSTALS-DILITHIUM」「FALCON」「SPHINCS+」という方式が標準として採用されることが決定しています。今後のラウンド4以降の審査では、公開鍵暗号方式の4候補の追加審査が行われる予定です。

詳細についてはNIST Post-Quantum Cryptography のサイトを確認してください。
https://csrc.nist.gov/projects/post-quantum-cryptography

最後に

今回のコラムはいかがでしたでしょうか。
できるだけ分かり易く書いたつもりですが、もし分からない部分がありましたら、今後のコラムで取り上げたいと思いますので、ご質問をいただければと思います。

また、弊社のコラムでは、皆さんのIT知識を広げるコラムを幅広く掲載していますので、ぜひご覧ください。