Licence aplikace v certifikačním klíči

exo

Licence aplikace v certifikačním klíči
« kdy: 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?
« Poslední změna: 18. 02. 2018, 17:44:25 od Petr Krčmář »


MarSik

Re:licence aplikace v certifikačním klíči
« Odpověď #1 kdy: 16. 02. 2018, 13:24:54 »
Co případy, kdy někdo vymění ten veřejný klíč? Pak si totiž podepíše cokoliv.

exo

Re:licence aplikace v certifikačním klíči
« Odpověď #2 kdy: 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.

Sten

Re:licence aplikace v certifikačním klíči
« Odpověď #3 kdy: 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.

exo

Re:licence aplikace v certifikačním klíči
« Odpověď #4 kdy: 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.


MarSik

Re:licence aplikace v certifikačním klíči
« Odpověď #5 kdy: 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.

xxx

Re:licence aplikace v certifikačním klíči
« Odpověď #6 kdy: 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.

MarSik

Re:licence aplikace v certifikačním klíči
« Odpověď #7 kdy: 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.

exo

Re:licence aplikace v certifikačním klíči
« Odpověď #8 kdy: 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.

Petr

Re:licence aplikace v certifikačním klíči
« Odpověď #9 kdy: 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.

Lol Phirae

Re:licence aplikace v certifikačním klíči
« Odpověď #10 kdy: 16. 02. 2018, 16:46:19 »
Stejně ti to cracknou.

dw

Re:licence aplikace v certifikačním klíči
« Odpověď #11 kdy: 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...

dw

Re:licence aplikace v certifikačním klíči
« Odpověď #12 kdy: 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.

Re:licence aplikace v certifikačním klíči
« Odpověď #13 kdy: 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).

exo

Re:licence aplikace v certifikačním klíči
« Odpověď #14 kdy: 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.