非対称暗号と鍵ペア
RSAと楕円曲線暗号、および公開鍵と秘密鍵のペアによって秘密情報を共有せずに安全な通信を実現する仕組みを理解します。
「非対称暗号と鍵ペア」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
非対称暗号の仕組み
Asymmetric encryption(非対称暗号、public-key cryptographyとも呼ばれます)は、数学的に関連付けられたkey pairs(鍵ペア)を使用します。鍵ペアは、自由に配布できるpublic key(公開鍵)と、秘密に保管しなければならないprivate key(秘密鍵)で構成されます。公開鍵で暗号化したデータは、対応する秘密鍵でしか復号できません。逆も同様です。この洗練された仕組みにより、対称暗号の鍵配送問題が解決されます。公開鍵は、秘密鍵だけが自分宛てのメッセージを復号できるため、安全性を損なうことなく公開できます。
RSA:最も広く使われているアルゴリズム
RSA (Rivest-Shamir-Adleman)は、最も広く導入されている非対称暗号アルゴリズムで、1977年に発明されました。その安全性は、2つの大きな素数の積を素因数分解することの数学的な難しさに基づいています。RSAは1024、2048、4096ビットの鍵長をサポートしています。2048ビットRSAが現在の最小推奨値であり、長期的な安全性には4096ビットが使用されます。RSAはTLSでの鍵交換(ただし、ECDHEへの置き換えが進んでいます)、証明書でのデジタル署名、S/MIMEメール暗号化に使用されます。
# Generate an RSA 2048-bit key pair
openssl genrsa -out private.pem 2048
# Extract the public key
openssl rsa -in private.pem -pubout -out public.pem
# Encrypt with public key (only private key can decrypt)
openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out encrypted.bin
# Decrypt with private key
openssl rsautl -decrypt -inkey private.pem -in encrypted.bin楕円曲線暗号(ECC)
Elliptic Curve Cryptography (ECC)(楕円曲線暗号)は、RSAよりもはるかに短い鍵長で同等の安全性を実現します。256ビットのECC鍵は、3072ビットのRSA鍵に相当する安全性を提供します。この効率性により、ECCはモバイルデバイス、IoTハードウェア、性能が重要なTLS接続など、リソースに制約のある環境に適しています。ECCはelliptic curve discrete logarithm problem(楕円曲線離散対数問題)の数学的な難しさに基づいています。一般的なECCアルゴリズムには、ECDSA(Elliptic Curve Digital Signature Algorithm)とECDH(鍵交換)があります。TLS 1.3ではECCベースの鍵交換が必須です。
# Generate an ECC key pair using the P-256 (secp256r1) curve
openssl ecparam -name prime256v1 -genkey -noout -out ec_private.pem
# Extract public key
openssl ec -in ec_private.pem -pubout -out ec_public.pem
# ECC 256-bit ~ RSA 3072-bit in security strength
# Much faster operations, smaller keys = faster TLS handshakes公開鍵の用途:暗号化の方向
鍵を使用する方向を理解することは、Security+試験で重要です。鍵の役割が反対になる、明確に異なる2つの用途があります。機密性のための暗号化では、送信者が受信者のpublic key(公開鍵)で暗号化し、受信者だけが自分のprivate key(秘密鍵)で復号できます。認証のためのデジタル署名では、署名者が自分のprivate key(秘密鍵)でハッシュを暗号化し、誰でも署名者のpublic key(公開鍵)で検証できます。この方向を逆に覚えるのは試験でよくある間違いです。「公開鍵で暗号化し、秘密鍵で復号する。秘密鍵で署名し、公開鍵で検証する」と覚えておきましょう。
非対称鍵によるデジタル署名
デジタル署名は非対称暗号を使用して、authentication(認証)、integrity(完全性)、non-repudiation(否認防止)を提供します。手順は次のとおりです。(1)送信者がメッセージのhash(ハッシュ)を計算し、(2)そのハッシュを自分のprivate key(秘密鍵)で暗号化して署名を作成し、(3)メッセージと署名を一緒に送信します。受信者は、(4)送信者のpublic key(公開鍵)で署名を復号してハッシュを取り出し、(5)受信したメッセージを独自にハッシュ化し、(6)2つのハッシュを比較します。一致すれば、メッセージが本物で改ざんされていないことが証明されます。
# Sign a document with ECDSA private key
openssl dgst -sha256 -sign ec_private.pem -out document.sig document.txt
# Verify the signature with the public key
openssl dgst -sha256 -verify ec_public.pem -signature document.sig document.txt
# Output: Verified OK (or Verification Failure)非対称暗号が遅い理由
非対称暗号は、対称暗号と比べて計算コストが高く、通常は100~1000倍遅いです。これは、非対称アルゴリズムが大きな数に対して複雑な数学的演算(RSAでは剰余べき乗、ECCでは曲線上の点のスカラー倍算)を行うためです。そのため、非対称暗号を大量データの直接暗号化に使用することは決してありません。代わりに、小さな対称セッション鍵を安全に交換するために使用し、その後、対称鍵で実際のデータを暗号化します。このハイブリッド方式により、両方の方式のセキュリティ上の利点を組み合わせられます。
鍵ペアの生成と保管
適切な鍵ペア管理は不可欠です。秘密鍵はHardware Security Module (HSM)(ハードウェアセキュリティモジュール)で生成するか、暗号化された鍵ストアに保管する必要があり、保護されていない平文ファイルとして保存してはなりません。鍵ペアにはvalidity period(有効期間)があり、期間が過ぎたら再生成する必要があります。証明書ベースの鍵ペアでは、秘密鍵を生成元のデバイスまたはHSMの外部に持ち出してはなりません。秘密鍵が漏えいすると、攻撃者は鍵の所有者になりすまし、対応する公開鍵で暗号化されたすべてのメッセージを復号できるようになります。
公開鍵基盤の概要
非対称鍵ペアは、公開鍵が本当に想定した相手のものであると信頼できる場合にのみ、安全性を提供します。信頼の仕組みがなければ、攻撃者は意図した受信者の公開鍵を自分の公開鍵に置き換えることができます。これは典型的なman-in-the-middle attack(中間者攻撃)です。Public Key Infrastructure (PKI)(公開鍵基盤)は、信頼されたCertificate Authority (CA)(認証局)が、公開鍵と検証済みの身元を結び付ける証明書にデジタル署名することで、この問題を解決します。HTTPSのWebサイトにアクセスすると、ブラウザーは信頼するCAに照らしてサーバーの証明書を検証し、公開鍵が正当なものであることを確認します。
RSAとECCの比較
RSAとECCのどちらを選ぶか判断するときは、3つの要素を考慮します。鍵サイズの効率:ECC 256ビットは、セキュリティ上RSA 3072ビットに相当します。性能:ECCは、特にモバイルデバイスやIoTデバイス上で大幅に高速です。普及度:RSAは従来のシステムとの互換性がより広く、ECCはTLS 1.3で必須であり、最新のセキュリティ標準でも採用が進んでいます。どちらのアルゴリズムも、現在推奨されている鍵サイズで適切に実装すれば、現在も安全と見なされます。Security+試験では、これらのトレードオフと、それぞれが適している場面を理解していることが求められます。
量子コンピューティングが非対称暗号に与える脅威
非対称暗号は、長期的には量子コンピューターによる脅威にさらされています。十分な性能を持つ量子コンピューター上でShorのアルゴリズムを実行すると、素因数分解問題(RSAの破り)や離散対数問題(ECCの破り)を多項式時間で解けるため、現在安全とされている鍵長も破られる可能性があります。NISTはすでに、RSAやECCに代わるポスト量子暗号アルゴリズムとして、CRYSTALS-Kyber(鍵カプセル化)やCRYSTALS-Dilithium(デジタル署名)などを選定しています。長期的に機密性が必要なデータを扱う組織は、今からポスト量子暗号への移行計画を始めるべきです。
非対称暗号のユースケース
非対称暗号は、皆さんが日々利用する多くのセキュリティ機構を支えています。HTTPS:TLSハンドシェイクでは、RSAまたはECCを使ってセッション鍵を交換します。SSH:公開鍵認証により、パスワードを鍵ペアに置き換えます。コード署名:ソフトウェアベンダーは秘密鍵でコードに署名し、OSは公開鍵で検証します。S/MIMEメール:受信者の公開鍵でメールを暗号化し、自分の秘密鍵で署名します。Bitcoin/ブロックチェーン:トランザクションはECDSAの秘密鍵で署名されます。これらの機構が実際にどこで使われているかを理解すると、試験問題の背景も把握しやすくなります。
# SSH public key authentication
# Generate ED25519 key pair (modern, faster than RSA)
ssh-keygen -t ed25519 -C 'alice@company.com'
# ED25519 is based on elliptic curves - fast and secure
# Public key goes to server: ~/.ssh/authorized_keys
# Private key stays local: ~/.ssh/id_ed25519 (protect with passphrase)クイックチェック
このレッスンで扱ったCompTIA Security+(SY0-701)の概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、非対称暗号が数学的に関連付けられた鍵ペアを使用すること、RSAとECCが主要なアルゴリズムであること(ECCはより短い鍵で高速に動作します)、機密性のために公開鍵で暗号化し、認証のために秘密鍵で署名すること、そして非対称暗号は低速である一方、鍵の配布問題を解決することを学びました。次はハッシュとデータ完全性について学びます。
よくある質問
「非対称暗号と鍵ペア」レッスンは無料ですか?
はい。「非対称暗号と鍵ペア」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「非対称暗号と鍵ペア」で何を学びますか?
RSAと楕円曲線暗号、および公開鍵と秘密鍵のペアによって秘密情報を共有せずに安全な通信を実現する仕組みを理解します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「非対称暗号と鍵ペア」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 対称暗号アルゴリズム
- 非対称暗号と鍵ペア
- ハッシュとデータ完全性
- 鍵交換とハイブリッド暗号