In an application we need some way for a user to authenticate, but have the challenges of very restricted functions to use.
Each user has got a 16bit-number he can't change. We want to calculate some individual "secret" for some of the numbers that allow users to have higher access rights. The aim is to make it as hard as possible for other users to generate a valid secret for a different number even if they know some valid combinations. Brute forcing on the device itself would take ~10 seconds per try, so I think that won't be an issue.
We are only able to use basic mathematical and logical functions, XOR and Modulo and sine/cosine. Also the length of our integers are limited to a maximum of only 32bit.
We thought about some asymmetric signature that is easy to verify (for example Rabin), but it seems that 32bit are just too unsecure.
An alternative would be some kind of symmetrical mac. Would the best way be to implement some kind of own "mac" by implementing combinations of the usable functions? Or is there any better way?
I found this answer to a similar question, but don't really get why the mac solution isn't brute forcable offline. Is it because we suppose the attacker doesn't know that mac algorithm?