# Derived private identifiers Simple deterministic unique ID generation based on a private key without leaking information and authorizing a public key based on a private nonce and the original private key. Making 'sure' that you can only authorize yourself. ``` pragma circom 2.0.2; include "../node_modules/circomlib/circuits/poseidon.circom"; template PrivateAccountDerivation() { signal input website; signal input nonce; signal input privateKey; //Output that is always unique, but doesn't leak identity information. signal output uniqueID; //Public key used for further communication signal output authorizedPublicKey; component hashed = Poseidon(2); hashed.inputs[0] <== website; hashed.inputs[1] <== privateKey; component newKey = Poseidon(2); newKey.inputs[0] <== nonce; newKey.inputs[1] <== privateKey; authorizedPublicKey <== newKey.out * newKey.out; //Implement proper private key => pub key generation //TODO identity credential verification etc. uniqueID <== hashed.out; } component main{public [website]} = PrivateAccountDerivation(); ``` Related article: https://ovanwijk.medium.com/derived-private-identifiers-42837192c036