Individual Transaction Key (ITK) Creation
Protocol for deriving unique transaction keys from MVKs and timestamps for deposits and claims
Protocol Description
For each transaction, a unique Individual Transaction Key (ITK) is derived from the relevant MVK and a high-resolution timestamp .
Deposit ITK
Claim ITK
Key Derivation Process
For Deposits
- Input: Solana MVK (field element)
- Timestamp Components: Year, Month, Day, Hour, Minute, Second
- Hash Function: Poseidon hash function
- Output: Deposit ITK
For Claims
- Input: Umbra address MVK (field element)
- Timestamp Components: Year, Month, Day, Hour, Minute, Second
- Hash Function: Poseidon hash function
- Output: Claim ITK
Timestamp Resolution
The high-resolution timestamp ensures:
- Uniqueness: Each transaction gets a unique ITK
- Time-Bound: ITKs are tied to specific moments in time
- Public Input: Timestamp is publicly observable on-chain
- Granularity: Second-level precision prevents collisions
Transaction Types
Deposit Transactions
- Use the Solana MVK
- Generate deposit ITK
- Enable linking deposits to the user's primary Solana address
Claim Transactions
- Use the Umbra address MVK
- Generate claim ITK
- Enable linking claims to the specific Umbra address
Security Analysis
Security Proof: Security of ITKs
Goal: An ITK must only be derivable by the holder of the corresponding MVK.
Assumption: Poseidon-as-a-PRF.
Argument: The MVK serves as the secret key for the PRF, and the public timestamp is the input. An on-chain observer cannot compute the ITK without the MVK.
Properties
- MVK-Dependent: Only derivable by holders of the corresponding MVK
- Time-Bound: Tied to specific transaction timestamps
- Unique: Each transaction produces a unique ITK
- Unlinkable: Without the MVK, ITKs appear random
- Transaction-Specific: Different for deposits vs claims
MVKs for Individual Umbra Addresses
Protocol for deriving Master Viewing Keys for each individual Umbra address using Poseidon hash with index-based domain separation
Linker and Memo Key Derivation
Protocol for deriving linker and memo keys from Individual Transaction Keys using domain-separated PRF calls