# What is ID-Mask?

## App Overview

This app empowers users to create **zero-knowledge proofs (ZKPs)** about themselves—secure, privacy-preserving attestations that reveal nothing beyond the fact being proven.

Built with a focus on **client-side operations**, the app fetches personal data using **Smart-ID** directly in the browser. This data is then passed into **predefined zero-knowledge circuits** to generate cryptographic proofs entirely on the user's device.

{% hint style="info" %}
Currently only people from the Baltic states can produce proofs. Personal identification data is streamlined using [Smart-ID](https://www.smart-id.com/) app.
{% endhint %}

Users can store these proofs in their **Google Wallet**, **Apple Wallet**, or publish them on the **Mina Protocol L1** blockchain.

When needed, users present their proof via a **QR code**. The proof verifier sees only the specific fact (e.g., "I am over 18")—**no additional personal data is exposed**.

***

{% embed url="<https://youtu.be/EeZaGC74DDk?si=ZX6PJn3YUxqXwEdP>" %}

## Preventing Proof Sharing

A key challenge with zero-knowledge proofs is preventing them from being **shared and reused by others**. For example, someone could attempt to use their older sibling’s proof of age to falsely claim they are over 21.

To solve this, we use **active auth**. The app embeds a **passkey pair** into each proof at creation time. These passkeys are cryptographic credentials unique to the user and device.

Inside the zero-knowledge circuit, a **signature using this passkey pair** is verified. As a result, the **public key** (or a pointer to it) becomes part of the proof's **public output**.

When presenting a proof, the user must **sign a challenge using their passkey**. The proof consumer verifies this signature against the public key embedded in the proof, ensuring that:

* The presenter is the **same individual** who originally created the proof.
* The proof **has not been shared** or reused by anyone else.

This mechanism ensures that **proofs are bound to individuals** and cannot be transferred or misused by others.

***

## What Is a Proof?

A **proof** is a JSON object containing cryptographic evidence that a certain fact (e.g., being over 18) is true, without revealing any additional personal data.

Each proof includes:

* `publicInput`: The value being proven (e.g., `"5"` means "prove age ≥ 5").
* `publicOutput`: Public values that allow anyone to verify the proof.
* `proof`: The actual zero-knowledge proof string.
* `maxProofsVerified`: Currently unused (`0` by default).

### Example Proof of age with explanation

```js
{
  "publicInput": ["5"],              // Proving: age ≥ 5
  "publicOutput": [
    "5",                             // [0] Years to prove
    "20250525",                      // [1] Proof creation date (YYYYMMDD)
    "80987473785...969161318090",    // [2–3] Mina wallet public key (split into two parts)
    "0",                                            
    "14787152154564119254483407",    // [4–6] Passkey public key (x-coordinates)
    "63391986999191009329240727",
    "15785887159263306888538961",                    
    "73727926632129849938683848",    // [7–9] Passkey public key (y-coordinates)
    "86587147207223338757045216",
    "11096342160664184776357244",                   
    "8150879811412...8011810765",    // [10] WebAuthn key ID
    "1"                              // [11] Is personal data mocked? ("1" = yes, "0" = no)
  ],
  "maxProofsVerified": 0,
  "proof": "KChzdGF0b...nQoKyb29mX"  // Zero-knowledge proof string
}
```

***

## Types of Proofs

| 🧾 Proof Type             | 🔍 What It Does                                      | 🌐 Use Cases                                         | 🛡️ Why It Matters                                         |
| ------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------- |
| 👵 Proof of Age           | Proves you're older than a specific number of years  | Age-restricted sites, alcohol purchases, entry gates | Verifies age without revealing birthdate or identity       |
| 📜 Proof of Non-Sanctions | Proves you're not on OFAC or similar sanctions lists | Financial services, crypto exchanges, compliance     | Enables checks without exposing personal identity          |
| 🧠 Proof of Unique Human  | Proves you're a single, real, untrackable person     | Voting, airdrops, Sybil resistance in web3           | Prevents bots and duplicate users while preserving privacy |
| 🏛️ Proof of Nationality  | Proves which country issued your ID                  | National ID checks, citizenship programs, residency  | Confirms nationality without sharing full ID details       |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.idmask.xyz/intro/what-is-id-mask.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
