it-swarm-eu.dev

Mohu použít soukromý klíč jako veřejný klíč a naopak?

Mám kód pro šifrování dat pomocí veřejného klíče a dešifrování pomocí soukromého klíče. To je užitečné, když chce klient posílat data na server a vědět, že ho může dešifrovat pouze server.

Řekněme však, že chci, aby server šifroval data pomocí klíče soukromý a dešifroval je pomocí klíče veřejný, jako způsob distribuce dat, u nichž lze ověřit, že pocházejí z správný server. Namísto úpravy kódu, aby to bylo možné, mohu jednoduše publikovat soukromý klíč a udržet veřejný klíč v tajnosti? Ovlivňuje to bezpečnost systému?

39
Graeme Perrow

Řekněme však, že chci, aby server šifroval data pomocí soukromého klíče a dešifroval je pomocí veřejného klíče, což je způsob distribuce dat, o kterých lze ověřit, že pocházejí ze správného serveru.

Můžete to udělat - je to na velmi zjednodušující úrovni, jak funguje podepisování RSA (poznámka: zjednodušující - je toho o něco více).

Namísto úpravy kódu, aby to bylo možné, mohu jednoduše publikovat soukromý klíč a udržet veřejný klíč v tajnosti? Ovlivňuje to bezpečnost systému?

Vy nemusíte vůbec publikovat soukromý klíč - RSA je permutace Trapdoor, což znamená:

  • Pokud zašifrujete veřejný klíč, můžete dešifrovat soukromým klíčem.
  • Pokud zašifrujete soukromý klíč, můžete jej dešifrovat pomocí veřejného klíče.

RSA tedy podporuje provádění podpisu i šifrování spoléhající se na to, že koncový uživatel má pouze veřejný klíč.

Pokud si klient přeje ověřit data pocházející ze serveru, použijete druhý případ RSA a dešifrujte data podpisu pomocí veřejného klíče, který již máte.

Navíc, protože se jedná o permutaci, neměli byste svůj kód vůbec upravovat. Obě klávesy by měly fungovat pomocí stejné funkce. Očekával bych, že každá slušná krypto knihovna bude mít API pro ověřování podpisů podle měnících se standardů, které existují - jedním z nich by pravděpodobně byla dobrá sázka.

RSA Labs poskytují Nice vysvětlení .

Pokud to chcete rozšířit mezi servery nebo ověřit komunikaci klienta - vygenerujte klíče pro každou entitu a vyměňte veřejné. Proces lze poté použít na obou koncích.

Teoreticky jsou e a d vzájemně zaměnitelné (proto RSA funguje) (jeden musí být označen jako tajný a udržovaný v tajnosti), ale p a q musí vždy být udržované v tajnosti, protože vám umožňují odvodit d z e a naopak. Při pochopení soukromého klíče však musíte být velmi opatrní - ukládá váš software v soukromém klíči p/q? Pokud ano, nemůžete jej publikovat tak, jak je. Také, když řeknu zaměnitelným - jakmile jednou publikujete jeden z těchto párů (e nebo d spolu s vaším modulem n), musíte chránit druhého svým životem. Prakticky řečeno jak Graeme v komentářích odkazuje e je často vybíráno jako malá/pevná hodnota. Můj názor na zaměnitelnost e/d se zjevně nevztahuje, pokud je e snadno určitelné. Dělat takovou věc má tedy potenciál k záměně a nesprávnému provedení. Použijte knihovnu třetích stran/nezačněte publikovat soukromé klíče.

51
user2213

Ano, můžete šifrovat pomocí soukromého klíče a dešifrovat pomocí veřejného klíče, NEVYDÁVEJTE svůj soukromý klíč (soukromé klíče mohou generovat veřejné klíče a celý váš šifrovací systém je nyní k ničemu), předpokládám, že chcete udělat něco jako tento:

Server šifruje data, odesílá je klientům.

Klienti mají veřejný klíč a mohou dešifrovat data ze serveru.

Za této okolnosti by mělo smysl, pokud server dělá šifrování i dešifrování, nemám ponětí, proč byste chtěli implementaci asymetrického šifrování.

Toto pravidlo platí vždy: soukromý klíč zůstává soukromý a neopouští server.

9
StrangeWill

Řekněme však, že chci, aby server šifroval data pomocí soukromého klíče a dešifroval je pomocí veřejného klíče:

Server může šifrovat data pomocí svého soukromého klíče a příjemce může dešifrovat pomocí veřejných klíčů serveru, je to možné. Tento scénář se však používá k digitálnímu podepisování dokumentu a jak říkáte, jeho „způsob distribuce dat, o nichž lze ověřit, že pocházejí ze správného serveru“, lze použít pouze odpovídající klíč (veřejný klíč serveru) dešifrovat data. Veřejný klíč serveru je ověřen odpovídajícím digitálním certifikátem vygenerovaným a digitálně podepsaným serverem.

mohu jednoduše zveřejnit soukromý klíč a udržet jej v tajnosti?

Soukromý klíč byste nikdy neměli publikovat, jak název napovídá.

Ovlivňuje to bezpečnost systému?

Ano, také tento systém není životaschopný, například pokud používáte Diffie-Hellman (jeden z nejpoužívanějších protokolů pro výměnu klíčů), server a všichni klienti musí sdílet veřejné hodnoty, které se používají pro výpočet klíčů relace . Pokud tedy jako uživatel publikujete svůj soukromý klíč, je velmi snadné vypočítat veřejný klíč, což není naopak možné nebo je velmi obtížné.

2
Ishtiaq Hussain

Nevím, zda byste se mohli zašifrovat soukromým klíčem a dešifrovat veřejným klíčem, ale pokud byste mohli, pak by to nebylo příliš bezpečné, protože dešifrovací klíč je veřejný - váš soukromý klíč by měl zůstat soukromý.

Pokud si přejete pouze ověřit, že odesílatel zprávy, namísto toho data podepíšete soukromým klíčem odesílatele a příjemce ověří podpis pomocí veřejného klíče odesílatele.

Pokud si přejete zašifrovat data i ověřit odesílatele, zašifrujete a podepíšete, přičemž žádný z nich nevyžaduje odhalení soukromého klíče.

0
hmallett