From 0846d28b35c85f0db8347ff033ee8dcdb57636fb Mon Sep 17 00:00:00 2001 From: MinaMan <127234894+chad11111@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:54:45 +0000 Subject: [PATCH 1/2] refactor --- RFCs/rfc-0010-zk-passport.md | 147 +++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 RFCs/rfc-0010-zk-passport.md diff --git a/RFCs/rfc-0010-zk-passport.md b/RFCs/rfc-0010-zk-passport.md new file mode 100644 index 0000000..9197782 --- /dev/null +++ b/RFCs/rfc-0010-zk-passport.md @@ -0,0 +1,147 @@ +## RFP: ZKPassport + +### Abstract + +This proposal introduces a standard protocol for generating identity-related attestations from a Mina wallet. It aims to enhance the trust and integrity of digital identity systems by allowing users to prove the validity of their identity attributes without revealing the underlying data. This approach not only safeguards user privacy but also provides a robust framework for decentralized identity verification, making it applicable across various domains such as finance, healthcare, and online services. Through the implementation of ZKPassport, Mina wallet users can achieve higher levels of security and privacy in their digital interactions while ZKApps achieve a higher level of defense against sybil attacks and the ability to make their applications compliant with local laws. + +### How will users provide the correct documents? + +Most modern passports are Biometric passports or ePassports and contain a chip that can be scanned with NFC. These passports contain information regarding the passport such as country, age, date of birth, etc. + +When scanned via a trusted mobile app, users can confidently produce a ZK Proof attesting to specific data on their passport chip. To gain a better understanding of which data can be accessed, please read the [ICAO specification](https://www.icao.int/publications/pages/publication.aspx?docnum=9303). Additionally, the public keys for checking the validity of this data can be found [here](https://download.pkd.icao.int/). + +It's important to note that different issuer countries use different signature algorithms. + +### Specification + +Generating a proof will involve multiple steps: + +#### Register Circuit + +The register circuit is used for the following: + +- Verify the signature of the passport +- Verify that the public key which signed the passport is part of the registry Merkle tree (a check of the Merkle roots will be performed on-chain) +- Generate commitment = H (secret + passportData + some other data) + +Once the proof is generated, the user can register on-chain and their commitment will be added to the Lean Merkle tree. + +As the hash function and signature algorithm differ upon the issuer country, there will be a need for a single circuit which must support many different fucntions or sperate circuits per country. However one verifier for each register circuit will be deployed on-chain, all of them committing to the same Merkle tree. + +### Storing the Merkle Tree Using Offchain Storage + +To ensure the Merkle tree containing key-value pairs of users' public keys and commitments is publicly accessible, we must maintain the following: + +1. Very high uptime +2. Free read/write access +3. Decentralization to ensure trustlessness and resilience + +We can achieve this using [Mina's Offchain Storage API](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/offchain-storage). Below is a solution utilizing this API to store and manage the Merkle tree. + +#### Utilizing Offchain Storage + +1. **Set up Offchain Storage**: + First, import the necessary components from the `o1js` library. + + ```javascript + import { Experimental } from 'o1js'; + + const { OffchainState, OffchainStateCommitments } = Experimental; + ``` + +2. **Define Offchain State Configuration**: + Define the configuration for the Offchain state, including the key-value map for the Merkle tree. + + ```javascript + const offchainState = OffchainState({ + merkleTree: OffchainState.Map(PublicKey, Commitment), + }); + + class StateProof extends offchainState.Proof {} + ``` + +3. **Set up the Smart Contract**: + Initialize the smart contract and assign it to the Offchain storage. This will compile the recursive Offchain zkProgram in the background and assign the Offchain state to the smart contract instance. + + ```javascript + let contract = new MyContract(contractAddress); + offchainState.setContractInstance(contract); + + // Compile Offchain state program + await offchainState.compile(); + // Compile smart contract + await MyContract.compile(); + ``` + +4. **Settle Offchain State**: + To settle the offchain state, generate an Offchain storage proof and provide it to the smart contract's `settle` method. + + ```javascript + let proof = await offchainState.createSettlementProof(); + + await Mina.transaction(sender, () => { + // Settle all outstanding state changes + contract.settle(proof); + }) + .sign([sender.key]) + .prove() + .send(); + ``` + +5. **Configure Smart Contract**: + The smart contract requires a field containing a commitment to the offchain state. This field is used internally by the OffchainState methods and should not be written to by your smart contract logic. + + ```javascript + class MyContract extends SmartContract { + @state(OffchainStateCommitments) offchainState = State( + OffchainStateCommitments.empty() + ); + + @method + async settle(proof: StateProof) { + await offchainState.settle(proof); + } + } + ``` + +6. **Using Offchain Storage**: + Now, developers can utilize Offchain storage in any of their smart contract methods. Below is an example of how to use the Offchain storage to update the Merkle tree. + + ```javascript + class MyContract extends SmartContract { + @method + async updateMerkleTree(publicKey: PublicKey, commitment: Commitment) { + // Retrieve the current state of the Merkle tree entry for the public key + let commitmentOption = await offchainState.fields.merkleTree.get(publicKey); + + // Update the Merkle tree with the new commitment + offchainState.fields.merkleTree.update(publicKey, { + from: commitmentOption, + to: commitment, + }); + } + } + ``` + + +### Disclose Circuit + +The disclose circuit is used for the following: + +- Verify that a user knows a secret, e.g., they can reconstruct one leaf of the Merkle tree (a check of the Merkle roots will be performed on-chain) +- Verify passport expiry +- Perform a range check over the age of the user +- Multiply the output by an input bitmap to allow the user to disclose only what they want to disclose +- Pack the final output + +Any application that wants to use Proof of Passport can actually build its own disclose circuit. + +### Circuit Specification + +### Use Case Scenarios + +1. **Financial Services**: A user can prove their identity to a bank without revealing their actual age, nationality, or other sensitive data, thereby complying with KYC requirements while maintaining privacy. + +2. **Healthcare**: Patients can prove their eligibility for age-specific healthcare services without disclosing their exact date of birth. + +3. **Online Services**: Users can verify their identity to access age-restricted online services without exposing their full identity details. From 0bef2c576e8043c8a4a8b29a0e0d18f0f9d4da70 Mon Sep 17 00:00:00 2001 From: MinaMan <127234894+chad11111@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:31:32 +0000 Subject: [PATCH 2/2] refactor --- RFCs/images/what_can_be_proven_passport.png | Bin 0 -> 81904 bytes RFCs/rfc-0010-zk-passport.md | 108 ++++---------------- 2 files changed, 18 insertions(+), 90 deletions(-) create mode 100644 RFCs/images/what_can_be_proven_passport.png diff --git a/RFCs/images/what_can_be_proven_passport.png b/RFCs/images/what_can_be_proven_passport.png new file mode 100644 index 0000000000000000000000000000000000000000..db729e768747e27b64c4686d73af77e823d77ae4 GIT binary patch literal 81904 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 i)aViUmzru}{r?B4`j;X~DWqKh0000hGw|{ literal 0 HcmV?d00001 diff --git a/RFCs/rfc-0010-zk-passport.md b/RFCs/rfc-0010-zk-passport.md index 9197782..5625ca5 100644 --- a/RFCs/rfc-0010-zk-passport.md +++ b/RFCs/rfc-0010-zk-passport.md @@ -12,6 +12,14 @@ When scanned via a trusted mobile app, users can confidently produce a ZK Proof It's important to note that different issuer countries use different signature algorithms. + +### What can be proven ? + +All the following properties can be attested for with expection of any fingerprints, iris scans or any biometric data. Its even possible to attest for the passport photo. + +![alt text](./images/what_can_be_proven_passport.png) + + ### Specification Generating a proof will involve multiple steps: @@ -28,7 +36,7 @@ Once the proof is generated, the user can register on-chain and their commitment As the hash function and signature algorithm differ upon the issuer country, there will be a need for a single circuit which must support many different fucntions or sperate circuits per country. However one verifier for each register circuit will be deployed on-chain, all of them committing to the same Merkle tree. -### Storing the Merkle Tree Using Offchain Storage +##### Storing the Merkle Tree Using Offchain Storage To ensure the Merkle tree containing key-value pairs of users' public keys and commitments is publicly accessible, we must maintain the following: @@ -38,92 +46,6 @@ To ensure the Merkle tree containing key-value pairs of users' public keys and c We can achieve this using [Mina's Offchain Storage API](https://docs.minaprotocol.com/zkapps/writing-a-zkapp/feature-overview/offchain-storage). Below is a solution utilizing this API to store and manage the Merkle tree. -#### Utilizing Offchain Storage - -1. **Set up Offchain Storage**: - First, import the necessary components from the `o1js` library. - - ```javascript - import { Experimental } from 'o1js'; - - const { OffchainState, OffchainStateCommitments } = Experimental; - ``` - -2. **Define Offchain State Configuration**: - Define the configuration for the Offchain state, including the key-value map for the Merkle tree. - - ```javascript - const offchainState = OffchainState({ - merkleTree: OffchainState.Map(PublicKey, Commitment), - }); - - class StateProof extends offchainState.Proof {} - ``` - -3. **Set up the Smart Contract**: - Initialize the smart contract and assign it to the Offchain storage. This will compile the recursive Offchain zkProgram in the background and assign the Offchain state to the smart contract instance. - - ```javascript - let contract = new MyContract(contractAddress); - offchainState.setContractInstance(contract); - - // Compile Offchain state program - await offchainState.compile(); - // Compile smart contract - await MyContract.compile(); - ``` - -4. **Settle Offchain State**: - To settle the offchain state, generate an Offchain storage proof and provide it to the smart contract's `settle` method. - - ```javascript - let proof = await offchainState.createSettlementProof(); - - await Mina.transaction(sender, () => { - // Settle all outstanding state changes - contract.settle(proof); - }) - .sign([sender.key]) - .prove() - .send(); - ``` - -5. **Configure Smart Contract**: - The smart contract requires a field containing a commitment to the offchain state. This field is used internally by the OffchainState methods and should not be written to by your smart contract logic. - - ```javascript - class MyContract extends SmartContract { - @state(OffchainStateCommitments) offchainState = State( - OffchainStateCommitments.empty() - ); - - @method - async settle(proof: StateProof) { - await offchainState.settle(proof); - } - } - ``` - -6. **Using Offchain Storage**: - Now, developers can utilize Offchain storage in any of their smart contract methods. Below is an example of how to use the Offchain storage to update the Merkle tree. - - ```javascript - class MyContract extends SmartContract { - @method - async updateMerkleTree(publicKey: PublicKey, commitment: Commitment) { - // Retrieve the current state of the Merkle tree entry for the public key - let commitmentOption = await offchainState.fields.merkleTree.get(publicKey); - - // Update the Merkle tree with the new commitment - offchainState.fields.merkleTree.update(publicKey, { - from: commitmentOption, - to: commitment, - }); - } - } - ``` - - ### Disclose Circuit The disclose circuit is used for the following: @@ -140,8 +62,14 @@ Any application that wants to use Proof of Passport can actually build its own d ### Use Case Scenarios -1. **Financial Services**: A user can prove their identity to a bank without revealing their actual age, nationality, or other sensitive data, thereby complying with KYC requirements while maintaining privacy. +### Residency Verification for Regional Services + +| Aspect | Description | +|------------------|-------------| +| **Description** | A zkApp wants a user to prove they reside in a specific region to access local government services or region-specific content. | +| **Requirements** | An implementation of zkPassport in the Attestation API Standard. | +| **Expected Outcome** | Users can prove their residency without revealing their exact address or any other personal information. | +| **Impact Analysis** | This would facilitate the delivery of region-specific services like voting in local elections, accessing regional healthcare, or streaming region-locked content, while maintaining user privacy. | -2. **Healthcare**: Patients can prove their eligibility for age-specific healthcare services without disclosing their exact date of birth. -3. **Online Services**: Users can verify their identity to access age-restricted online services without exposing their full identity details. +The ZK Passport attestaion can also be combine with other sorts of proofs to create more complex attestations. \ No newline at end of file