Kryptografický problém

Kryptografický problém
« kdy: 05. 02. 2019, 15:33:32 »
Dobrý den, přemýšlím, jaké kombinace v asymetrické kryptografie použití {soukromého, veřejného} x {mého, protistrany} x na {celou zprávu (zašifrování) , její hash (podpis pod zprávou)} má vliv na výsledek a o jaké vlastně jde případy. Ještě jsem ani neřešil řetězení operací (například nejprve podepíši svým soukromým klíčem zprávu a zašifruji veřejným protistrany )== Je správně, že tohle je klasické odeslání zprávy příjemci, aby ji nikdo jiný nemohl odposlechnou a zároveň věděl, že pochází ode mne?

Dotaz: Co když chci udělat následující věc: klasicky si něco zašifrovat a zveřejnit to. Ale s podmínkou, abych si mohl ověřit , že jsem to skutečně psal já (Například Zpráva "Soukup se chová jako blázen."). Logicky to  musím zašifrovat svým veřejným klíčem, aby Zprávu mohl přečíst Jenom Já. Ale zároveň nějak zařídit, aby bylo poznat, že jsem ji psal pouze já a ne někdo jiný z dolních 10 milionů. Znamená to že musím před finálním zašifrováním veřejným klíčem do ní vložit něco, co zašifruji soukromým klíčem (třeba Hash Zprávy). Bude fungovat jako ověření, že jsem autorem té zprávy?
- Co když budu chtít Ještě Navíc tu zašifrovanou zprávu Ciph=V( Zpráva + S(hash(Zpráva) +"To psal Alfons Riot")) pro ostatní potvrdit, že jsem ji psal já (samozřejmě Text Ciph, nikoli Zprávu)? Nějak ji budu muset podepsat soukromým klíčem S(Ciph) ?
- Souvisí s tím nějak HMAC?
- Samozřejmě nejjednoduší by bylo použít Symetrický klíč. Je možné použít jako klíč pro symetrické šifrování již můj soukromý klíč (myšleno soukromý = doplněk Veřejného...)? Jde to z technických důvodů , nebo bezpečnostních Má to
nějaké zádrhle? / Co když to budu chtít použít opravdu jen metody asymetrické kryptografie?
-Není problém, když kombinuji (řetězím) šifrování soukromým a veřejném klíčem, že může dojít k oslabení šifry/vyrušení/ zčitelnění "části" zprávy?


Jak s tímhle souvisí Protokol chatu O.T.R.?  Tohle jsem moc nepochopil, jak to funguje, a co to má umět.


Karmelos

  • *****
  • 1 060
    • Zobrazit profil
    • E-mail
Re:Kryptografický problém
« Odpověď #1 kdy: 05. 02. 2019, 15:52:19 »
Podle mě v tom máte hokej, vy zprávy šifrujete svým privátním klíčem+veřejným klíčem příjemce, příjemce ji rozšifruje pomocí vašeho veřejného klíče a svého privátního. V tom je ten vtip, pokud se mu to podaří, tak ví, že jste tu zprávu posílal/šifroval vy...
« Poslední změna: 05. 02. 2019, 15:59:12 od PajaH »
Gréta je nejlepší.

alex6bbc

  • *****
  • 1 664
    • Zobrazit profil
    • E-mail
Re:Kryptografický problém
« Odpověď #2 kdy: 05. 02. 2019, 16:02:13 »
GPG signature:

Creating and verifying signatures uses the public/private keypair in an operation different from encryption and decryption. A signature is created using the private key of the signer. The signature is verified using the corresponding public key. For example, Alice would use her own private key to digitally sign her latest submission to the Journal of Inorganic Chemistry. The associate editor handling her submission would use Alice's public key to check the signature to verify that the submission indeed came from Alice and that it had not been modified since Alice sent it. A consequence of using digital signatures is that it is difficult to deny that you made a digital signature since that would imply your private key had been compromised.

Re:Kryptografický problém
« Odpověď #3 kdy: 05. 02. 2019, 16:45:59 »
Já jsem se ptal na speciální věc: Zašifrovat zprávu, pak to zveřejnit(například do cloudu, abych si to mohl přečíst kdykoli), zároveň, ale aby zprávu si nemohl přečíst nikdo jiný než já. Zároveň ale abych si já sám mohl ověřit, že tu zprávu jsem psal já a né někdo jiný (protože pokud někdo vytvoří zprávu, podepíše ji mým veřejným klíčem(může kdokoli) a dá ji na cloud, já pak nepoznám, jestli jsem ji třeba psal já - to je to důležité). Jde to řešit asymtrickou šifrou (kombinací veřejného a soukroméno klíče)? Samozřejmě by se to dalo řešit symetrickou šifrou... A Pokud by se to dalo řešit symetrickou šifrou, zda stačí pouze programu říct, že s mým daným privátním klíčem (protože ten znám jen já) má tentokrát šifrovat symetricky, místo asymetricky (ono to nebude tak přímočaré, prostě prostě vyvolatsymetrické šifrování s zvoleným klíčem:=můj soukromý klíč.).

A žádný  klíč někoho jiného tam nefiguruje

PajaH > Ale to je přeci to co jsem popisoval na začátku snad. A to nezpochybňuji. Možná bylo matoucí, že v kartézském součinu se objevil soukromý klíč protistrany, což je samozřejmě nesmysl, ten přece neznám.
AlexBBC > Já se ale neptám na digitální podpis. Tím spíš by si pak mohl kdokoli veřejným klíčem rozšifrovat, co tajného jsem napsal.

alex6bbc

  • *****
  • 1 664
    • Zobrazit profil
    • E-mail
Re:Kryptografický problém
« Odpověď #4 kdy: 05. 02. 2019, 17:01:27 »
Já jsem se ptal na speciální věc: Zašifrovat zprávu, pak to zveřejnit(například do cloudu, abych si to mohl přečíst kdykoli), zároveň, ale aby zprávu si nemohl přečíst nikdo jiný než já. Zároveň ale abych si já sám mohl ověřit, že tu zprávu jsem psal já a né někdo jiný (protože pokud někdo vytvoří zprávu, podepíše ji mým veřejným klíčem(může kdokoli) a dá ji na cloud, já pak nepoznám, jestli jsem ji třeba psal já - to je to důležité). Jde to řešit asymtrickou šifrou (kombinací veřejného a soukroméno klíče)? Samozřejmě by se to dalo řešit symetrickou šifrou... A Pokud by se to dalo řešit symetrickou šifrou, zda stačí pouze programu říct, že s mým daným privátním klíčem (protože ten znám jen já) má tentokrát šifrovat symetricky, místo asymetricky (ono to nebude tak přímočaré, prostě prostě vyvolatsymetrické šifrování s zvoleným klíčem:=můj soukromý klíč.).

A žádný  klíč někoho jiného tam nefiguruje

PajaH > Ale to je přeci to co jsem popisoval na začátku snad. A to nezpochybňuji. Možná bylo matoucí, že v kartézském součinu se objevil soukromý klíč protistrany, což je samozřejmě nesmysl, ten přece neznám.
AlexBBC > Já se ale neptám na digitální podpis. Tím spíš by si pak mohl kdokoli veřejným klíčem rozšifrovat, co tajného jsem napsal.

aha ja myslel, ze to chces vystavit, ale mit jistotu, ze to je tvuj text, proto jsem psal o podpisu.

tak si to zasifuj verejnym klicem a dej na server.
odsifrovat to pujde jen tvym privatnim klicem.


Re:Kryptografický problém
« Odpověď #5 kdy: 05. 02. 2019, 17:13:09 »
tak si to zasifuj verejnym klicem a dej na server.
odsifrovat to pujde jen tvym privatnim klicem.
No jsme skoro u cíle. Jak ale poznám, že dešifrovanou zprávu jsem psal skutečně já? Stejně tak ji mohl napsal kdo jiný, podepsat mým veřejným klíčem. Proto chci mít jistotu, že tu zprávu si nějak budu moc ověřit, že jsem ji psal já . (A to nemusím mít ani sklerozu, stačí třeba se vžít do roku 2050 a najít na internetu zprávu z roku 2011 ( již v té době mi jeho Smlouvy, kecy a a řeči a sliby a koblihy s zápachem řepkového oleje smrděly)podepsanou, že Babiš je gauner a chci mít já jistotu, že je to moje poznámka (samozrejmě ale zašifrovanou, protože, tou dobou zde asi zavede sociální skóre, vždyť Ryba smrdí od číny.). a kdo si pamatuje, co si před 40 let napsal/objevil a také pro jistotu zašifrovaně nahrál do cloudu jako zálohu, kdyby mu umřelo SSD. Samozřejmě ale v zašifrované formě.)

Mimochodem není bezpečnostní riziko vůbec používat svůj veřejný klíč (na to jsem se ptal již na začátku)?  není správné po vygenerování klíčů veřejný vystavit a dál ho já nepoužívat?Pak právě nepoznám,kterou zprávu jsem psal já a co někdo jiný. Okolo toho se to točí.

Re:Kryptografický problém
« Odpověď #6 kdy: 05. 02. 2019, 17:30:04 »
ty vlastne chces poslat spravu samemu sebe len v roznom case. Cize potrebujes dve sady klucov a postupovat ako napisal PaJaH

Jose D

  • *****
  • 893
    • Zobrazit profil
Re:Kryptografický problém
« Odpověď #7 kdy: 05. 02. 2019, 18:21:20 »
nejjednoduší by bylo použít Symetrický klíč
A proč? Realizace toho co chceš je triviální - prostě si sám sobě pošli podepsaný a zašifrovaný email.

alex6bbc

  • *****
  • 1 664
    • Zobrazit profil
    • E-mail
Re:Kryptografický problém
« Odpověď #8 kdy: 05. 02. 2019, 18:26:04 »
tak si to zasifuj verejnym klicem a dej na server.
odsifrovat to pujde jen tvym privatnim klicem.
No jsme skoro u cíle. Jak ale poznám, že dešifrovanou zprávu jsem psal skutečně já? Stejně tak ji mohl napsal kdo jiný, podepsat mým veřejným klíčem. Proto chci mít jistotu, že tu zprávu si nějak budu moc ověřit, že jsem ji psal já . (A to nemusím mít ani sklerozu, stačí třeba se vžít do roku 2050 a najít na internetu zprávu z roku 2011 ( již v té době mi jeho Smlouvy, kecy a a řeči a sliby a koblihy s zápachem řepkového oleje smrděly)podepsanou, že Babiš je gauner a chci mít já jistotu, že je to moje poznámka (samozrejmě ale zašifrovanou, protože, tou dobou zde asi zavede sociální skóre, vždyť Ryba smrdí od číny.). a kdo si pamatuje, co si před 40 let napsal/objevil a také pro jistotu zašifrovaně nahrál do cloudu jako zálohu, kdyby mu umřelo SSD. Samozřejmě ale v zašifrované formě.)

Mimochodem není bezpečnostní riziko vůbec používat svůj veřejný klíč (na to jsem se ptal již na začátku)?  není správné po vygenerování klíčů veřejný vystavit a dál ho já nepoužívat?Pak právě nepoznám,kterou zprávu jsem psal já a co někdo jiný. Okolo toho se to točí.

pripadne jestli jde vyrobit i verejny klic s heslem. pak to muzes pouzit jen ty.

Re:Kryptografický problém
« Odpověď #9 kdy: 05. 02. 2019, 18:44:08 »
Dotaz: Co když chci udělat následující věc: klasicky si něco zašifrovat a zveřejnit to. Ale s podmínkou, abych si mohl ověřit , že jsem to skutečně psal já (Například Zpráva "Soukup se chová jako blázen.").
Máte v tom zmatek. Šifruje se proto, aby něco zůstalo tajné – takže „zašifrovat“ a „zveřejnit“ jsou protiklady. K ověření, že jste něco psal vy, slouží elektronický podpis (vytváříte ho privátním klíčem, ověřuje se veřejným). Nejlepší by bylo napsat, o co se vlastně snažíte, co má být cílem.

Pokud chcete dnes udělat něco, abyste mohl zpětně dokázat „já už jsem tenkrát tvrdil tohle“, podepíšete otisk (hash) dokumentu (stejně se z praktických důvodů podepisuje jen otisk a ne celý dokument) a ten podpis s otiskem zveřejníte. Z hashe nikdo ten dokument nevytvoří, ale až vy budete chtít dokázat, že jste ten dokument měl už dnes, stačí ten dokument předvést. Ten, komu ho zpřístupníte, si z něj spočítá hash a bude vědět, že jste ten hash znal už dnes, tudíž už dnes musíte znát ten dokument. Samozřejmě musíte použít dostatečně silnou hashovací funkci, aby v době, kdy to budete chtít předvést, nebyla už prolomená. Případně byste ty hashe musel průběžně povyšovat.

Klasický podepsaný zašifrovaný dokument (třeba e-mail) se vytváří tak, že dokument nejprve elektronicky podepíšete a pak jej zašifrujete. Celé to dokáže dešifrovat jen příjemce a on pak ověří, že jste dokument podepsal vy. Opačný postup (nejprve zašifrovat a pak podepsat) by znamenal, že si kdokoli bude moci ověřit, že jste tu zašifrovanou zprávu podepsal vy, ale jenom příjemce jí bude moci rozšifrovat. Nenapadá mne, k čemu by to mohlo být dobré – leda byste chtěl důkaz proti sobě, že nějaké zprávy nějakému teroristovi jste poslal právě vy. Kdyby ten terorista nevydal privátní klíč, nikdo nerozšifruje, co jste posílal, ale byl by tam veřejný alespoň ten váš podpis.

Zašifrovat zprávu, pak to zveřejnit(například do cloudu, abych si to mohl přečíst kdykoli), zároveň, ale aby zprávu si nemohl přečíst nikdo jiný než já. Zároveň ale abych si já sám mohl ověřit, že tu zprávu jsem psal já a né někdo jiný (protože pokud někdo vytvoří zprávu, podepíše ji mým veřejným klíčem(může kdokoli) a dá ji na cloud, já pak nepoznám, jestli jsem ji třeba psal já - to je to důležité). Jde to řešit asymtrickou šifrou (kombinací veřejného a soukroméno klíče)?
Takže nechcete zveřejňovat zprávu, ale zašifrovanou zprávu. To je dost podstatný rozdíl. Tak to uděláte úplně stejně, jako kdybyste jí posílal někomu jinému, akorát na místo adresáta dosadíte sám sebe. Takže ji nejprve podepíšete svým privátním klíčem, a následně zašifrujete svým veřejným klíčem. Pokud budete používat klíče dle PKI a best-practice, budou to různé dvojice klíčů – první určená jen pro podpisy, druhá pro šifrování. Ale technicky to jde udělat i s jednou sadou klíčů.

Re:Kryptografický problém
« Odpověď #10 kdy: 06. 02. 2019, 10:31:44 »
protože pokud někdo vytvoří zprávu, podepíše ji mým veřejným klíčem(může kdokoli) a dá ji na cloud, já pak nepoznám, jestli jsem ji třeba psal já

Šifruje se veřejným klíčem příjemce (ve Vašem případě jste to Vy sám). Zašifrovat může kdokoliv.
Odšifruje se soukromým klíčem - odšifrovat může jen příjemce (jen Vy).

Podpis funguje přesně opačně:

Podepisuje se soukromým klíčem - podepsat můžete jen Vy.
Podpis se ověřuje veřejným klíčem - ověřit může kdokoliv.

Re:Kryptografický problém
« Odpověď #11 kdy: 07. 02. 2019, 19:23:03 »
V první řadě bych se zeptal, jestli se chcete dozvědět, jak to funguje, nebo jestli chcete šifrování a autentizaci. Radši bych totiž sáhl po hotovém řešení, jako třeba GnuPG. V kryptografii je dost případů, kdy člověk neví, že neví. A nejhorší na tom je, že to narozdíl od mnoha jiných případů není na první pohled vidět – vše funguje vpořádku. Až na to, že pak někdo zjistí, že toho funguje víc, než by mělo.

Dále je potřeba si ujasnit, jestli vůbec potřebujete asymetrickou kryptografii. Pokud ne, vyhněte se těmto komplikacím. Asymetrická kryptografie je pomalejší, takže se typicky kombinuje se symetrickou. Pak je ale nutné zvládnout správně použít obojí. Asymetrická kryptografie je také méně odolná kvantovým počítačům. V neposlední řadě tu bude asi komplikovanější password-based encryption.

Je dobře, že přemýšlíte nad autentizací – ověřením, že jste skutečně autorem obsahu. V asymetrické kryptografii na to slouží podpis, v symetrické tzv. MAC. Rozdíl je podobný jako u šifrování – na ověření MACu potřebujete stejný klíč jako na jeho vytvoření. A co se týče pořadí, šifrování a autentizace – vězte, že se u symetrických šifer používají jiné postupy než u asymetrických.

Ano, i u symetrické kryptografie potřebujete autentizovat. Pokud útočník nemá klíč, sice nemůže vytvořit zprávu from scratch, ale může (někdy i celkem snadno) zkoušet upravovat existující – vizte malleability. To někdy vede k zajímavým útokům, možná si vybavíte POODLE na SSL3.

Pokud se to budete snažit implementovat. Vlastními silami, čeká vás spousta dalších úskalí, například:

* Jaký zvolit mode of operation?
* Jak zvolit inicializační vektor?
* Když potřebujete náhodná čísla (což se stane velmi snadno), jak je správně vygenerovat?
* Když spočítám MAC pro ověření, jak ji správně porovnat? (Vizte timing attack.)
* U šifrování heslem: Jak správně odcodit klíč z hesla?
* Když potřebujeme dva klíče (jeden pro MAC a druhý pro šifru), lze použít tvakrát tentýž, nebo dva různé? Kde je vezmu?
* Seznam nemusí být kompletní.

Jinak i pokud použijete hotové řešení, nabízí se pár otázek:

* Pokud jde o soubor, jehož obsah se může měnit, jak si můžete být jisti, že máte tu poslední verzi?
* Pokud takovýchto souborů máte více, nemůže je útočník třeba prohodit?
* Pokud takovýchto souborů máte více a nějak spolu souvisejí, že jak zjistíte, že třeba jeden zmizel nebo jeden je starší a další novější?
* Seznam nemusí být kompletní.