diff --git a/.gitignore b/.gitignore index 96ef6c0..2e04901 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target Cargo.lock +.idea/ \ No newline at end of file diff --git a/README.md b/README.md index 898342b..ef8d28e 100644 --- a/README.md +++ b/README.md @@ -2,5 +2,11 @@ Experimental Rust implementation of https://eprint.iacr.org/2021/089 using Ristretto. +A tag is a probabilistic cryptographic structure. When constructed for a given FuzzyMetaPublicKey it will pass the FuzzyMetaDetectionKey::test 100% of the time. For other public keys it will pass the test with probability gamma related to the security parameter of the system. This system provides the following security properties: + + * Correctness: Valid tags for a public key for a key pair always validate when tested against the secret key + * Fuzziness: Invalid matches should produce false positives with probability p related to the security property (γ) + * Security: An adversarial server with access to Test oracle (i.e. the detection key) is unable to distinguish false positives from true positives. (Detection Ambiguity) + diff --git a/src/lib.rs b/src/lib.rs index b2d1951..0256705 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,7 @@ #![feature(test)] +#![deny(missing_docs)] +#![feature(external_doc)] +#![doc(include = "../README.md")] use bit_vec::BitVec; use curve25519_dalek::constants::RISTRETTO_BASEPOINT_POINT; use curve25519_dalek::digest::Digest; @@ -114,7 +117,10 @@ impl Display for FuzzyMetaTag { /// An identity keypair for generating and validating fuzzy meta tags. pub struct FuzzyMetaTagKeyPair { + /// the detection key - this can be given to adversarial servers to help probabilistically + /// filter messages (with a false-positive rate derived from γ and a 0% false negative rate) pub detection_key: FuzzyMetaDetectionKey, + /// the public key - this can be given to people who you want to contact you pub public_key: FuzzyMetaPublicKey, }