# OpenPuff

OpenPuff Steganography and Watermarking, qualche volta abbreviato OpenPuff o Puff, è uno strumento steganografico freeware per Microsoft Windows creato da Cosimo Oliboni e tuttora in continuo sviluppo come software indipendente. Il programma si distingue per essere stato il primo strumento steganografico (la versione 1.01 è stata pubblicata nel dicembre 2004) che:
* consente di nascondere un flusso di dati nascosto in più di un singolo contenitore. Quando un flusso di dati viene suddiviso fra più contenitori si ottiene una catena, senza nessun limite teorico di dimensione (256MB, 512MB, ... a seconda solo dell'implementazione)
* implementa 3 livelli di offuscamento del flusso di dati (crittografia, whitening e codifica con funzione di copertura non lineare
* estende la crittografia negabile alla steganografia negabile
L'ultima versione supporta molti formati di contenitore
* Immagini Bmp, JPG, Png, TGA
* File audio Aiff, MP3, WAV
* File video 3gp, Mp4, Mpeg I, Mpeg II, VOB
* File Flash-Adobe FLV, Pdf, SWF

## Utilizzo

OpenPuff è usato principalmente per lo scambio dati anonimo e asincrono:
* il mittente nasconde un flusso di dati nascosto all'interno di alcuni contenitori pubblicamente disponibili (password + contenitori + ordine dei contenitori sono la chiave segreta)
* il ricevente recupera il flusso di dati nascosto con la chiave segreta
Il vantaggio della steganografia, rispetto alla sola crittografia, è che i messaggi sono costruiti in modo da non attirare l'attenzione. Dei messaggi visibilmente crittografati - per quanto robusti - destano sospetto e, nei paesi dove la crittografia è illegale, possono essere incriminanti. Un messaggio steganografato, oltre a proteggere il contenuto del messaggio, protegge anche le parti che vogliono comunicare.
Il Watermarking è l'azione di marcare un contenitore con una stringa di riconoscimento o di copyright. OpenPuff lo fa con un meccanismo steganografico invisibile, disponibile per tutti i formati di contenitore supportati. Il marchio inserito, non protetto da password, è accessibile da tutti (usando il programma).

## Multi crittografia

OpenPuff è un programma semi open source:
* la crittografia, il CSPRNG, l'hash (usato nell'estensione esadecimale della password), e lo scrambling sono open source
Gli algoritmi crittografici (16 presi dall'AES, NESSIE e CRYPTREC) sono uniti in un unico algoritmo multi crittografico:
* vengono inizializzate le chiavi e i dati statici interni di ogni algoritmo f
* ogni blocco di dati D [ i ] (128bit) viene crittografato usando un diverso algoritmo f [ i ]
* f [ i ] viene scelto con un oracolo random, inizializzato con una seconda password indipendente

## Resistenza statistica

Le proprietà di resistenza statistica dei moduli CSPRNG e di multi crittografia sono state testate usando le suite di test ENT, NIST e DIEHARD. I risultati forniti provengono da campioni di 64KB, 128KB, ... 256MB:
* test dell'entropia a livello di bit: >7.9999xx / 8.000000
* test di compressione: 0% di diminuzione della dimensione dopo la compressione
* test della distribuzione chi quadro: 40% < deviazione < 60%
* test del valore medio: 127.4x / 127.5
* test Monte Carlo: errore < 0.01%
* test di correlazione seriale: < 0.0001

## Resistenza steganalitica

Sicurezza, performance e resistenza steganalitica sono obiettivi contrastanti.
[Sicurezza vs. Performance]: Whitening
* Pro: assicura una maggiore sicurezza
* Pro: consente la steganografia negabile
* Contro1: richiede molti bit di carrier extra
[Sicurezza vs. Steganalisi]: Crittografia + Whitening
* Pro: assicura una maggiore sicurezza
* Contro2: i contenitori sono identificati come "sospetti" a causa della forte componente random
I dati, prima di essere iniettati nei contenitori, vengono crittografati e sottoposti a whitening: piccole quantità di dati nascosti si trasformano così in un grosso segmento di dati pseudorandom "sospetti". L'operazione di iniezione nei contenitori adotta come codifica una funzione nonlineare di copertura che prende in input anche i bit originali del contenitore. I contenitori modificati subiscono meno modifiche (Contro1) e, diminuendo la risposta statistica pseudorandom, superano più test steganalitici (Contro2).

## Steganografia negabile

Nonostante il flusso di dati nascosto esibisca “caratteristiche naturali” esiste sempre una possibilità non trascurabile che la steganografia venga rilevata (effetti collaterali impredicibili, essere colti in flagrante delicto, ...). È possibile resistere anche a questi attacchi impredicibili, anche quando si è costretti (dalla legge o con la forza) a fornire una password di decodifica valida. La steganografia negabile (una tecnica basata sull'uso di una o più esche) permette di negare in maniera convincente il fatto stesso che dei dati sensibili siano stati nascosti. È necessario fornire una o più esche sacrificabili, che plausibilmente si sarebbero volute mantenere confidenziali, e rivelarle all'attaccante sostenendo che è l'unico contenuto.