Steganographic use of regular languages, inspired by fteproxy.

fnord 007d702b6e Update README.md 3 years ago
doc e5482e10ee Parrot SVG 5 years ago
obj d6ed61a7a8 Basic encoder and decoder. Updated description. 6 years ago
src b32e3641de GCC 9.x? build problems fixed: default copy operators are deprecated in some situations 4 years ago
test bb0c0ea0dd Implemented a simple DFA leaning algorithm, using greedy state merging and MDL criterion. 5 years ago
tools bb0c0ea0dd Implemented a simple DFA leaning algorithm, using greedy state merging and MDL criterion. 5 years ago
CHANGELOG.md 50df318f3d Optimized computations. 6 years ago
LICENSE 0512176f96 Initial commit 6 years ago
Makefile.am bb0c0ea0dd Implemented a simple DFA leaning algorithm, using greedy state merging and MDL criterion. 5 years ago
README.md 007d702b6e Update README.md 3 years ago
configure.ac b32e3641de GCC 9.x? build problems fixed: default copy operators are deprecated in some situations 4 years ago

README.md

NorwegianBlue

Beautiful plumage to disguise your encrypted messages.

Note: this project is superseded by my new project ChatBox, which solves the problem by an entirely different approach and isn't limited to regular languages.

Description

NorwegianBlue computes a 1:1 mapping between the natural numbers and the words of a given regular language L. Given a number, the encoding algorithm outputs a string of L. The decoding algorithm unambiguously retrieves the number from the string.

Contains

  • ftencode, to transform N to L
  • ftdecode, to transform L to N
  • some tests and experiments

Why the name?

Houmansadr, Brubaker and Shmatikov assert that the parrot, i.e. the protocol misidentification approach to censorship circumvention, is dead. We don't necessarily think so. Wherever clear text is transmitted, steganography can potentially be applied.

Caveat

  • It is not encryption and provides no security by itself.
  • It is based on rank-unrank but distinct from libfte & co.

Known issues / Project status

  • May contain traces of nuts and algorithms. Peruse at your own risk!
  • This is an alpha release. Do not rely on it for anything. Please report bugs.
  • Bad performance when the automaton has too many states (~ several dozen).
  • Automaton learning is experimental, not optimized and not "production-ready".
  • Automaton learning fails to guess some useful features, such as alphabet ranges
  • No support for using the encoding as a network transport yet.

References / Inspiration

How to build

Install dependencies:

  $ sudo apt install libboost-program-options-dev libgmp-dev libeigen3-dev

Compile:

  $ touch config.rpath
  $ autoreconf -iv
  $ ./configure CPPFLAGS=-DNDEBUG CXXFLAGS="-O3" --prefix=/usr/local
  $ make