Pokud si pamatuji, zašifrujete zprávu pomocí veřejného klíče a dešifrujete ji pomocí soukromého klíče. Moje otázka zní, zda je možné získat veřejný klíč ze soukromého klíče RSA. Například pokud mám takový klíč:

-----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----- 

mohu získat veřejný klíč?

Komentáře

  • Tento klíč nyní unikl na internet a jeho použití mimo příklady již není bezpečné, jen abyste si to uvědomili.
  • “ Zde je klíč k mému domu. Kdo chce vytvořit kopii? “
  • Doufám, že OP vygeneroval ukázkový klíč jen pro použití v této otázce a poté jej okamžitě zlikvidoval.
  • @ basic6 “ Zde je klíč od mého domu. Jak pro to udělám zámek? “
  • Musíte si ujasnit, zda se ‚ ptáte na pouze soukromý klíč (v takovém případě je odpověď ne) nebo soubor soukromého klíče , který podle konvence (jako zde) zahrnuje oba klíče.

Odpověď

Mohu získat veřejný klíč?

Pomocí 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--- 

je snadné Chcete-li získat představu o tom, co je obsaženo v souboru klíče, můžete předat možnost -text a zobrazit lidsky čitelný (jakýsi) výpis ladění. Tímto způsobem můžete podívejte se, že soubor klíče obsahuje jak soukromé informace, tak i veřejné informace. Zvláště obsahuje modul a publicExponent, které plně popisují veřejný klíč:

$ 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: (…) 

Komentáře

  • @Pysis: tato odpověď není o “ nalezení “ veřejnosti z veřejného klíče. Je jednoduché, že všechny informace potřebné pro soukromou i veřejnou část jsou uloženy v souboru soukromého klíče. V souboru veřejného klíče místo toho chybí všechny informace týkající se soukromé části.
  • @Pysis Toto je asymetrické šifrování.
  • @Pysis Ano, asymetrické šifrování je “ mírně asymetrický „.
  • @SteffenUllrich Tato věta by měla být součástí vaší odpovědi
  • @ Mehrdad: v kontextu informační bezpečnosti v reálném světě je vše, co je prakticky neproveditelné, považováno za neproveditelné. Informační teoretická bezpečnost je zde irelevantní, protože předpokládá neomezený výpočetní výkon, který jednoduše neexistuje. Všechny informace týkající se soukromé části chybí by se tedy měly číst jako všechny informace, které umožňují v praxi získat soukromý klíč chybí .

Odpověď

V praxi ano, můžete získejte veřejný klíč ze soukromého klíče. V zásadě by bylo možné vytvořit soukromý klíč RSA, ze kterého nelze snadno získat odpovídající veřejný klíč získáno, ale to by vyžadovalo použití jak nestandardní metody generování klíče, tak nestandardního formátu úložiště soukromého klíče.


Pojďme si rychle prohlédnout základy. Veřejný klíč RSA se skládá ze dvou hodnoty:

  • modul n (produkt dvou tajně vybraných velkých prvočísel p a q ), a
  • veřejný exponent e (který může být pro mnoho klíčů stejný a obvykle se volí jako malé liché prvočíslo, nejčastěji 3 nebo 2 16 +1 = 6 5537).

Soukromý klíč RSA mezitím vyžaduje minimálně následující dvě hodnoty:

  • modul n (stejné jako ve veřejném klíči) a
  • soukromý exponent d (počítáno z veřejného exponenta e a faktory p a q modulu).

Většina formátů pro ukládání soukromých klíčů RSA, včetně Formát PKCS1 RSAPrivateKey zobrazený ve vaší otázce, ve skutečnosti také ukládá spoustu dalších hodnot, včetně:

  • veřejného exponenta e ,
  • faktory p a q modulu,
  • redukované soukromé exponenty d p = d mod ( p − 1) a dq = d mod ( q − 1) a
  • “ koeficient CRT „ q inv = q − 1 mod p .

Zejména zahrnutí veřejného exponenta e ve formátu soukromého klíče znamená, že veřejný klíč lze triviálně extrahovat ze souboru soukromého klíče kompatibilního s PKCS1.I když veřejný exponent e nebyl zahrnut do souboru soukromého klíče, znalost faktorů p a q modulu umožňuje také jeden exponent lze snadno vypočítat z druhého. A konečně, i když jsme neznali faktory modulu, pro klíče RSA generované obvyklým způsobem bychom mohli jednoduše otestovat nejčastěji používané hodnoty e a zjistit, která z nich generuje šifrovací texty, které lze správně dešifrovat pomocí daného soukromého klíče.


Vše, co bylo řečeno, kdybychom použili nestandardní algoritmus generování klíčů RSA, který zvolil e ( nebo d ) náhodně z povoleného rozsahu hodnot (tj. celá čísla větší než 1 a menší než a souběžně s λ ( n ) = lcm ( p − 1, q − 1)), a pokud jsme použili nestandardní formát soukromého klíče RSA, který pro dešifrování ukládal pouze minimum informací (tj. n a d ), pak by nebylo možné vypočítat veřejný klíč ze soukromého klíče bez efektivního prolomení klíče (tj. faktorování modulu).

Ve skutečnosti, pokud je použit v takovém nestandardním muži Ner, algoritmus RSA se stává „symetrickým“ v tom smyslu, že žádný z klíčů ( n , e ) a ( n , d ) lze efektivně vypočítat z druhého a jeden z nich lze libovolně označit jako soukromý klíč. V zásadě, pokud jste držiteli soukromého klíče nedali vědět odpovídající „veřejný“ klíč (což samozřejmě znamená, že by už opravdu nebyl veřejný), mohli by zprávy pouze dešifrovat, ale nešifrovat. Bohužel, praktická užitečnost jakéhokoli takového schématu je poněkud omezena prostou skutečností, že kdokoli vygeneruje klíčový pár, nevyhnutelně nakonec bude znát obě jeho poloviny.

Komentáře

  • Na poslední větu se mračím. Protože e je stejně považováno za veřejné, nelze zapomenout na e (a p a q) jen stěží považovat za zadní vrátka, která má majitel soukromého klíče k dispozici. (A pokud protivník získá soukromý klíč d, má také veřejný klíč e a vyhrál)
  • @HagenvonEitzen: Poslední odstavec hovoří o (nestandardním) případu použití, kde e není veřejné ani malé .
  • @HagenvonEitzen: Opravdu jsem tento problém zmínil v propojeném příspěvku o krypto.SE. Jakékoli schéma, které spoléhá na “ veřejný “ klíč, který nelze odvodit ze “ soukromého Klíč “ musí nutně uchovávat “ veřejný “ klíč alespoň u některých stran ( a tím porušuje jeden ze standardních předpokladů kryptoměny veřejného klíče), aby tato funkce byla k ničemu. Ale vidím, jak ten odstavec mohl být zavádějící; doufejme, že přepsaná verze je alespoň o něco jasnější.
  • RSA má zajímavou matematickou vlastnost, že dešifrování používá stejný vzorec jako šifrování, místo d místo e. Díky tomu můžete zaměnit e a d (tj. Použít soukromý klíč pro šifrování a veřejný pro dešifrování). Pak získáte schéma elektronického podpisu.

Odpovědět

Ano. Je to také docela snadné. Pokud se podíváte na specifikaci RSA, veřejný klíč potřebuje n a e. Soukromý klíč může mít p q d. Použijte je k výpočtu.

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

Pokud je chcete zabalit zpět do formátu PEM, přečtěte si https://github.com/ius/rsatool

Komentáře

  • Zarámováno jako matematická odpověď, to je špatně. Soukromý klíč může mít pouze na d a z toho je nemožné obecně vypočítat e. ‚ S je to v praxi obvykle možné jen proto, že e je téměř vždy vybráno mezi hrstkou hodnot. V rámci praktické odpovědi je to špatně: e je, v praxi vždy součástí ostatních parametrů (minimálně na n a d, obvykle také parametrů potřebných pro výpočet na základě CRT).
  • Dohodnuto, ale prakticky jsou uloženy RSA s privátními klíči CRT jako n-tice (n, e, d, p, q, dP, dQ, qInv), což je případ zde. Snažil jsem se matematicky nastavit komponenty.
  • Ano: soukromé klíče se prakticky ukládají jako n-tice , která obsahuje e . Není třeba počítat e.
  • @Gilles Z příspěvku: “ veřejný klíč potřebuje n a e.“ a ze sudhackar ‚ s komentář: „, ale prakticky RSA s privátními klíči CRT jsou obvykle uloženo jako n-tice (n, e, d, p, q, dP, dQ, qlnv) „, což mě vede k závěru, že prakticky jsou obvykle uloženy soukromé klíče jako n-tice která obsahuje soukromý klíč . Není nutné počítat soukromý klíč, takže celá tato otázka a všechny její odpovědi jsou irelevantní. Nerozumím ‚ vašemu nejnovějšímu komentáři. Odpověď sudhackar ‚ ukazuje, jak najít sadu možných veřejných klíčů z nejméně užitečných možných informací.
  • @ wizzwizz4 Pokud máte p, q a d , máte více než nejméně užitečné informace o soukromém klíči. ‚ Nikdy jsem neviděl soukromé klíče s p, q a d, ale ne na n a e. Musíte n udělat s klíčem cokoli užitečného a ukládání p a q místo n nezíská ‚ žádné úložiště.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *