Zero-Knowledge Credential Generator

Your current state

Current fingerprint

A 500-bit fuzzy hash of the client's browser characteristics

Not generated yet
Current location and geohash

The client's current location encoded as a geohash (hardcoded to a random point near NYC for demo)

Not generated yet
Current IP address

The client's current IP address (used for location verification)

Not generated yet

Your zero-knowledge credential history

Last fingerprint hash

Geohash history

IP address history

Server-side verification parameters

These parameters determine how strict the verification process is. In this demo, you can set these parameters yourself as if you were the server. However, calculating these thresholds based on exact statistics may not be privacy preserving. Our work validates a system for using local differential privacy (specifically RAPPOR) to calculate these thresholds.

  • Geohash precision: Controls how precise the location verification is:
    • 3 characters (15 bits): ~156km x ~156km bounding box
    • 4 characters (20 bits): ~39km x ~19.5km bounding box
    • 5 characters (25 bits): ~5km x ~5km bounding box
  • Fingerprint similarity: Controls how similar fingerprints must be to pass verification:
    • Loose: 70% similarity required
    • Medium: 80% similarity required
    • Strict: 90% similarity required

How this works

This demo website shows how zero-knowledge proof-based anonymous credentials can verify that a user's state is within normal parameters while maintaining privacy. All data is generated and stored locally in your browser's local storage. We envision this being used for a wide range of applications, for example:

  • Verifying that a user is logging in from a location that they've previously logged-in from
  • Verifying that the current device that they're using is similar to a device that they've used in the past
  • Attributing ad clicks
  • Verifying that a user has recently passed a humanness check

On this site, we allow you to view and configure the entire system, both client- and server-side. The client-side parameters control how the test data is generated (e.g. how similar the generated fingerprint and location history are to the user's current state), and the server-side parameters control how strict the verification process is (e.g. how similar the fingerprint and location history must be to the user's current state to pass verification).

If a verification check is passed, it's equivalent to the client saying to the server (without revealing any sensitive information about their current state) that:

  1. The IP and geohash lists are not empty
  2. The new geohash shares enough prefix bits with at least one of the old geohashes (based on the selected precision)
  3. The current fingerprint is sufficiently similar to the initial fingerprint (based on the selected threshold)