日本語
  • public-key
  • private-key
  • asymmetric-cryptography
  • symmetric-cryptography

公開鍵、秘密鍵と非対称暗号化

この記事では、公開鍵、秘密鍵の概念と非対称暗号化の原理を紹介しました。また、それらと対称暗号化を比較し、その使用シナリオの違いについても説明しました。

Darcy Ye
Darcy Ye
Developer

あなたは多くの文脈で秘密鍵と公開鍵について聞いたことがあるかもしれませんが、それが本当に何であるか知っていますか?

非対称暗号と対称暗号

秘密鍵と公開鍵は、非対称暗号(公開鍵暗号とも呼ばれる、PKC)の概念です。

非対称暗号は、2つの異なる鍵(秘密鍵+公開鍵)を使用してデータを暗号化または署名する方法を指します。これにより、復号または署名の検証が必要になります。公開鍵は誰にでも見える状態にあり、一方で秘密鍵は鍵の所有者だけが利用できます。鍵の名前から簡単にわかるでしょう。

同様に、対称暗号が同じ鍵を使ってデータを暗号化および復号化する方法であると推測できるでしょう。

したがって、対称暗号と非対称暗号の両方の暗号化/復号プロセスを示すために、簡単な注釈を使用します。

暗号化と復号化

対称および非対称暗号アルゴリズムの暗号化/復号関数は異なり、しばしば異なるアルゴリズムを使用することに注意が必要です。一般的な対称暗号アルゴリズムには、DES、AES、RC2、RC4 などが含まれ、一方で、一般的な非対称暗号アルゴリズムには RSA や EC があります。

Logto はデータ伝送の暗号化と復号に EC アルゴリズムを使用しており、RSA よりも効率的で安全です。詳細についてはこの記事をご覧ください。Logto は次のリリースで、一部のレガシーシステムとの互換性を向上させるために RSA をサポートします。

なぜ非対称暗号化を使用するのか?

非対称暗号は、対称暗号における鍵の配布の問題を解決します。

対称暗号は同じ鍵を使用するため、安全でないネットワーク接続を介して鍵を配布すると、悪意のある第三者に鍵が露出する可能性があります。悪意のある第三者は盗まれた鍵を使って、その鍵で暗号化された情報にアクセスし、大きなセキュリティリスクを伴います。

非対称暗号の一般的な2つの利用例

暗号化されたデータの送信

送信者は受信者の公開鍵を使用して情報を暗号化し、受信者は秘密鍵を使用して情報を復号化します。

公開鍵は理論的には多数の人々が利用可能であるため、理想的なシナリオでは受信者は多くの送信者から暗号化された情報を受け取ることができます。さらに、複数の送信者は他の送信者が受信者に送信した情報の種類を知ることができません。受信者(秘密鍵の所有者)のみが情報を復号化し回復することができます。

公開鍵と秘密鍵はしばしば同時に生成されます。上述したことは、一方の当事者が秘密鍵と公開鍵を生成し、それから公開鍵を利用者に配布することを指します。もし、両当事者の間で安全な通信を確保する必要がある場合、両当事者が自分自身の秘密鍵と公開鍵を生成し、それから相手方の公開鍵を交換する必要があります。この方法では、両当事者はお互いの公開鍵を所有し、自身の秘密鍵と相手方の公開鍵を使用して暗号化と復号化を行うことができます。

署名を利用してデータの確実性を保証する

非対称暗号において、秘密鍵を持つ当事者は送信するデータに署名できます。その後、公開鍵を持つ受信者はデータを受け取った際にデータと署名の一貫性を確認し、送信中にデータが改ざんされていないことを保証します。

前のセクションで定義した注釈を用いると、署名と署名の検証は次のように表されます:

署名と検証

デジタル署名の検証は、署名を生成した当事者が対応する秘密鍵を知っていることを証明します。

前述の2つの利用例がとても馴染み深いことに気づくかもしれません。私たちの日常生活では、ほぼすべてのサーバークライアントアーキテクチャを持つサービスはデータセキュリティを保障するために非対称暗号を使用しています。

迅速に成長しているユーザーアイデンティティフレームワークである Logto も、ユーザーデータのセキュリティを確保するために広範囲にわたって PKC を使用しています。ユーザーがログインプロセスを完了した後、Logto はユーザーに必要なリソースにアクセスするための特定の許可を与えるためにアクセストークンを発行します。Logto の公開済み公開鍵は、アクセストークンが本当に Logto から発行され、悪意のある攻撃者によって改ざんされていないことを検証するために使用されます。

非対称暗号の欠点

一般に、対称暗号の鍵長は 128 または 256 ビットであり、一方で非対称暗号の鍵長は 4,096 ビットに達することがあります。これは秘密鍵と公開鍵が数学的に関連しており、固有の鍵ペアだからです。理論的には公開鍵を知っていれば秘密鍵の値を計算することができるが、関与するアルゴリズムの複雑さのために、それにはしばしば多大な時間がかかります。秘密鍵を「解読」することを「不可能」にするためには、より長い鍵長を使用することが簡単なアプローチです。

まとめ

非対称暗号は、前のセクションでの議論における計算において、対称暗号に比べてより多くの計算リソースと時間を消費します。通信が頻繁に行われるアプリケーションでは、非対称暗号を広範囲に使用することはパフォーマンスやユーザーエクスペリエンスに影響を与える可能性があります。

ビジネスシナリオでは、対称暗号と非対称暗号がしばしば組み合わされ、パフォーマンスとデータセキュリティのバランスを取ります。独自のサービスを構築する際には、各段階におけるデータのセキュリティ要件を考慮し、それに応じて適切な暗号化アルゴリズムを選択することができます。