Enviando ruido por cable, usando hashes de ruido para transportar datos

3

Imagine un entorno altamente distópico, donde los MITM del gobierno malvado opresivo en todas las conexiones y utiliza el DPI para frustrar cualquier intento de usar TLS / SSL, TOR, I2P, etc. Para establecer la conexión, estos protocolos primero deben comunicarse un poco en texto claro, y Si el DPI puede identificar el paquete de intercambio, la conexión se cerrará. El uso de protocolos personalizados o modificaciones de protocolos para combatir este mecanismo no es una opción viable, ya que los funcionarios supervisan todo lo que pasa a través del filtro de red y casi inmediatamente adaptan las reglas de DPI a las nuevas versiones.

Había pensado en una idea para hacer un protocolo que sería prácticamente imposible crear una regla en contra. Algo que se puede usar para hacer que los datos de texto simple (versiones de protocolo, lista de cifrados, huellas digitales de claves públicas, intercambios de DH) parezcan aleatorios y uniformes, pero a la vez sean fácilmente reversibles.

Podría pensar en la siguiente opción:

Cifrado de sustitución de hash alfabético infinito

Cada octeto de cadena de texto simple se asigna a una gran parte de datos completamente aleatorios. El primer octeto de hash de esos datos coincide con el octeto deseado.

Procedimiento de codificación en casi 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

Dados N bytes de entrada, el resultado será N * H bytes, donde H es el tamaño de la función hash.

Procedimiento de decodificación:

plaintext = ''

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

Sin embargo, en caso de que se use alguna función de hash computacionalmente simple, no es difícil para MITM agregar una regla que calcule la función de hash en cada paquete, y filtre los resultados. Para protegerse contra esto, se puede usar PBKDF2 o scrypt, por lo que para la parte legítima no se necesitan muchos recursos para aceptar o iniciar la conexión, pero MITM se verá abrumado.

La pregunta es: ¿tiene algún sentido? ¿Es mejor que simplemente usar scrypt sin encabezado con un gran valor de r y una clave pública enviada previamente?

    
pregunta toriningen 18.12.2015 - 01:26
fuente

1 respuesta

4

En un entorno distópico autoritario, las autoridades no van a permitir que todas las transmisiones de red que no puedan probar sean perjudiciales, usarán una regla de denegación predeterminada y solo permitirán las transmisiones que puedan demostrar que son seguras. En tal entorno, deberá ocultar su transmisión como un protocolo seguro conocido, como HTTP o Telnet.

Incluso sin eso, su protocolo propuesto es estadísticamente idéntico al cifrado fuerte. Cualquier autoridad distópica que valga la pena su sal va a bloquear cualquier cosa que se parezca al cifrado.

    
respondido por el Mark 18.12.2015 - 02:00
fuente

Lea otras preguntas en las etiquetas