Diskuze: Šifrovanie

Ostatní jazyky Delphi Delphi (Pascal) Šifrovanie

Avatar
expoox
Redaktor
Avatar
expoox:

Caute, snazim sa napisat neaku poriadne premakanu dynamicku sifru a neviem ako na to, napada mi len miliony vnorenych caseov ale to mi nepride ako profesionalne riesenie, neviete ako sa taketo veci robia ? Uz davnejsie som skusal nieco jednoduche ale tam bol ten problem ze som to mal na urcity pocet znakov a ja chcem taku na nekonecne vela znakov, neviete mi pomoct ?

dakujem

 
Odpovědět 19.4.2013 15:30
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

K čemu case? Můžeš posouvat znaky v asii tabulce, to je jako šifra dostačující, když máš dlouhé heslo - http://www.itnetwork.cz/…namovi-sifry

Nahoru Odpovědět 19.4.2013 15:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
expoox
Redaktor
Avatar
expoox:

ja viem ale chcem nieco zlozite a premakane, tie moje starsie pokusy boli zalozene na tom ze napr ak je 3. znak v intervale A..F tak posunie 7 pismeno o 3 miesta atd... len toto mi pride zbytocne zlozite, musi to ist neak efektivnejsie

 
Nahoru Odpovědět 19.4.2013 15:54
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

Když si tvůj program dekompiluju, tak poznám jak to posouvá, takže nic moc. Když budeš sám něco vymýšlet, skončí to nekvalitní šifrou, spíše si najdi něco hotového, algoritmů je plno a i těch, co uspokojí tvé nároky.

Nahoru Odpovědět 19.4.2013 15:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na expoox
Kit:

Vlastní šifrování je dobré jen jako programátorské cvičení, ale pro reálné použití je vhodnější sáhnout po nějakém hotovém programu.

Nahoru Odpovědět 19.4.2013 16:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
expoox
Redaktor
Avatar
expoox:

no len mne islo hlavne o nieco vlastne, nerobim to zase pre adobe zeby som sa bal kadeakej dekompilacie ... prave ma napadlo ze by som kazdy znak teda napr cislo 0 = #48 previedol do binarnej sustavy teda 110000 a otocil ju bud komplet alebo len vymenil prve tri cisla za druhe tri ... je to blbost ?

 
Nahoru Odpovědět 19.4.2013 16:12
Avatar
expoox
Redaktor
Avatar
Odpovídá na Kit
expoox:

no a presne o to mi ide ;)

 
Nahoru Odpovědět 19.4.2013 16:15
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

Opravdu nemá smysl nic vymýšlet, existují hotové a česky popsané algoritmy, na kterých se vyblbneš víc než dost :) Sám se v tom vůbec nevyznám, ale vím, že do toho trochu dělá Martin Dráb.

Nahoru Odpovědět 19.4.2013 16:18
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na expoox
Kit:

Zkus invertovat třeba druhý nejméně významný bit a dosáhneš podobného výsledku. Bude to sice připomínat šifru, ale dešifrování bude stejně lehké/obtížné jako u tvého algoritmu.

Nahoru Odpovědět 19.4.2013 16:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
expoox
Redaktor
Avatar
Odpovídá na David Čápka
expoox:

este raz, ako pisal Kit, to sifrovanie mi treba do mojho smiesneho programu v ktorom mi ide hlavne o precvicovanie programovania a asi to nebude precvicovanie ked okopirujem niekoho algoritmus

 
Nahoru Odpovědět 19.4.2013 16:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

Ono implementovat vymyšlený algoritmus není tak lehké jak si myslíš ;)

Nahoru Odpovědět 19.4.2013 16:27
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
expoox
Redaktor
Avatar
Odpovídá na David Čápka
expoox:

no toho som si vedomy a prave o to mi ide, pohrat sa s tym

 
Nahoru Odpovědět 19.4.2013 16:29
Avatar
Luboš Běhounek (Satik):

Vlastní šifra má tu výhodu, že jí nikdo nezná, takže má menší šanci, že ji rozluští, pokud vidí jen zašifrovaná data (pokud je dobře napsaná :) ).

Nejlepší je pár šifer zkombinovat - třeba prohazovat pořadí znaků, XORovat celý text s nějakým (třeba i pevně daným klíčem), binární hrátky z bity atd. a nikdo nemá šanci data rozluštit, pokud nemá přístup přímo k algoritmu.

Nahoru Odpovědět 19.4.2013 16:54
:)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
Kit:

Kvalitní šifry používají veřejné algoritmy. Bezpečnost je tak soustředěna v klíči. Utajovat algoritmy nemá smysl.

Nahoru Odpovědět  +1 19.4.2013 17:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Přesně tak, lepší je naučit se kvalitní šifru a pochopit problematiku než patlat něco, co má úroveň spíše táborové hry.

Nahoru Odpovědět 19.4.2013 17:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

Co se týče tvoření nových šifer, souhlasím s sdracem, popř. s Kitem. Sice se šifrováním nezabývám zas tak aktivně, ale pár semestrů ve škole a jeden online kurz (snad je to tento https://www.coursera.org/course/crypto) za sebou mám. Tudíž se odvážím dát sem svůj názor a svoje pozorování.

Spíš než vymýšlet nové šifry takhle "z fleku" bych doporučoval si udělat třeba ten online kurz (zvláště ty programovací úkoly). Člověk pak zjistí, že vymýšlení nových šifer (a obecně kryptografických primitiv) není vůbec žádná legrace a že to rozhodně dělat nechce. Existuje spousta druhů útoků a navrhnout šifru tak, aby proti nim byla imunní, je hodně těžké.

V základu je třeba nezapomínat na to, že šifrováním musí zmizet pokud možno všechny vlastnosti plantextu (například frekvence výskytu jednotlivých znaků). To znamená, že pokud se rozhodneš šifrovat tak, že budeš třeba plaintext XORovat čtyřbajtovou pevnou hodnotou, tak máš v podstatě ekvivalent Vigenerovy šifry, takže pokud bude nepřítel vědět něco o zašifrovaném plaintextu, může získat klíč celkem snadno. A dobrá šifra by měla zvládat i situace, kdy má útočník k dispozici k některým ciphertextům i plaintexty. Tato znalost mu nesmí umožnit odvodit použitý klíč.

Existují jakési "best-practices", jak nové šifry (a jiná primitiva) navrhovat. Příkladem je třeba Feistalova síť. O takových konceptech jsou dokázána i určitá teoretická tvrzení, která říkají, kdy je šifra na nich založená bezpečná. Ale ne že by to bylo nějak růžové. Obvykle ta tvrzení vypadají třeba takto: pokud je F funkce jistých vlastností, Feistalova síť o třech iteracích postavená na F dává takto bezpečnou šifru. Problém je ověřit, že funkce F má požadované vlastnosti.

Ono totiž vytvořit nějakou totálně zašmodrchanou funkci a prohlásit, že je to bezpečná šifra, není dobré, protože pokud je funkce hodně zašmodrchaná, nelze o ní příliš mnoho říci (nelze ji rozumně analyzovat). Tudíž šifra musí být takovou pseudonáhodnou permutací, jejíž předpis je dost složitý na to, aby se z dvojic (plaintext;cip­hertext) nedal vytáhnout klíč, ale dostatečně jednoduchý, aby se o té permutaci dalo alespoň něco říci. Hezkým příkladem na toto je podle mě Rijndael (AES); když se rozebere do detailů, tak to vypadá skoro na samé lineární transformace (které nejsou bezpečné), ale překvapivě stále odolává kryptoanalýze.

A i když používáš nějakou šifru (třeba AES), tak jej musíš používat správně, jinak může dojít k průšvihu, viz například Padding Oracle Attack či "relativně" nedávné problémy s šifrováním v XML. Než hned vymýšlet vlatní šifru, tak mi přijde lepší se naučit nějaké postupy používání šifer, které jsou považovány dnes za bezpečné.

Tajný algoritmus má právě tu nevýhodu, že musíš tajit nejen klíč, ale i tento algoritmus (který navíc může mít chybu) dá více práce. Krom toho pokud se rozhodneš takový algoritmus nějak distribuovat (bez zdrojových kódů), tak přesátá být tajný, protože reverzní inženýři ho zrekonstruují.

Samozřejmě můžeš argumentovat tím, že AES a další kryptografická primitiva jsou již dávno prolomena a muži a ženy z NSA si po večerech čtou tvoje šifrované emaily. Pořád mi ale přijde lepší, když tohle dělají jen v NSA, než aby to dělal "skoro" každý, protože jsem se zrovna špatně vyspal a můj supertajný a bezpečný algoritmus má sílu "šifry" ROT13. Krom toho existují i jiné způsoby, jak získat něčí tajemství. Nežijeme Matrixu, nejsme k počítačům přidrátováni, můžeme se po světě normálně pohybovat a násilnou či nenásilnou formou komunikovat s ostatními.

A víc mě teď nenapadá, co k tomu říci :-).

Nahoru Odpovědět  +2 19.4.2013 19:37
2 + 2 = 5 for extremely large values of 2
Avatar
TomBen
Redaktor
Avatar
TomBen:

Já jsem zkoušel vytvořit vlastní šifru a narazil jsem přesně na ty
problémy, které tu byly zmíněny. Na první pohled všechno v pohodě,
ale když útočník bude mít možnost algoritmus zkoušet a naplní ho
specifickým textem ( samé mezery, jeden znak, heslo stejné jako text.. )
vylezou některé nepříjemné vlastnosti jako houby po dešti.

Nahoru Odpovědět  +1 19.4.2013 20:07
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
David Čápka:

Díky za skvělou reakci a podklady, myslím, že expoox má nad čím přemýšlet :) AES vypadá určitě zajímavě, mohl bys ještě doporučit něco z těch jednodušších, co by mělo smysl použít?

Nahoru Odpovědět 19.4.2013 20:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na David Čápka
Martin Dráb:

Na implementaci mi přišla nejjednodušší RC4, ale to je už taková trochu nebezpečná šifra. Zatím nevím o tom, zda byla úplně prolomena (ale moje nevědění nic neznamená), ale rozhodně k tomu byly udělány velké kroky. Dost je toho na Wikipedii.

Nedávno jsem potřeboval šifrovat a řešil jsem to tím, že jsem si našel Cčkovou implementaci AESu, která se zdá býti blízká referenční implementace (tzn. měla by být dobře). A to prostě používám jako black box. I tak je s tím dost práce; pokud chceš šifrovat symetrickou šifrou plaintexty delší než velikost bloku (128 bitů u AESu), tak se za tímto účelem musí provádět speciální magie s názvem "Mód blokové šifry", což je způsob, jak zajistit, aby použití dané šifry bylo bezpečné i u zpráv delších než jeden blok. Implementace těchto módů je relativně jednoduchá (ale i tak bych doporučil se naučit spíš s nějakou knihovnou, kde už hotové jsou), takže se dá případně zvládnout. Příklady módů: CBC, CFB, OFB, CTR (můj nejoblíbenější). Všechny by měly být rozumně popsané na Wikipedii včetně jejich výhod a nevýhod.

Nahoru Odpovědět  +2 19.4.2013 20:49
2 + 2 = 5 for extremely large values of 2
Avatar
expoox
Redaktor
Avatar
expoox:

diky za napady ;) mam co robit cely tyzden :D

 
Nahoru Odpovědět 19.4.2013 22:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 20 zpráv z 20.