私が覚えている限り、公開鍵を使用してメッセージを暗号化し、秘密鍵を使用して復号化します。私の質問は、RSA秘密鍵から公開鍵を取得できるかどうかです。たとえば、次のようなキーがある場合:

-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQCtrKVnwse4anfX+JzM7imShXZUC+QBXQ11A5bOWwHFkXc4nTfE Or3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j3NgqX8zZJG7IwLJ/Pm2sRW5Q j32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdWtoeLfxDBL2AJ20qXzQIDAQAB AoGBAKNXi0GpmjnCOPDxLFg5bvQVfhLSFCGMKQny1DVEtsfgZmbixv5R2R41T4+d CHJMdEsUFFJ6I7CRLTcg1SDU8IhcAWCBRSNeVuomCHlQG16ti8HxwhiwIcjvDz/z NC2sL5ZJ2eJnhbtXLdf6pxxO1pA5vLp1AX06IaETO977XvupAkEA+ZgtGZybyUkf tEA3ekXc5eLoW+zgU0C1fATWcIZ8Iq5YV1BW+3oAzf8HgIbkQh4LM2qa6An3l+vW NXR4wICHkwJBALIhrcdJqKw36qiyenq+m78klp5SnurQifVt0Sy1GMWyOUqYz5jK t9sGo9Qn6GDuYe/XGXKWQW25PkEYXxxPPx8CQQCpICyvRidp5VrOURVGjUB5pZ+9 am02/In9V2nXJcnH1kuWHqJSFQGmlEEJHl5dTu5YEMyWnupezzd/UUThbDZxAkAz TNO5QxNalbf04YG4e9Bq2eSur+iog2pXzkqhb3404UDypNOUkz0jzOO9o8ieschu xCnGAFPTf7fYE2bAxmnNAkEA0/3bdsvJclquypqP9CQeQnxGwQtWz6+yn07gj3U1 V19mdeKCUZWklRarrcr67u9DdEx+JowyEY/ppzgeQtW01g== -----END RSA PRIVATE KEY----- 

公開キーを取得できますか?

コメント

  • このキーはインターネットに漏洩し、例以外での使用は安全ではなくなったため、そのことに気づきました。
  • “これが私の家の鍵です。誰がコピーを作成したいですか?”
  • OPがこの質問で使用するためのサンプルキーを生成し、すぐに破棄することを望みます。
  • @ basic6 “これが私の家の鍵です。どうすればロックできますか?”
  • 質問しているかどうかを明確にする必要があります’ 秘密鍵のみ(この場合、答えはノー)または秘密鍵ファイル。慣例により(ここにあるように)両方の鍵が含まれます。

回答

公開鍵を取得できますか?

openssl rsaを使用すると簡単です:

$ openssl rsa -in the-private-key-from-your-question.pem -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtrKVnwse4anfX+JzM7imShXZU C+QBXQ11A5bOWwHFkXc4nTfEOr3fJjnRSU5A3IROFU/pVVNiXJNkl7qQZK5mYb8j 3NgqX8zZJG7IwLJ/Pm2sRW5Qj32C/uJum64Q/iEIsCg/mJjDLh1lylEMEuzKgTdW toeLfxDBL2AJ20qXzQIDAQAB -----END PUBLIC KEY--- 

キーファイルに何が含まれているのかを知りたい場合は、-textオプションを渡して、人間が読める(一種の)デバッグダンプを確認できます。キーファイルには、秘密情報と公開情報の両方が含まれていることを確認してください。特に、公開キーを完全に説明するモジュラスとpublicExponentが含まれています。

$ openssl rsa -text -in the-private-key-from-your-question.pem Private-Key: (1024 bit) modulus: 00:ad:ac:a5:67:c2:c7:b8:6a:77:d7:f8:9c:cc:ee: 29:92:85:76:54:0b:e4:01:5d:0d:75:03:96:ce:5b: 01:c5:91:77:38:9d:37:c4:3a:bd:df:26:39:d1:49: 4e:40:dc:84:4e:15:4f:e9:55:53:62:5c:93:64:97: ba:90:64:ae:66:61:bf:23:dc:d8:2a:5f:cc:d9:24: 6e:c8:c0:b2:7f:3e:6d:ac:45:6e:50:8f:7d:82:fe: e2:6e:9b:ae:10:fe:21:08:b0:28:3f:98:98:c3:2e: 1d:65:ca:51:0c:12:ec:ca:81:37:56:b6:87:8b:7f: 10:c1:2f:60:09:db:4a:97:cd publicExponent: 65537 (0x10001) privateExponent: (…) 

コメント

  • @Pysis:この回答は”公開鍵から”公開を検索します。秘密部分と公開部分の両方に必要なすべての情報が秘密鍵ファイルに保存されるのは簡単です。代わりに、公開鍵ファイルでは、秘密部分に関するすべての情報が欠落しています。
  • @Pysisこれは非対称暗号化です。
  • @Pysisはい、非対称暗号化は”わずかに非対称”。
  • @SteffenUllrichその文は回答の一部である必要があります
  • @Mehrdad:現実世界の情報セキュリティのコンテキストでは、実際に実行不可能なものはすべて実行不可能と見なされます。情報理論的セキュリティは、単に存在しない無制限の計算能力を前提としているため、ここでは関係ありません。したがって、秘密部分に関するすべての情報が欠落しているは、実際に秘密鍵を導出できるようにするすべての情報が欠落していると読む必要があります。

回答

実際には、はい、できます秘密鍵から公開鍵を取得します。原則として、対応する公開鍵を簡単に作成できないRSA秘密鍵を作成することは 可能です。取得しましたが、これには非標準の鍵生成方法と非標準の秘密鍵ストレージ形式の両方を使用する必要があります。


基本を簡単に確認しましょう。RSA公開鍵は2つで構成されています。値:

  • 係数 n (2つの秘密に選択された大きな素数 p q の積)、および
  • 公開指数 e (これは多くの鍵で同じである可能性があり、通常は小さな奇数の素数、最も一般的には3または2 16 +1 = 6 5537)。

一方、RSA秘密鍵には、少なくとも次の2つの値が必要です。

  • 係数 n (公開鍵と同じ)、および
  • プライベート指数 d (パブリック指数 e から計算)および係数の係数 p および q )。

ただし、

PKCS1 RSAPrivateKey形式には、実際には次のような追加の値も格納されます。

  • 公開指数 e
  • 係数の係数 p および q
  • 縮小されたプライベート指数 d p = d mod( p − 1)および d q = d mod( q − 1)、および
  • 「CRT係数」 q inv = q − 1 mod p

特に、公開指数 e は、PKCS1準拠の秘密鍵ファイルから公開鍵を簡単に抽出できることを意味します。また、公開指数 e が秘密鍵ファイルに含まれていなくても、モジュラスの係数 p q を知っていると、どちらの指数も使用できます。他から簡単に計算できます。そして最後に、モジュラスの要因がわからなくても、通常の方法で生成されたRSAキーの場合、最も一般的に使用される e の値をテストして、どれが生成されるかを確認できます。指定された秘密鍵を使用して正しく復号化できる暗号テキスト。


ただし、 e e を選択した非標準のRSA鍵生成アルゴリズムを使用する場合は、または d )許容値の範囲からランダムに(つまり、1より大きく1より小さい整数で、 λ n )= lcm( p − 1、 q − 1))、および復号化のための最低限の情報のみを格納する非標準のRSA秘密鍵形式(つまり、 n および d )を使用した場合、その場合、鍵を効果的に解読する(つまり、係数を因数分解する)ことなく、秘密鍵から公開鍵を計算することはできません。

実際、そのような非標準の男性で使用された場合ner、RSAアルゴリズムは、キー( n e )と( n )のどちらでもないという意味で「対称」になります。 d )は、もう一方から効果的に計算でき、どちらか一方を秘密鍵として任意に指定できます。原則として、秘密鍵の所有者に対応する「公開」鍵を知らせなかった場合(もちろん、実際には公開されなくなることを意味します)、メッセージを復号化することはできますが、暗号化することはできません。残念ながら、このようなスキームの実用的な有用性は、キーペアを生成する人は誰でも必然的にその両方の半分を知ってしまうという単純な事実によってかなり制限されます。

コメント

  • 最後の文について眉をひそめます。 eはとにかく公開されていると見なされるため、e(およびpとq)を忘れないことは、秘密鍵の所有者が利用できるバックドアとはほとんど見なされません。 (そして、敵対者が秘密鍵dを取得すると、公開鍵eも持って勝ちます)
  • @HagenvonEitzen:最後の段落では、eが公開でも小さくもない(非標準の)使用例について説明しています。 。
  • @HagenvonEitzen:確かに、リンクされたcrypto.SEの投稿でその問題について言及しました。 “公開”キーに依存するスキームは”プライベートから派生できません”キーは、必ず” public “キーを少なくとも一部の関係者から秘密にしておく必要があります(そのため、その機能を使用するには、公開鍵暗号の標準的な前提条件の1つに違反します。しかし、その段落がどのように誤解を招く可能性があるかはわかります。書き直されたバージョンが少なくとも少し明確になることを願っています。
  • RSAには、復号化が暗号化と同じ式を使用し、代わりにdを使用するという興味深い数学的特性があります。 e。このおかげで、edを入れ替えることができます(つまり、暗号化には秘密鍵を使用し、復号化には公開鍵を使用します)。次に、電子署名スキームを取得します。

回答

はい。それも非常に簡単です。RSA仕様を見ると、公開鍵にはneが必要です。秘密鍵にはeが必要です。 div id = “79e19456b7”>

qd。これらを使用して計算します。

n=p*q e=mod_inverse(d,euler_totient(n)) 

PEM形式にパックする場合は、 https://github.com/ius/rsatool を参照してください。

コメント

  • 数学的な答えとして組み立てられているため、これは誤りです。秘密鍵にはnとdしか含まれない可能性があるため、それは不可能です。一般にeを計算します。’は通常、実際にはeが少数の値の中から選択されるためにのみ可能です。実用的な答えとして組み立てられているため、これは誤りです。実際には、常に他のパラメータ(少なくともnとd、通常はCRTベースの計算に必要なパラメータ)に含まれています。
  • 同意しましたが、実際には、CRT秘密鍵を使用したRSAは通常保存されます。 (n、e、d、p、q、dP、dQ、qInv)のタプルとして、これがここに当てはまります。コンポーネントを数学的に設定しようとしていました。
  • はい:実際には、秘密鍵は通常、eを含むタプルとして保存されます。 eを計算する必要はありません。
  • @Gilles投稿から:”公開鍵にはne。”およびsudhackarから’のコメント:”ただし、実際にはCRT秘密鍵を使用したRSAは通常、(n、e、d、p、q、dP、dQ、qlnv)”のタプルとして保存されます。これにより、実際には、秘密鍵は通常保存されるという結論に至ります。 秘密鍵を含むタプルとして。秘密鍵を計算する必要がないため、この質問全体とそのすべての回答は無関係になります。 ‘最近のコメントがわかりません。 sudhackar ‘の答えは、最も有用性の低い情報から可能な公開鍵のセットを見つける方法を示しています。
  • @ wizzwizz4 p、q、dがある場合、秘密鍵について可能な限り有用性の低い情報以上のものがあります。 ‘ p、q、dの秘密鍵は見たことがありませんが、nとeは見たことがありません。キーを使って何か便利なことをするにはnが必要で、nの代わりにpとqを保存しても’ストレージは得られません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です