Skip to content

What is Blind Insight?

Warning

This document is a work-in-progress. Please pardon our dust!

Blind Insight provides a set of APIs with a supporting SDK and a graphical user interface that gives users a low-code tool to run queries on data while it's still encrypted. With a recent flux of privacy and compliance concerns surrounding data protection, a great need has arisen for tools that adequately protect data while still allowing it to be utilized in beneficial ways.

Data Model

The Blind Insight application is comprised of the following objects.

Datasets

Data in Blind Insight is grouped by Datasets. A dataset might be analogous to a database. A dataset may contain one or more “schemas”, which are used to define the shape of your data.

A dataset is pretty simple in that it’s really just a name used to categorize your data.

Dataset Object Definition

Name Description Type
name A human-readable name string
description A human-readable description string
slug A unique, auto-generated slug string
organization The organization this dataset belongs to string($uri)

Example Dataset Payload

Below is an example Dataset object that you would create using the API:

{
  "url": "https://localhost:8081/api/datasets/FWaw3Gr7Gmv8xg8mpuabn7/",
  "organization": "https://localhost:8081/api/organizations/jSzAcLbFkDSCtFipdmLM3S/",
  "name": "Business Data",
  "slug": "business-data",
  "description": "The Business Data"
}

Schemas

Schemas in Blind Insight define the shape of your data. You can think of a schema like a table in a database.

Schemas are declared using the JSON Schema specification. Only object types are supported which contain of field properties of string or number types.

Important

Only string and number field types are supported at this time. Support for more types will be added in a future release.

Each number type field must include values for its minimum and maximum bounds.

Schema Object Definition

Name Description Type
name A human-readable name string
description A human-readable description string
slug A unique, autogenerated slug string
dataset The dataset this schema belongs to string(uri)
schema A JSON schema defining the fields in the schema. This can be a file or raw JSON object

Example JSON Schema

A complete JSON schema for a "Person" object that has both "name" and "age" fields would look like this:

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "age": {
      "type": "number",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": ["name", "age"]
}

Example Schema Payload

Given the example JSON schem above, creating a Schema object might look like this:

{
  "dataset": "https://localhost:8081/api/datasets/2rLuXFQwGKfj2TKFoEVPaQ/",
  "name": "Person",
  "slug": "person",
  "description": "Person Schema",
  "schema": {
    "properties": {
      "age": {
        "maximum": 100,
        "minimum": 1,
        "type": "number"
      },
      "name": {
        "type": "string"
      }
    },
    "required": ["name", "age"],
    "type": "object"
  }
}

Records

Records in Blind Insight represent data that conform to a schema. You can think of records as rows in a database table. Each record field is encrypted using a unique key generated from the schema derived from keys in your keyring.

Record Object Definition

Name Description Type
schema The dataset this schema belongs to string(uri)
data A record in JSON format. Must conform to the schema it's being inserted into. object

Example Record Payloads

For example, if you were to upload two records at once using the Blind Proxy:

[
  {
    "data": {
      "name": "Alice",
      "age": 17
    }
    "schema": "https://localhost:8080/api/schemas/iKi3YbiG7Ax9cEZ7YPVNgw/"
  },
  {
    "data": {
      "name": "Bob",
      "age": 69
    },
    "schema": "https://localhost:8080/api/schemas/iKi3YbiG7Ax9cEZ7YPVNgw/"
  }
]

Warning

The REST API endpoint requires more advanced payloads including encrypted data. This is not currently included in this guide because the Blind Proxy encrypts your date and handles this for you automatically. This will be documented in more detail in a future release.

Users

Users are required to access Blind Insight. An email address is required to register a new user account.

Every user must also be a member of at least one Organization.

Organizations

Organizations represent a distinct account and isolated datasets. All objects are owned by an Organization. Every Organization has a single owner, and can have multiple admins or users. Users may be defined specialized roles. Blind Insight users may be members of multiple Organizations.

Note

Support for administering Organizations is not yet implemented and will be available in a future release. For now, each new user will be prompted to create their own Organization.

Organization Users

A Organization User is a member of an Organization. A user must be invited to join an Organization. Upon being invited to an Organization by email, if an account does not already exist, one must be created. Otherwise if a Blind Insight account already exists for that email, the user is automatically added to the Organization.

Organization Admins

An Organization Admin is a member of an Organization who has administrative privileges. By default this user has full read/write permissions to all objects owned by the Organization.

Organization Admins may also invite new users to the Organization. Only an Organization Owner may grant admin privileges to an Organization User. A user must be either be a member of the Organization before they may be granted admin rights, or the owner may issue admin privileges to a new user upon inviting them to the Organization.

Organization Owners

Each Organization has exactly one Organization Owner. Upon creating a new Organization, the creator becomes the owner. Ownership may be transferred by the Organization Owner to another Organization User at any time.

Concepts

Blind Insight REST API

The Blind Insight application is API-first. The REST API provides all functionality for integrating with the service. Please see the Blind Insight API Reference for details on how to use the REST API.

Blind Proxy

The Blind Proxy is a proxy server that brokers communication with the REST API. It holds the keys to your data and all encrypt/decrypt/search functionality is performed locally in the Proxy.

When uploading new data, the Proxy first uses your keys to encrypt the data before sending it to the REST API. When decrypting existing data, the Proxy receives the records from the REST API and decrypts them. When searching data, the Proxy encrypts your queries before sending them to the REST API.

Please see the guide on Using the Blind Proxy more information.

Blind Insight Keyring

The Blind Insight Keyring is managed by your Blind Proxy. It is compromised of a cryptographically strong 24-word (256-bit) seed phrase that is used to automatically generate cryptographic keys. These keys are mapped to your schema fields for the data you are uploading. Each distinct field in a schema is mapped to a unique 256-bit symmetric cryptography key. We will cover this in more detail as the documentation evolves.

Please see the section on Creating your Keyring for more information.

Data Owners

A Data Owner may perform encrypted searches and may also fully encrypt and ingest new records, as well as decrypt existing records.

A user is automatically a Data Owner for any datasets they create.

Data Requesters

A Data Requester may perform encrypted searches and view encrypted results but cannot upload, edit, or decrypt records.

Data Owners may selectively grant access to Data Requesters to decrypt or upload records for certain schemas, but by default, Data Requesters have read-only permissions.