Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: exo 16. 02. 2018, 13:10:21

Název: Licence aplikace v certifikačním klíči
Přispěvatel: exo 16. 02. 2018, 13:10:21
Ahoj.

Je možné zabezpečit aplikaci zašifrovaným licenčním souborem?

Představa je taková, že každý kdo chce spustit aplikaci musí mít na disku zašifrovanou licenci. Licenci budu generovat samozřejmě klasickým způsobem.

Vygeneruju licenci, zašifruju ji privátním klíčem. Aplikace (kterou chci tímto postupem chránit) bude mít v sobě natvrdo řekněme ve stringové hodnotě uložený veřejný klíč, kterým licenci otevře a ověří její pravost.

Je mi jasné, že tento princip je funkčně v pořádku. Nevím ale jak je to s prolomením takového postupu...

Neřešme teď, že kdo si zkopíruje celou aplikaci i s licencí, bude mít vše k tomu co potřebuje a bude ji moc použít kdy chce, kde chce a jak chce.

Jde mi o to, zda je možné nějak vyrobit falešný certifikát na základě veřejného klíče uloženého v aplikaci, a nebo je to nemožné?

Certifikáty do úplných detailů neznám a netuším jestli je takový postup reálný nebo ne. Případně jestli prolomení potrvá roky, nebo je to otázkou pár hodin práce.

Dokážete mi poradit?
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: MarSik 16. 02. 2018, 13:24:54
Co případy, kdy někdo vymění ten veřejný klíč? Pak si totiž podepíše cokoliv.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: exo 16. 02. 2018, 13:39:58
Jako že disasemblne aplikaci, vymění veřejný klíč a znova ji zbuildí?
Ok, to je cesta, ale tu překazí příští update na novou verzi...

Tzn. s novou verzí bude muset postup znova opakovat (a nebo si nechat tu starou). Já ale budu vždy schopný po aktualizaci na novou verzi poznat, kdo je pravý uživatel s pravou licencí a kdo má falešnou licenci.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: Sten 16. 02. 2018, 13:44:56
Vypočítat soukromý klíč z veřejného, pokud použijete dostatečně moderní algoritmus, je práce na tisíce let i na superpočítači.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: exo 16. 02. 2018, 13:54:36
Děkuji za vysvětlení.
I když toto jsem tak trochu tušil.

Spíše mi jde o to, když obě strany umějí rozšifrovat komunikaci. Tedy jak ta privátní tak ta veřejná, jak se pozná, co bylo zašifrováno tou privátní stranou a co tou veřejnou.

Tzn. nelze vytvořit licenci a zašifrovat ji veřejným klíčem tak, že to bude vypadat jako zašifrované tím privátním? Že bych si díky veřejnému klíči vyrobil licencí jakou potřebuji a program to nepoznal?

To je pěkná blbost co? :-) Nějak to určitě poznat jde, jen mi uniká ten podkladový princip, takže se pro jistotu ptám, ať nevymyslím nějakou úplnou blbost než se pustím do bližšího pátrání jak to správně implementovat.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: MarSik 16. 02. 2018, 13:56:25
Jako že disasemblne aplikaci, vymění veřejný klíč a znova ji zbuildí?
Ok, to je cesta, ale tu překazí příští update na novou verzi...
Tzn. s novou verzí bude muset postup znova opakovat (a nebo si nechat tu starou).

Proč by to buildil? Ten klíč bude uložený jako nějaká sekvence bajtů a ty stačí přepsat v hex editoru (stejná délka). A když už bude vědět jak, tak to po další aktualizaci snadno udělá znovu (nebo nějakým crack nástrojem).

Já ale budu vždy schopný po aktualizaci na novou verzi poznat, kdo je pravý uživatel s pravou licencí a kdo má falešnou licenci.

Jak, když ten klíč bude podle aplikace platný? Samozřejmě, že se to dá ztížit, ale vždy se to dá obejít pokud ta aplikace nemusí být online a nese si ověřovací algoritmus s sebou.

Navíc nezapomínejte na nutnost podporovat legitimní změnu klíče z Vaší strany. Aplikace musí pořád fungovat i uživatelům, kteří mají licenci se starým podpisem.

Základní princip v kryptografii: Vše záleží jen na tom, jestli se útok vyplatí. Pokud ano, tak se cesta vždycky najde.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: xxx 16. 02. 2018, 13:57:05
Nikto nebude lamat kryptografiu, vymienat kluce atd. Len v kode vypne volanie tej kontroly. Skor ide o to, ako mu to stazit.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: MarSik 16. 02. 2018, 14:06:15
Spíše mi jde o to, když obě strany umějí rozšifrovat komunikaci. Tedy jak ta privátní tak ta veřejná, jak se pozná, co bylo zašifrováno tou privátní stranou a co tou veřejnou.

Nijak, pokud to umí obě strany, tak se jedná o symetrickou šifru.

Tzn. nelze vytvořit licenci a zašifrovat ji veřejným klíčem tak, že to bude vypadat jako zašifrované tím privátním? Že bych si díky veřejnému klíči vyrobil licencí jakou potřebuji a program to nepoznal?

To samozřejmě nejde, samotnou šifru pokládám za bezpečnou (pokud použijete rozumnou knihovnu). Lousknutí privátního klíče z veřejného je na dlouho...

Jenže existuje další spousta možností (jako výměna ověřovacího veřejného klíče), jak celý ten systém licencí napadnout i bez znalosti Vašeho privátního klíče. Říká se jim útok pomocí postranního kanálu. A je složité se proti nim bránit a přitom neomezit i legitimního uživatele.

To je pěkná blbost co? :-) Nějak to určitě poznat jde, jen mi uniká ten podkladový princip, takže se pro jistotu ptám, ať nevymyslím nějakou úplnou blbost než se pustím do bližšího pátrání jak to správně implementovat.

Princip: https://cs.wikipedia.org/wiki/Asymetrick%C3%A1_kryptografie

Nikto nebude lamat kryptografiu, vymienat kluce atd. Len v kode vypne volanie tej kontroly. Skor ide o to, ako mu to stazit.

Jde jen o to, jestli se to vyplatí cracknout, nebo ne. Těch možností "jak" je mnoho.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: exo 16. 02. 2018, 14:15:17
Děkuji moc za vaše připomínky.

Nechci vytvářet nějaký zcela neprůstřelný algoritmus. Spíše mi šlo o to,
a) aby se aplikace po internetu neválela zcela nezabezpečeně.
b) Aby se po světě netoulaly aplikace u kterých nebudu schopný zjistit zda jsem k nim vydal nebo nevydal klíč. Tzn, když si stávající (cracknutý) uživatel zaktualizuje aplikaci a stáhne si legálně novou verzi (necracknutou), abych byl schopný zjistit že nemá platnou licenci a upozornit jej na to.

Jinak je mi jasné že každý mechanizmus se dá obejít, takže do toho nechci investovat moře "zbytečného" času. Jde mi o jakousi základní verzi ochrany, tak aby si neuměl vyrobit licenci kde kdo.

Stačí mi když bude jedinou možností jak nelegálně použít aplikaci to, že si ji bude muset stáhnout cracknutou někde z neoficiálního webu. Případně ji bude muset použít s certifikátem někoho jiného.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: Petr 16. 02. 2018, 16:23:27
Licenci neni nutne vubec sifrovat protoze udaje v ni obsazene nejsou tajne. Aplikace potrebuje overit autenticitu a k tomu slouzi elektronicky podpis. Licencni soubor je potreba podepsat privatnim klicem a v aplikaci overovat platnost podpisu verejnym klicem v ni obsazenym.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: Lol Phirae 16. 02. 2018, 16:46:19
Stejně ti to cracknou.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: dw 16. 02. 2018, 18:13:12
Vykasli sa na to a vydaj to opensource, si na roote... Ak predsa len nie, tak co by ta aplikacia mala robit? Ak sa tam pouzivaju udaje jedinecne pre uzivatela tak naviaz licenciu na ne... ak tym padom nebude mozne zmenit unikatne udaje tak to ludia kopirovat nebudu...
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: dw 16. 02. 2018, 18:19:55
Btw, ty si to asi myslel tak ze vyrobis licenciu a PODPISES ju sukromnym klucom. Potom samozrejme pojde overit ci podpis zodpoveda obsahu licencie oproti verejnemu klucu.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: Ondrej Nemecek 16. 02. 2018, 19:54:20
Bez nějaké online funkcionality je to ale celé skoro na nic, skutečně stačí ten klíč zkopírovat a vy se o tom stejně nedozvíte. Trochu lepší bude, pokud klíč odvodíte z hardwarových parametrů počítače u zákazníka (max adresa, cpuid + pár dalších parametrů) a budete kontrolovat, že program běží stále na tom stejném hardware, ke kterému byl vydán. Budete tedy vydávat klíč teprve na základě údajů, které vám zákazník pošle. Pokud dojde ke změně hardware, bude muset zákazník dostat nový klíč. Aby klíč zkopíroval, musí nasimulovat stejný hardware, což je o dost těžší, anebo musí pozměnit v programu tu funkčnost, což je také těžšší než pouhé kopírování.

A naopak - pokud tam bude online funkcionalita, pak jen stačí, aby aplikace posílala ten klíč k ověření a vy abyste ho online ověřil, takže pak nemusí být v aplikaci ani samotný ověřovací algoritmus. Funkčnost bude podobná, jako při přihlášení heslem, akorát uživatel heslo (klíč) nebude ručně zadávat. Na serveru klíč ověříte vůči svojí databázi, kde zkontrolujete, zda byl tento klíč danému zákazníkovi vydán - budete ho muset nějak identifikovat (opět nějaký otisk, veřejná IP adresa apod.). Tady by musel zákazník podvrhnout váš ověřovací server, což je taky o trochu těžší. Neobvykle velké využití určitého klíče můžete na serveru taky detekovat, což je výhoda.

Otázka nicméně je, jestli se to celé vyplatí. Jednoduché varianty lze příliš snadno přelstít a zaručená ochrana asi vůbec neexistuje (přesvědčí mě někdo o alespoň teoretickém opaku?). Jsou knihovny, které většinu práce udělají za vás, ale stejně ... v čem vám to pomůže? Nejspíš chcete vědět, kolik instancí vaší aplikace se reálně používá a asi taky chcete zákazníky nějak smluvně vázat - a k tomu stačí licenční smlouva a nějaký jednoduchý sběr statistik o využívání programu (program bude posílat nějaké metriky někam na server). Tím možná zjistíte víc zajímavých informací a budete mít i právně větší jistotu pro případ sporu (pokud vám licenční smlouvu napíše specialista).

Takže nevím, zda má cenu se snažit udělat něco, co dobře ani udělat nejde (zaručená kontrola), nebo zda raději udělat dobře něco, co dobře udělat jde (smlouva+metriky).
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: exo 16. 02. 2018, 21:49:32
Btw, ty si to asi myslel tak ze vyrobis licenciu a PODPISES ju sukromnym klucom. Potom samozrejme pojde overit ci podpis zodpoveda obsahu licencie oproti verejnemu klucu.

Jo jo.. takto jsem to myslel.
Název: Re:licence aplikace v certifikačním klíči
Přispěvatel: exo 16. 02. 2018, 22:15:41
Pokud dojde ke změně hardware, bude muset zákazník dostat nový klíč. Aby klíč zkopíroval, musí nasimulovat stejný hardware, což je o dost těžší, anebo musí pozměnit v programu tu funkčnost, což je také těžšší než pouhé kopírování.

Tohle je postup který nemám příliš rád a nechci ho nikomu nabízet. Znám pár zákazníků, kteří mají zapnutý nějaký stoleý server jen proto, že na jiném stroji nedokážkou rozchodit klíčovou aplikaci kvlůli licenci. Pokud má někdo řádně zakoupenou aplikaci, měl by být schopný spustit ji kde se mu zamane.

Online to řešit nemůžu. Aplikace bude minimálně nějaký čas offline. Takže jediné co by přicházelo do úvahy by byl nějaký ticket s omezenou platností. Například 14 dnů během kterých by se pak musel počítač připojit a získat nový. Tím bych ale vyřadil offline servery, případně ty firemní, za firewally a v dmzktách. To se mi taky moc nechce, takto adminům komplikovat život.

Každopádně díky za návrhy.
Název: Re:Licence aplikace v certifikačním klíči
Přispěvatel: MarSik 19. 02. 2018, 13:16:26
Ještě máte jednu možnost. Zachytit ty případy, kdy to jde a) snadno (online statistiky) b) neomezí to legitimní uživatele. Potom můžete upozornit držitele licence třeba emailem a dát mu možnost licenci přegenerovat. Jakmile to udělá, hodíte tu původní na blacklist a aktualizaované verze ji už nepřijmou.

Podobný problém se řeší např u bezkontaktních jízdenek kombinaci s offline čtečkami.Nepustit do metra legitimního zákazníka je větší problém, než nechat jednoho člověka jet na černo. Ale sleduje se to a dá se to řešit transparentně na pozadí. Určité množství černých pasažérů bude a počítá se s tím.

Jak už jsem psal, celé je to o tom, jak moc znepříjemníte život legitimním uživatelům. HW tokeny (ať už USB nebo nějaký hash) jsou nepříjemné dost.
Název: Re:Licence aplikace v certifikačním klíči
Přispěvatel: j 19. 02. 2018, 18:42:28
...zašifruju ji privátním klíčem.

...Nevím ale jak je to s prolomením takového postupu...
Mno ... dovolim si te zaradit mezi tu skupinu lidi, ktera nevi, jak veci fungujou.

Mimochodem ta tvoje uberaplikace bude prodavana za aspon jednotky mega?

A ted k veci, vis jak se resi zcela libovolny zabezpeceni na tohle tema? Uplne jednoduse. Nekde v kodu budes mit if neco = ok else fail. A je uplne jedno v cem ten kod napises. Vysledkem bude, ze pokud to bude binarka, nekde uvnitr bude JE nebo JNE ... a libovolny "haxor" zmeni tuhle jedinou instrukci.

...Tzn, když si stávající (cracknutý) uživatel zaktualizuje aplikaci a stáhne si legálně novou verzi (necracknutou), abych byl schopný zjistit že nemá platnou licenci a upozornit jej na to.
...
Mnoo .. kolik ma tvoje firma rocniho obratu? To abych vedel kolik delaj ty 4% + samozrejme jeste par tr. cinu jako bonus.

Hele podobnejma vecma si prevazne a pouze nadelas do vlastniho hnizda. Protoze tvuj jeden, dva, mozna tri ... zakaznici te prijdou zcela osobne zaskrtit presne v okamziku, kdy jim ta tvoje appka odmitne fungovat s tim, ze nekde neco expirovalo, nebo knihovna kterou pouzivas se aktualizovala a uz nepodporuje algoritmus kterej pouzivas ...

Podivej se na to, jak se snazej chudinky vydavatele games ... a jedinej vysledek jejich snahy sou nasrani !!PLATICI!! zakaznici.

A vis o co se snaz naprosto nejvic? Abys vyrobil nejpiratenejsi aplikaci vubec. Az takovou budes mit, tak si nekoupis letadlo, protoze si koupis stat vcetne aerolinek.
Název: Re:Licence aplikace v certifikačním klíči
Přispěvatel: . 20. 02. 2018, 00:05:53
Neviděl bych to jako velký problém. Bavme se na rovinu, neznám mnoho firemních správců, kteří by byli schopni trasovat aplikaci. V té licenci mohou být povoleny jen některé vlastnosti, její kontrola může být odložena, takže neproběhne hned při startu. Každopádně to nijak platícího uživatele neomezí a pokud je v licenci uvedeno jméno (firma), které byla prodána, je kopírování licenčního souboru určitý problém i pro toho správce.

Není to žádné velké zabezpečení a určitě jde odstranit, ale většímu kopírování může zabránit.