Hello all. Let's say that I have a fancy new program, and want to use the incredibly broken "key" system as a simple piracy detection mechanicism (i.e. enter your key to install the program). I want the keys to be able to be checked offline, so no random keys + "internet activation" here.
It's pretty much gaurenteed that if the program becomes popular, someone will just lift the key checker out of the code to release a keygen. To make their life harder, I want each upgrade I release to recheck the key with stricter rules, which should hopefully catch a lot of generated keys.
Obviously, I'm looking for a seried of functions f1(x)..fn(x) s.t. f1(x) exists in f2(x) exists in f3(x) . . . exits in fn(x). Also fn(x) has to be able to work in a modular space of about 36^32(a reasonable alphanumeric keyspace) with about a .0001% chance of a random key being a code, while f1(x) needs to let me assign at least 1M keys.
Now, how do I go about building this sort of function?
-Chu
P.S., this is purely theoritical. I'm a CS/MA major and was thinking about this problem for a bit, and no obvious solutions were coming to mind.
It's pretty much gaurenteed that if the program becomes popular, someone will just lift the key checker out of the code to release a keygen. To make their life harder, I want each upgrade I release to recheck the key with stricter rules, which should hopefully catch a lot of generated keys.
Obviously, I'm looking for a seried of functions f1(x)..fn(x) s.t. f1(x) exists in f2(x) exists in f3(x) . . . exits in fn(x). Also fn(x) has to be able to work in a modular space of about 36^32(a reasonable alphanumeric keyspace) with about a .0001% chance of a random key being a code, while f1(x) needs to let me assign at least 1M keys.
Now, how do I go about building this sort of function?
-Chu
P.S., this is purely theoritical. I'm a CS/MA major and was thinking about this problem for a bit, and no obvious solutions were coming to mind.