RSA暗号は、インターネットなどで安全に情報をやり取りするために利用されてきた「公開鍵暗号」の代表的な方式です。
公開鍵と秘密鍵という2種類の鍵を使用することが大きな特徴で、暗号化だけでなくデジタル署名にも利用できます。
この記事では、RSA暗号とは何なのか、基本的な仕組みや安全性、共通鍵暗号との違い、実際の用途などをわかりやすく解説します。
RSA暗号とは
RSA暗号とは、公開鍵暗号方式の一つです。
公開鍵暗号では、数学的に関連する「公開鍵」と「秘密鍵」という2種類の鍵を使用します。
公開鍵は名前のとおり他者に公開できる鍵です。一方、秘密鍵は所有者だけが厳重に管理します。
RSAを暗号化に利用する場合、基本的には受信者の公開鍵を使ってデータを暗号化し、対応する秘密鍵を使って復号します。
公開鍵を知っている人なら暗号化できますが、対応する秘密鍵を持っていなければ暗号文を容易に元のデータへ戻せないように設計されています。
RSAという名前の由来
RSAという名称は、この方式を1977年に発表した3人の研究者の姓に由来しています。
Ronald Rivest(ロナルド・リベスト)、Adi Shamir(アディ・シャミア)、Leonard Adleman(レオナルド・エーデルマン)の頭文字を取って「RSA」と呼ばれています。
RSAは公開鍵暗号の歴史を語るうえで重要な暗号方式の一つです。
RSA暗号の仕組み
RSAでは、大きな素数と整数の演算を利用して公開鍵と秘密鍵を生成します。
仕組みを単純化すると、まず大きな2つの異なる素数「p」と「q」を選びます。
そして、次のように掛け合わせます。
n = p × q
このnはRSAの公開鍵と秘密鍵の双方に関係する重要な値です。
さらに、pとqから導かれる値を利用して、公開鍵側の指数eと、それに対応する秘密鍵側の指数dを決定します。
代表的な表現では、公開鍵を「(n, e)」、秘密鍵を「(n, d)」として扱います。
ただし、実際のRSAの鍵生成や秘密鍵の保存形式には追加の値が含まれる場合があります。
RSAで暗号化する流れ
RSAによる暗号化を概念的に説明すると、次のようになります。
送信者は、まず受信者の公開鍵を取得します。
その公開鍵を利用して送信したい情報を暗号化し、生成された暗号文を受信者へ送ります。
受信者は、自分だけが管理している秘密鍵を使って暗号文を復号します。
つまり、基本的な関係は次のようになります。
平文 → 公開鍵で暗号化 → 暗号文 → 秘密鍵で復号 → 平文
公開鍵が第三者に知られていても、それだけで対応する秘密鍵を容易に導き出せないことが公開鍵暗号の重要なポイントです。
RSA暗号はなぜ安全なのか
RSAの安全性は、大きな合成数の素因数分解が一般に計算上困難であることと密接に関係しています。
RSAでは、非常に大きな2つの素数を掛け合わせてnを生成します。
掛け算自体は簡単ですが、十分に大きなnだけを与えられた状態から、元になった2つの素数を求めることは現在知られている古典的な計算手法では非常に大きな計算量を必要とします。
ただし、「RSAなら必ず安全」というわけではありません。
安全性は鍵の長さだけでなく、鍵生成に使用する乱数、秘密鍵の管理、実装方法、パディング方式などにも左右されます。
そのため、実際のシステムでは標準化された方式や十分に検証された暗号ライブラリを利用することが重要です。
RSAでは適切なパディングが重要
RSAを実際に使用する場合、単純な数学的演算だけで平文を直接暗号化する、いわゆる「教科書的RSA」をそのまま使用することは安全ではありません。
そこで重要になるのが「パディング」です。
パディングとは、暗号化や署名を安全に行うため、データに一定の処理を施してからRSAの演算を行う仕組みです。
RSAによる暗号化ではRSA-OAEP、デジタル署名ではRSA-PSSなどの方式があります。
安全なシステムを構築する場合は、独自の方法でRSAを実装するのではなく、標準的で十分に検証された暗号ライブラリを利用することが基本です。
RSAと共通鍵暗号の違い
暗号技術には、RSAのような「公開鍵暗号」のほかに「共通鍵暗号」があります。
共通鍵暗号では、基本的に暗号化と復号に同じ秘密鍵を使用します。
代表的な共通鍵暗号としてAESがあります。
共通鍵暗号は大量のデータを高速に処理できる一方、安全に鍵を相手へ共有する方法が必要になります。
RSAなどの公開鍵暗号では公開鍵を公開できるため、共通鍵暗号とは異なる方法で鍵に関する問題を扱えます。
RSAで大量のデータを直接暗号化しない理由
RSAは、画像や動画、大容量ファイルなどのデータ全体を直接暗号化する用途には適していません。
RSAは共通鍵暗号と比較して計算コストが高いうえ、RSAで一度に暗号化できるデータのサイズにも制限があります。
そのため、実際の暗号システムでは公開鍵暗号と共通鍵暗号を組み合わせる「ハイブリッド暗号」の考え方が広く利用されています。
例えば、データ本体はAESなどの共通鍵暗号で暗号化し、その暗号化に使用する鍵を受信者のRSA公開鍵で保護する方法があります。
これによって、公開鍵暗号の利点と共通鍵暗号の高速性を組み合わせられます。
RSAはデジタル署名にも利用できる
RSAは暗号化だけでなく、デジタル署名にも利用できます。
デジタル署名は、データの作成者やデータが改ざんされていないことを検証するために利用される技術です。
実際のRSA署名では、対象データからハッシュ値を求めるなどの処理を行い、秘密鍵を使って署名を生成します。
受け取った側は公開鍵を利用して署名を検証できます。
暗号化では「公開鍵で暗号化し、秘密鍵で復号する」という使い方がありますが、署名は単純にその処理を逆転させただけのものではありません。安全なRSA署名では、RSA-PSSなど署名用に設計された方式を利用します。
RSAの鍵長
RSAの安全性を考えるうえでは鍵長も重要です。
一般に、鍵が長くなるほど解読に必要な計算量を増やせますが、その分だけ暗号演算の処理負荷も大きくなります。
RSAを新しいシステムで利用する場合、用途や必要なセキュリティ強度、利用期間などに応じて、現在の暗号技術に関する標準やガイドラインを確認して適切な鍵長を選択する必要があります。
暗号技術の推奨事項は技術進歩によって変化するため、「特定の鍵長なら永久に安全」と考えるべきではありません。
RSAとHTTPSの関係
RSAは、Webのセキュリティ技術でも歴史的に重要な役割を果たしてきました。
HTTPSで使用されるTLSでは、過去にRSAを利用した鍵交換方式が広く使われていました。
一方、現在のTLSでは事情が変化しています。
TLS 1.3では、従来のRSA鍵交換は採用されておらず、RSA証明書が使用される場合でも、RSAは主に認証のためのデジタル署名に関係します。実際の鍵共有には一時的なDiffie-Hellman方式などが使用されます。
そのため、「HTTPSでは通信データそのものをRSAで暗号化している」と理解するのは正確ではありません。
RSAと量子コンピューター
RSAを考えるうえで重要なテーマの一つが量子コンピューターです。
十分な規模と性能を持つ誤り訂正量子コンピューターが実現した場合、Shor(ショア)のアルゴリズムによって、大きな整数の素因数分解を古典的なコンピューターより効率的に行えると考えられています。
そのような量子コンピューターはRSAの安全性に重大な影響を与えます。
この問題に対応するため、量子コンピューターによる攻撃にも耐えられることを目指した「耐量子計算機暗号(PQC:Post-Quantum Cryptography)」への移行が進められています。
RSA暗号を利用するときの注意点
RSAは数学的に高度な暗号方式であり、正しいアルゴリズムを選択するだけで安全性が保証されるわけではありません。
安全性を確保するには、適切な鍵長、安全な乱数生成、適切なパディング、秘密鍵の厳重な管理、安全性が検証された暗号ライブラリなどが必要です。
特に暗号アルゴリズムを独自実装すると、サイドチャネル攻撃への対策不足や乱数生成の不備など、思わぬ脆弱性が発生する可能性があります。
RSAをシステムへ導入するときは、最新の標準やガイドラインに従い、実績のある暗号ライブラリを使用することが重要です。
まとめ
RSA暗号は、公開鍵と秘密鍵という2種類の鍵を利用する代表的な公開鍵暗号方式です。
暗号化では公開鍵を使ってデータを暗号化し、対応する秘密鍵で復号できます。また、RSAはデジタル署名にも利用できます。
RSAの安全性は大きな整数の素因数分解の計算困難性と密接に関係していますが、実際の安全性を確保するには、適切な鍵長やパディング、鍵管理、安全な実装が不可欠です。
また、RSAは大量のデータを直接暗号化する用途には適していないため、必要に応じてAESなどの共通鍵暗号と組み合わせて利用されます。
長年にわたり情報セキュリティを支えてきた重要な技術ですが、量子コンピューターを見据え、耐量子計算機暗号への移行も重要なテーマとなっています。


コメント