Steganographic use of regular languages, inspired by fteproxy.

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

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