Invio di rumore su cavo, utilizzando hash di rumore per trasportare dati

3

Immaginate un ambiente altamente distopico, in cui i MITM del governo opprimente maltrattano su tutte le connessioni e usano DPI per contrastare qualsiasi tentativo di usare TLS / SSL, TOR, I2P ecc. Per stabilire una connessione, questi protocolli devono prima comunicare un po 'in chiaro, e se DPI è in grado di identificare il pacchetto di handshake, la connessione verrà chiusa. L'utilizzo di protocolli personalizzati o modifiche del protocollo per combattere questo meccanismo non è un'opzione praticabile, perché i funzionari controllano tutto ciò che passa attraverso il filtro di rete e quasi immediatamente adattano le regole DPI alle nuove versioni.

Avevo pensato a un'idea per creare un protocollo che sarebbe praticamente impossibile da creare contro una regola. Qualcosa che può essere usato per creare dati in chiaro (versioni di protocollo, elenco di cifre, impronte digitali della chiave pubblica, scambi di DH) appare casuale e uniforme, ma può essere facilmente reversibile.

Potrei pensare alla seguente opzione:

Codice di sostituzione hash dell'alfabeto infinito

Ogni ottetto di stringa di testo in chiaro viene mappato su una grande porzione di dati completamente casuali. Il primo ottetto dell'hash di quei dati corrisponde all'ottetto desiderato.

Procedura di codifica in quasi Python:

pool = {}
stegotext = ''

for octet in cleartext:
    while octet not in pool:
        chunk = generate_randomness(bytes=32)
        digest = calculate_hash(chunk)
        hash_octet = digest[0]

        if hash_octet not in pool:
            pool[hash_octet] = []

        pool[hash_octet].append(chunk)

    chunk = draw_and_remove_random_element(pool[octet])
    stegotext += chunk

Dati N byte di input, il risultato sarà N * H byte, dove H è la dimensione della funzione hash.

Procedura di decodifica:

plaintext = ''

for group in split_in_groups(stegotext, group_length=H):
    digest = calculate_hash(group)
    octet = digest[0]
    plaintext += octet

Tuttavia, nel caso in cui venga utilizzata una funzione di hash computazionalmente semplice, non è difficile per MITM aggiungere una regola che calcoli la funzione di hash su ogni pacchetto e filtri sui risultati. Per proteggersi da questo, si potrebbe usare PBKDF2 o scrypt, quindi per la parte legittima non ci vogliono molte risorse per accettare o avviare la connessione, tuttavia il MITM sarà sopraffatto.

La domanda è: ha senso? È meglio che usare solo lo scritio senza intestazione con un valore r elevato e una chiave inviata pubblicamente?

    
posta toriningen 18.12.2015 - 01:26
fonte

1 risposta

4

In un ambiente distopico autoritario, le autorità non permetteranno che tutte le trasmissioni di rete che non possono dimostrare siano dannose, utilizzeranno una regola di rifiuto di default e permetteranno solo le trasmissioni che possono dimostrare siano sicure. In tale ambiente, dovrai camuffare la tua trasmissione come un protocollo sicuro, come HTTP o Telnet.

Anche senza questo, il tuo protocollo proposto è statisticamente identico alla crittografia strong. Qualsiasi autorità distopica degna di questo nome bloccherà tutto ciò che sembra crittografia.

    
risposta data 18.12.2015 - 02:00
fonte

Leggi altre domande sui tag