RSA暗号とは?仕組みと安全性、量子時代に知っておきたいこと|サイバーセキュリティ.com

RSA暗号とは?仕組みと安全性、量子時代に知っておきたいこと



RSA暗号とは、「公開鍵」と「秘密鍵」という2つの鍵を使い分ける、公開鍵暗号の代表的な方式です。Webサイトの証明書やデジタル署名など、インターネットの安全を支える場面で長く使われてきました。

一方で、将来の量子コンピュータによって解読されるおそれが指摘され、新しい暗号への移行も始まっています。この記事では、RSA暗号の仕組みを計算例で解説し、今の安全性と、量子時代に知っておきたいことをまとめます。

RSA暗号とは

公開鍵と秘密鍵を使う公開鍵暗号の代表

RSA暗号は、暗号化と復号に異なる2つの鍵を使う「公開鍵暗号」の代表的な方式です。2つの鍵のうち、「公開鍵」は誰に知られてもかまわない鍵で、「秘密鍵」は持ち主だけが厳重に保管する鍵です。

公開鍵で暗号化したデータは、対応する秘密鍵でしか元に戻せません。そのため、公開鍵を相手に渡しておけば、誰でもその人あての暗号文を作れる一方、読めるのは秘密鍵を持つ本人だけになります。RSA暗号は、データの暗号化だけでなく、デジタル署名にも使えるのが特徴です。

名前の由来と誕生の背景

RSA暗号は、1977年に米国マサチューセッツ工科大学(MIT)のロナルド・リベスト、アディ・シャミア、レオナルド・エーデルマンの3人によって発表されました。RSAという名前は、3人の名字の頭文字を並べたものです。

それまでの暗号は、暗号化と復号に同じ鍵を使う「共通鍵暗号」が中心でした。共通鍵暗号では、通信を始める前に、相手と同じ鍵を安全に共有しておく必要があります。しかし、盗み見られるおそれのある通信路では、鍵そのものを安全に送る方法がありません。
この「鍵配送問題」を解決する考え方として公開鍵暗号が提案され、それを実際に使える形にした代表がRSA暗号です。

共通鍵暗号・楕円曲線暗号との違い

RSA暗号と、代表的なほかの暗号方式との主な違いは次のとおりです。

比較項目 RSA暗号 共通鍵暗号(AESなど) 楕円曲線暗号(ECC)
方式 公開鍵暗号 共通鍵暗号 公開鍵暗号
使う鍵 公開鍵と秘密鍵 暗号化と復号で同じ鍵 公開鍵と秘密鍵
処理の速さ 遅い 速い RSAより速い
必要な鍵の長さ 長い(2048ビット以上) 短い(128ビットなど) RSAより短くて済む
主な用途 デジタル署名、鍵の受け渡し 大量のデータの暗号化 デジタル署名、鍵交換

なお、暗号方式によって安全性の考え方が異なるため、「RSAの2048ビットはAESの128ビットより鍵が長いから安全」とは単純に比べられません。

RSA暗号の仕組み

素因数分解の難しさを安全性の根拠にする

RSA暗号の安全性は、「大きな数の素因数分解はとても難しい」という性質に支えられています。たとえば、2つの素数を掛け合わせて「7×13=91」を求めるのは簡単ですが、「91はどの素数の積か」を逆に求めるのは、数が大きくなるほど急激に難しくなります。

実際のRSA暗号では、数百桁にもなる2つの大きな素数を掛け合わせた数を使います。この数は公開鍵の一部として公開されますが、元の2つの素数がわからなければ、秘密鍵を求めることは現実的な時間ではできません。
「掛けるのは簡単だが、分解するのは極めて難しい」という一方通行の性質が、RSA暗号の安全性の土台です。

公開鍵と秘密鍵の作り方

RSA暗号の鍵は、おおまかに次の手順で作ります。まず、2つの大きな素数pとqを選び、その積n(n=p×q)を求めます。次に、(p−1)×(q−1)と共通の約数を持たない数eを選びます。最後に、e×dを(p−1)×(q−1)で割った余りが1になる数dを求めます。

このうち、nとeの組が「公開鍵」、dが「秘密鍵」になります。pとq、そしてdは、外部に漏らしてはいけない秘密の情報です。

小さな数で暗号化と復号を体験する

仕組みを理解するために、小さな数で計算してみましょう。素数をp=5、q=11とすると、n=55、(p−1)×(q−1)=40です。40と共通の約数を持たないe=3を選ぶと、3×27=81を40で割った余りが1になるため、d=27となります。
この場合、公開鍵は「n=55、e=3」、秘密鍵は「d=27」です。

手順 計算 結果
暗号化(公開鍵を使う) 平文8を3乗し、55で割った余りを求める(8×8×8=512) 暗号文は17
復号(秘密鍵を使う) 暗号文17を27乗し、55で割った余りを求める 平文の8に戻る

公開鍵(n=55、e=3)を使って「8」を「17」に変え、秘密鍵(d=27)で「17」を「8」に戻せました。暗号化と復号で、異なる鍵を使っていることがポイントです。
この例では55を5×11に分解するのは簡単ですが、実際の鍵ではnが600桁を超えるような大きさになるため、分解して秘密鍵を求めることはできません。

実際の暗号化では「パディング」を組み合わせる

上の計算例は原理を理解するためのもので、実際の暗号化でそのまま使うことはありません。計算だけをそのまま使うと、同じ平文からは必ず同じ暗号文ができるため、暗号文から内容を推測されるなどの弱点があるためです。

そこで実際には、データにランダムな値などを加える「パディング」と呼ばれる処理を組み合わせます。現在は、暗号化には「RSA-OAEP」、デジタル署名には「RSA-PSS」といった、安全性が検証された方式を使うのが基本です。

RSA暗号でできること・使われている場面

データの暗号化と鍵の受け渡し

RSA暗号では、相手の公開鍵でデータを暗号化し、相手だけが自分の秘密鍵で復号できます。ただし、RSA暗号は計算に時間がかかるため、大きなファイルや通信の中身を直接暗号化することはほとんどありません。

実際には、通信の中身は処理の速い共通鍵暗号(AESなど)で暗号化し、その共通鍵を相手に安全に渡すためにRSA暗号を使う、という組み合わせ(ハイブリッド暗号)が一般的です。

デジタル署名

デジタル署名では、暗号化とは鍵の使い方が逆になります。署名する人が自分の秘密鍵で署名を作り、受け取った人が署名者の公開鍵で検証します。

署名を正しく検証できれば、そのデータが署名した本人によるものであることと、署名した後に書き換えられていないことを確認できます。秘密鍵は本人しか持っていないため、他人が同じ署名を作ることはできません。

身近な利用例

RSA暗号は、日常的に使うさまざまな仕組みの裏側で使われています。代表的なのが、HTTPSで通信するWebサイトのサーバー証明書です。
証明書には、認証局によるデジタル署名が付けられており、そのWebサイトが本物であることを確かめるためにRSAなどの公開鍵暗号が使われています。

このほか、サーバーに安全にログインするためのSSHの鍵、電子メールの暗号化や署名を行うS/MIME、ソフトウェアが改ざんされていないことを示すコード署名、電子契約の電子署名などにも、RSA暗号が使われています。

TLS 1.3で変わったRSAの役割

HTTPSの通信を守るTLSの古いバージョンでは、通信に使う共通鍵を、サーバーのRSAの公開鍵で暗号化して受け渡す方式がよく使われていました。しかしこの方式では、サーバーの秘密鍵が後から漏れると、過去に記録された通信まで復号されてしまうおそれがあります。

そこで、2018年に策定されたTLS 1.3では、この方式が廃止されました。現在のTLS 1.3では、共通鍵はその都度使い捨ての鍵で交換し、RSAは主に「サーバーが本物であることを示す署名」に使われています。

RSA暗号のメリット・デメリット

メリット

RSA暗号の大きなメリットは、事前に相手と秘密の鍵を共有しなくても、安全に暗号化したデータを送れることです。公開鍵は誰に知られてもかまわないため、鍵の配布が簡単になります。

また、1つの方式で暗号化とデジタル署名の両方に使えること、長年にわたって世界中で研究・利用されてきた実績があり、多くの規格や製品が対応していることも強みです。

デメリット

一方で、RSA暗号は計算量が多く、共通鍵暗号に比べて処理が大幅に遅いため、大量のデータの暗号化には向いていません。また、安全性を保つために長い鍵が必要で、楕円曲線暗号と比べると鍵や署名のデータが大きくなります。

さらに、後述するように、十分な性能の量子コンピュータが実用化されると、解読されるおそれがある点も大きな課題です。

RSA暗号は今も安全か

安全性は鍵長で決まる

RSA暗号の安全性は、鍵の長さ(鍵長)によって大きく変わります。鍵長が長いほど、素因数分解に必要な計算量が増え、解読が難しくなります。日本の暗号技術の評価を行うCRYPTRECでは、RSAの鍵長と安全性の強さの目安を次のように示しています。

RSAの鍵長 安全性の強さの目安
2048ビット 112ビット相当
3072ビット 128ビット相当
7680ビット 192ビット相当

現在の一般的なコンピュータでは、2048ビット以上のRSAの鍵を現実的な時間で解読することはできないと考えられています。ただし、どの長さが必要かは、守りたい情報の重要さや、守りたい期間によって変わります。

1024ビットの鍵はもう使わない

かつては1024ビットの鍵も広く使われていましたが、コンピュータの性能向上により安全性が不十分になったため、現在は使用が推奨されていません。古い機器やソフトウェアには、今も1024ビット以下の鍵が残っていることがあるため注意が必要です。

RSA暗号を使っているかどうかだけでなく、鍵長が2048ビット以上かどうかまで確認することが大切です。

実装の不備が弱点になる

RSA暗号の数学的な仕組みが安全でも、使い方や作り方に問題があると、解読される原因になります。たとえば、パディングを使わずに計算だけで暗号化したり、古いパディング方式を使い続けたりすると、暗号文から内容を推測される攻撃を受けるおそれがあります。

また、鍵を作るときの乱数の質が低いと、素数を推測されて秘密鍵を求められてしまいます。実際に、特定の製品の鍵の作り方の不具合によって、多数の鍵が危険な状態になった事例も報告されています。
このほか、処理にかかる時間や消費電力の変化から秘密鍵を推測する「サイドチャネル攻撃」もあります。暗号の処理は自作せず、実績があり更新が続いているライブラリや製品を使うことが基本です。

量子コンピュータがRSA暗号に与える影響

量子コンピュータで素因数分解が速くなる理由

量子コンピュータは、量子力学の性質を利用して、従来のコンピュータとはまったく異なる方法で計算を行います。
1994年に考案された「ショアのアルゴリズム」を十分な性能の量子コンピュータで実行すると、大きな数の素因数分解を、従来とは比べものにならない速さで解けることが知られています。

素因数分解の難しさに安全性を頼っているRSA暗号は、この方法によって解読されてしまうおそれがあります。量子コンピュータの脅威は、鍵を長くするだけでは防げない、方式そのものの問題です。なお、楕円曲線暗号も同じ種類の計算で解読されるおそれがあるとされています。

「今盗んで、後で解読する」攻撃


RSA暗号を解読できる量子コンピュータは、まだ実現していません。しかし、注意が必要なのは、攻撃者が今のうちに暗号化された通信やデータを盗んで保存しておき、将来量子コンピュータが実用化されたときにまとめて解読する、という攻撃です。

この攻撃では、今は安全に見える通信でも、将来になって中身を読まれてしまいます。医療情報や個人情報、企業の機密情報など、何年も先まで守り続けたい情報ほど、量子コンピュータの登場より前に備えておく必要があります。

耐量子計算機暗号(PQC)の標準化

量子コンピュータでも解読が難しい新しい暗号は、「耐量子計算機暗号(PQC:Post-Quantum Cryptography)」と呼ばれます。
米国の標準化機関NISTは、2024年に鍵の受け渡しに使う方式(ML-KEM)や、デジタル署名の方式(ML-DSA、SLH-DSA)を標準として公表しました。

主要なWebブラウザなどでは、従来の方式と耐量子計算機暗号を組み合わせた鍵交換の導入も始まっています。
各国の政府機関も、RSAなど従来の公開鍵暗号から耐量子計算機暗号へ移行する方針を示しており、今後数年から十数年をかけて、段階的に切り替えが進むと見込まれています。

量子時代に知っておきたいこと

使われている鍵の長さと種類を確認する

まずは、自分が使っている鍵の種類と長さを確認してみましょう。Webサイトのサーバー証明書は、ブラウザのアドレスバーにある鍵のマークなどから証明書の詳細を開くと、公開鍵の種類(RSAなど)と鍵長を確認できます。

SSHでサーバーにログインしている人は、「ssh-keygen -l -f 鍵ファイル」というコマンドで、手元の鍵の種類と長さを確認できます。RSAで1024ビット以下の鍵を使っている場合は、2048ビット以上のRSAか、より新しい方式の鍵に作り直しましょう。

ソフトウェアや機器を最新の状態に保つ

暗号の新しい方式への切り替えは、多くの場合、OSやブラウザ、サーバーのソフトウェア、ネットワーク機器の更新を通じて行われます。耐量子計算機暗号への対応も、ソフトウェアの更新によって順次取り入れられています。

更新プログラムを適用し、サポートが終了した古いソフトウェアや機器を使い続けないことが、利用者にできる最も確実な備えです。

長く守りたいデータほど早めに備える

「今盗んで、後で解読する」攻撃を考えると、備えの優先度は、そのデータを何年守る必要があるかで決まります。短期間しか意味を持たない情報よりも、何年も先まで秘密にしておくべき情報のほうが、早めの対策が必要です。

組織でシステムを管理している場合は、どのシステムでどの暗号方式・鍵長が使われているかを一覧にする「暗号の棚卸し」から始め、長く守るべき情報を扱うシステムから移行の計画を立てるのが現実的です。

暗号を切り替えやすくしておく

暗号の方式は、今後も研究の進展によって見直される可能性があります。そのため、特定の暗号方式に依存した作りにせず、必要になったときに別の方式へ切り替えやすくしておく考え方が重要になっています。これを「クリプトアジリティ(暗号の俊敏性)」と呼びます。

システムを開発する立場であれば、暗号方式や鍵長を設定で変更できるようにしておく、実績のある暗号ライブラリを使い更新を続ける、といった工夫が、将来の移行の負担を大きく減らします。

RSA暗号に関するよくある質問

Q. RSA暗号は今すぐ使えなくなりますか?

すぐに使えなくなるわけではありません。現在のコンピュータでは、2048ビット以上のRSAを現実的な時間で解読することはできないと考えられています。ただし、量子コンピュータの発展を見据えて、耐量子計算機暗号への移行が段階的に進められています。

Q. RSAの鍵長は何ビットを使えばよいですか?

現在は2048ビット以上が基本です。より長く安全性を保ちたい場合は、3072ビット以上が使われることもあります。1024ビット以下の鍵は安全性が不十分なため、使わないようにしましょう。

Q. RSA暗号とRSA社は関係がありますか?

関係があります。セキュリティ製品で知られるRSA社は、RSA暗号を発明した3人が設立に関わった会社で、社名も暗号の名前に由来しています。ただし、RSA暗号そのものは、特定の会社の製品ではなく、広く使われている暗号方式です。

Q. 量子コンピュータはもう実用化されていますか?

研究用の量子コンピュータは開発が進んでいますが、実際に使われている大きさのRSAの鍵を解読できる性能のものは、まだ実現していません。いつ実現するかについてはさまざまな見方があり、その時期を正確に予測することは難しいとされています。

Q. 楕円曲線暗号なら量子コンピュータに強いですか?

強くはありません。楕円曲線暗号はRSAより短い鍵で同じ程度の安全性を実現できますが、十分な性能の量子コンピュータでは、RSAと同じように解読されるおそれがあるとされています。量子コンピュータへの対策には、耐量子計算機暗号への移行が必要です。

まとめ

RSA暗号は、公開鍵と秘密鍵を使い分け、素因数分解の難しさを安全性の根拠とする公開鍵暗号の代表です。デジタル署名や証明書などで今も広く使われており、2048ビット以上の鍵と適切なパディングを使えば、現在のコンピュータに対しては安全と考えられています。

一方、将来の量子コンピュータに備えて、鍵の確認やソフトウェアの更新を続け、耐量子計算機暗号への移行の動きを知っておきましょう。

SNSでもご購読できます。