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).