IOCCC image by Matt Zucker

The International Obfuscated C Code Contest

2012/grothe - Most conspiratorial

Shamir secret sharing

Authors:

To build:

    make

To use:

To create a shared secret shared among M people with N+1 needed to reconstruct:

    ./grothe -secret 1-/dev/urandom 2-/dev/urandom ... \
        N-/dev/urandom 1+shared1 2+shared2 ... M+sharedM

To reconstruct the original (an arbitrary combination of N+1 or more shared files with their proper numbers):

    ./grothe I-sharedI J-sharedJ K-sharedK ... +reconstructed

Try:

    ./try.sh

Judges’ remarks:

Also known as ‘Best abuse of the judging process’.

The IOCCC 2012 submission page didn’t enforce the 2048 meaningful character limit. This entry, as submitted, weighed in at 2222 chars but lucky for it, it was extremely easy to bring down below the limit. There were a number of strings that when concatenated allowed the program to slide under the limit.

It was clear to the judges that the extra size was an entry beautification step. Had it not been, this entry would have been rejected in round 0.

The judges also took some liberty obfuscating this entry a little more.

How does this entry work? The only place multiplication is used is to perform the atoi(3) conversion.

Author’s remarks:

Description

This program implements a version of Shamir’s Secret Sharing. Shamir’s Secret Sharing allows you to encrypt a file into N parts where it will take M parts to recreate the original file. E.g. you can split the secret recipe for Crystal Pepsi into 3 parts and require two of them be available to extract the original recipe.

Actually surprisingly useful for an IOCCC entry :-)

Usage

To share a secret. For example:

Example usage

To split a secret into 4 pieces of which at least 3 will be needed to get it (in this case the cookie recipe) back:

    ./grothe \
        -cookie_recipe.txt\
        1-/dev/urandom 2-/dev/urandom\
        1+cookie_piece1.dat 2+cookie_piece2.dat 3+cookie_piece3.dat 4+cookie_piece4.dat

To put the recipe back together using the first, second and fourth pieces:

    ./grothe \
        1-cookie_piece1.dat 2-cookie_piece2.dat 4-cookie_piece4.dat
        +cookie_recipe_restore.txt

Limitations

The program is limited to 256 input and output files and will slow down dramatically when you get past 20-50 inputs and outputs.

Obfuscations

References

Inventory for 2012/grothe

Primary files

Secondary files


Jump to: top