Лучший способ защитить программу от взлома - это зделать ее бесплатной

.
А если серьезно, то программа должна стоить дешевле чем ее взлом, и в итоге если она будет очень полезной и востребованной массой народа ее взломают 100%.
Ну а что по поводу защиты USB ключ это то что надо, возложить на ключ часть вычислений результаты которых будут вычеслятся в нутри ключа тоже очень удачный вариант защиты но не 100%.
Только есть всякие трудности с изготовлением, что бы он выглядел как брилок будет дороговато стоить, а если их надо зделать всего пару штук это вобще не реально.
P.S. Не бывает 100% защит. 100% защита стоит бесконечно денег.