Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(x/data): add simple privacy preserving merkle tree algorithm #2097

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

aaronc
Copy link
Member

@aaronc aaronc commented Nov 29, 2023

Description

This PR defines a merkle tree algorithm for anchoring and signing graph data in a provable, privacy-preserving manner. Anchored data can provably contain any sub-graph of the anchored graph so graphs can be shared which omit personally identifiable information such as geo-locations, personal names, etc.


Author Checklist

All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.

I have...

  • included the correct type prefix in the PR title
  • added ! to the type prefix if API or client breaking change
  • targeted the correct branch (see PR Targeting)
  • provided a link to the relevant issue or specification
  • followed the guidelines for building modules
  • included the necessary unit and integration tests
  • added a changelog entry to CHANGELOG.md
  • included comments for documenting Go code
  • updated the relevant documentation or specification
  • reviewed "Files changed" and left comments if necessary
  • confirmed all CI checks have passed

Reviewers Checklist

All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.

I have...

  • confirmed the correct type prefix in the PR title
  • confirmed ! in the type prefix if API or client breaking change
  • confirmed all author checklist items have been addressed
  • reviewed state machine logic
  • reviewed API design and naming
  • reviewed documentation is accurate
  • reviewed tests and test coverage
  • manually tested (if applicable)

@aaronc aaronc marked this pull request as ready for review November 29, 2023 18:29
@aaronc aaronc marked this pull request as draft November 30, 2023 15:39
// a. the subject is hashed using the specified digest algorithm and the salt prefix
// b. the predicate is hashed using the specified digest algorithm and the salt prefix
// c. the object is hashed using the specified digest algorithm and the salt prefix
// e. the resulting hashes are concatenated and hashed using the specified digest algorithm
Copy link
Member Author

@aaronc aaronc Dec 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could add hash iterations in these steps to make this more resistant to brute forcing. The number of iterations could either be fixed or configurable, although if it is configurable the question is where this is stored? One option is to create a few variants of this enum such as GRAPH_MERKLE_TREE_SIMPLE_PRIVACY_PRESERVING (no iterations), GRAPH_MERKLE_TREE_SIMPLE_PRIVACY_PRESERVING_10000, GRAPH_MERKLE_TREE_SIMPLE_PRIVACY_PRESERVING_100000, etc. Even a high iteration count will not protect triples with a small value space (ex. booleans), but could better hide LAT/LON location data for instance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant