I am designing a service where each user has both a unique 256-bit private and public ID. These IDs should be derivable from one another, but only within the backend of my service (as to not expose the private IDs to other users). For this purpose, I am considering using AES with a key known only by my service, but this requires an IV for encryption, which is generally meant to be unique. Is this necessary for my use case? I've read that this is done so encrypting the same data twice does not result in the same ciphertext, but in my case this is exactly the necessary behavior. However, not knowing much about cryptography, I wonder whether there could be other issues with this, or if I can just set the IV to zero and call it a day?
Essentially, an attacker in this scheme is able to request an unlimited number of unique private IDs and get each one's corresponding public ID. Does my system remain secure in this scenario? Would a unique IV per key pair do anything to help here?
Also, if there are any other glaring issues with this scheme or better tools for the task than AES, please feel free to mention - I'd love to know about them!
Bonus context irrelevant to the question for those curious why I am doing this:
I want users to be able to interact with my service before signing-up. These users must still have an ID so resources they create can be associated with them. This ID will be stored as a cookie to mark them as the same user until sign-up. After sign-up, the ID is associated with their chosen authentication method which is required to continue being recognized as that user. However, until that point, their identity could be hijacked by anyone who knows their ID, which means I cannot use it in public URLs and such, hence the need for a public ID which is suitable for this purpose