# zkKYC (GIP-1)

A **KYC Guardian** is an entity or service responsible for verifying the identity of users through government-issued documents (ids, passports, driving licenses, etc) and they work with a strictly defined set of personal data. The role of the KYC Guardian is to ensure the authenticity of the identity of the user.

### Personal Details

The following table list the personal details contained in a Galactica zkKYC. These need to be collected and validated by the KYC Guardian.

<table><thead><tr><th width="232.33333333333331">Key</th><th>Description</th><th>Technical details</th></tr></thead><tbody><tr><td>Surname</td><td>Surname as in passport/id</td><td>Latin letters only (UTF-8)</td></tr><tr><td>Forename</td><td>Forename as in passport/id</td><td>Latin letters only (UTF-8)</td></tr><tr><td>Middle Names</td><td>List of middle names as in passport/id</td><td>Can be empty, Latin letters only (UTF-8)</td></tr><tr><td>Year of birth</td><td>Year in date of birth as on passport/id</td><td><p>Each formatted as uint16. We chose this format instead of a Unix timestamp because</p><ol><li>There would be multiple timestamps for a single day (problem for uniqueness of <a data-mention href="../../galactica-concepts/zero-knowledge-kyc/dapp-specific-humanid">dapp-specific-humanid</a>)</li><li>Easier to calculate age (no need to consider leap years and DST)</li></ol></td></tr><tr><td>Month of birth</td><td>Month in date of birth as on passport/id</td><td>uint8 from 1 for January to 12 for December</td></tr><tr><td>Day of month of birth</td><td>Day in date of birth as on passport/id</td><td>uint8 in the range 1 to 31.</td></tr><tr><td>Country of citizenship</td><td>Issuer country of passport/id</td><td>Formatted as Alpha-3 code from <a href="https://www.iban.com/country-codes">https://www.iban.com/country-codes</a></td></tr><tr><td>Verification Level</td><td>Confidence the provider puts into the KYC. Similar to KYC levels on exchanges.</td><td><p>0 - no kyc</p><p>1 - kyc</p><p>2 - qualified investor</p></td></tr><tr><td>Expiration date</td><td>Expiration date of the passport/id used.<br>Checked in ZK validation.</td><td>Formatted as Unix Timestamp uint</td></tr><tr><td>Street + Number</td><td>Residential address</td><td>UTF-8 string</td></tr><tr><td>Postcode</td><td>Residential address</td><td>UTF-8 string</td></tr><tr><td>Town</td><td>Residential address</td><td>UTF-8 string</td></tr><tr><td>Region</td><td>Residential address</td><td>Formatted as ISO 3166-2 code from <a href="https://www.iso.org/obp/ui/#search/code/">https://www.iso.org/obp/ui/#search/code/</a></td></tr><tr><td>Country</td><td>Residential address</td><td>Formatted as Alpha-3 code from <a href="https://www.iban.com/country-codes">https://www.iban.com/country-codes</a></td></tr></tbody></table>

### Salt for Human ID

Galactica features the concept of the [dapp-specific-humanid](https://docs.galactica.com/galactica-developer-documentation/galactica-concepts/zero-knowledge-kyc/dapp-specific-humanid "mention"). It assigns each human a unique ID in the context of a DApp. For example, it can be used for human centric DAO voting and reputation. The HumanID is derived in a zero-knowledge proof from personal fields in the zkKYC (name, birthday, passport ID) to get as close as possible to a unique ID. To prevent guessing the HumanID, it contains a salt. The hash of this salt is the [holder-commitment](https://docs.galactica.com/galactica-developer-documentation/galactica-concepts/zero-knowledge-kyc/holder-commitment "mention"). It is registered on-chain in the [#humanidsaltregistry](https://docs.galactica.com/galactica-developer-documentation/galactica-components/root-contracts#humanidsaltregistry "mention") to limit a user to one salt.

See [#registration-of-the-salt-for-the-humanid](https://docs.galactica.com/galactica-developer-documentation/galactica-concepts/zero-knowledge-kyc/dapp-specific-humanid#registration-of-the-salt-for-the-humanid "mention") for more details.
