Skip to content
dannalieth edited this page Dec 6, 2011 · 10 revisions

Overview

The Oblivious Printing scheme delivers a novel approach to secret printing. By combining computational and physical cryptography, the scheme keeps the intended message oblivious to all but its source and destination.

Computationally:

  • Mix Network is used to ensure the privacy of the retrieved data
  • Shadow Mix is used to ensure the integrity of the servers performing the mixing
  • Plaintext Equality Test is used to retrieve the intended data

Physically:

  • Multi-party Visual Cryptography is used to ensure the privacy of the printed data

The implementation proceeds according to the following 5 steps:

  1. Translation table
  2. Mix Network
  3. Shadow Mix
  4. Plaintext Equality Test
  5. Visual Cryptography

1. Translation Table

TranslationTable.java: table of (key, value) pairs where "key" is a unique representation of a letter in the alphabet, "value" stores the bit-wise representation of the letter - the tuple is represented by the Message class

PlaintextMessage.java: plaintext (key, value) pair

CipherMessage.java: ElGamal encrypted (key, value) pair where every element in "value" is encrypted individually

[A sample alphabet is provided in /test]

2. Mixing

Mixnet.java - execute(): general driver coordinating the mix network

Server.java: each instance represents a single party - randomizes and permutes the translation table

Permutation.java: representation of individual permutations

FactorTable.java: stores all random factors used in a single randomization process, for e.g. if value.length == n then (n+1) random factors would be stored: n for reencrypting "value", 1 for reencryting "key"

3. Shadow Mix

Mixnet.java - validate(): coordinates the validation process

Challenge.java: represents a single Shadow Mix challenge

ChallengeProof.java: represents the Heads or Tails decommitment of the challenge

4. Plaintext Equality Test

TranslationTable.java - extract(): performs the multiparty PET to extract the desired ciphertext

5. Visual Crytography

BasisMatrix.java: a n x 2^(n-1) binary matrix where each column has even Hamming weight

ObliviousPrint.java: generic coordinator of the visual crypto process, coordinates cut-and-choose process, printer challenges, and finalization

PrinterDriver.java: specific coordinator of multiparty share creation and printing

Printer.java: represents single printing party, creates and prints a single share

Clone this wiki locally