The requirement is we want to generate a bunch of keys, and we need a way to validate if this key is generated by us. My suggestion is to generate a UUID, do a HMAC use a secret key on the UUID, then the UUID+HMAC result should be the key. The problem here is UUID+HMAC is too long, so we can use only part of them as key.
Meanwhile, my colleague suggests another way is to generate a UUID, do an AES on it, use the encrypted data as a key, he thinks the encrypted data can not be faked, but I am afraid this is not a safe way. As we don't do any other validation here.
So the question is: is it possible to fake an AES-encrypted data, that can be decrypted by a given secret key? If it is not possible to fake an AES-encrypted data, which one should we use? HMAC or AES?
Performance should be considered, because we have about 1 billion requests to handle every day.