# 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