Tengo curiosidad por un algoritmo que sería bueno para el siguiente escenario:
- «texto sin formato» de 32 bits entrada, tomada de un contador
- Salida de «texto cifrado» de 32 o 64 bits
- Debería ser posible descifrar la salida con la clave (y posiblemente algunos otros parámetros ocultos, como un contador de compensación y corriente), y devuelve el valor del contador de 32 bits original
- Un usuario nunca observa la entrada, pero puede recibir cualquier cantidad de salidas, posiblemente secuenciales. Aun así, no debería poder saber qué índices tienen.
- Debería ser difícil adivinar otras salidas que correspondan a valores de contador válidos.
Mi intuición no entrenada es que, dado que la clave y las salidas son más grande que el espacio de entrada, debería ser bastante fácil obtener resultados «buenos», al menos para las primeras salidas. Sin embargo, también parece lógico que con suficientes muestras la clave y los índices se puedan calcular fácilmente, pero espero que la mayoría de los casos usar l menos de 100 valores.
Mis preguntas son:
- ¿Existe algún algoritmo que funcione para este escenario?
- ¿Qué tan difícil sería ¿grieta? Es decir, calcule valores que se descifren a índices válidos.
- ¿Cuánto afecta la posesión de más muestras a la eficiencia de descifrarlas?
-
¿Qué hay de malo en un enfoque ingenuo? como:
u64 output = input repeat 64x output = ((output ^ key) + key) rotate-left 37
Suponiendo que la suma se envuelve alrededor de los límites enteros de 64 bits. Parece que mezclaría completamente la clave aleatoria con una sola entrada, pero que posee más de una la salida podría aumentar rápidamente la información que posee un atacante, aunque no sabría cómo. Obviamente, se va a romper, solo estoy tratando de aprender.
- Usaría un valor dependiente de la clave para la rotación a la izquierda, como
(((key & 0xFFFE)+1) * 37)
ser mejor? ¿Cuánto ayuda y por qué? - ¿Qué enfoques, recursos, etc. utilizaría tanto para analizar el algoritmo como para diseñar uno mejor?
Comentarios
- Este es en gran medida un problema XY de la forma en que lo describe. Un CSPRNG (tenga en cuenta la S) no ' parece ser una buena solución para esto. La solicitud de tamaño de clave es un poco extraña, ¿por qué no es posible usar tamaños de clave más grandes?
- Supongo que el tamaño de clave no es esencial. Esperaba que la clave de 64 bits fuera suficiente para cifrar un valor de 32 bits.
Respuesta
- ¿Existe algún algoritmo que funcione para este escenario?
Sí, en realidad , hay varios cifrados de bloque de 64 bits. La sabiduría estándar es que no se recomiendan para uso general, porque los modos de cifrado de bloques estándar tienden a comenzar a filtrar información cuando se acerca al límite de cumpleaños (en este caso, alrededor de 30 Gbytes); sin embargo, para su caso de uso, eso no sería ser una preocupación.
Aquí hay algunas opciones:
-
3DES (también conocido como TDES); esto es DES aplicado tres veces con tres claves diferentes; esto tiene la ventaja de estar muy bien estudiado.
-
Speck que tiene conjuntos de parámetros con cifrados de bloque de 64 bits. Tiene la ventaja de ser la alternativa más rápida, y fue diseñado por personas que saben lo que están haciendo, y ha realizado una sorprendente cantidad de criptoanálisis.
-
Un cifrado FPE (como FF1, que puede manejar cualquier tamaño de bloque arbitrario (incluidos 64 bits). Esto tiene la ventaja de que permiten la opción de un ajuste (que es un lugar conveniente para colocar los «otros parámetros ocultos», en caso de que decida que es una ventaja ). Su más lento que las alternativas; con FF1, la seguridad proviene de la seguridad subyacente de AES, más la seguridad demostrable de la estructura de Feistel.
Ahora, estos toman claves de más de 64 bits; la sabiduría común es que una clave de 64 bits no es lo suficientemente larga.
- ¿Qué tan difícil sería de descifrar? Es decir, calcule valores que se descifren a índices válidos.
Para cualquiera de los anteriores, la única opción práctica que tendría un adversario sería adivina textos cifrados al azar y espera encontrar uno que se descifre a un índice válido.
- ¿Cuánto cuesta la posesión de ¿Más muestras afectan la eficiencia de descifrarlo?
Para cualquiera de los anteriores, tener grandes cantidades de muestras aún hará que el ataque sea inviable.
- ¿Qué hay de malo en un enfoque ingenuo como …
Los cifrados ARX (en realidad, cualquier cifrado, pero especialmente ARX) son difíciles de acertar. Los cifrados ARX en particular tienden a no ser buenos para alterar las características diferenciales y lineales (lo que significa que el diseño realmente debería estar bien estudiado para asegurarse de que así sea).
- ¿Qué enfoques, recursos, etc. utilizaría tanto para analizar el algoritmo como para diseñar uno mejor?
Le sugiero que elija un diseño que ya ha sido analizado; enumero tres arriba.
Comentarios
- Yo ' preferiría, por ejemplo, Blowfish sobre 3DES si hay un cambio de entrada de clave relativamente pequeña. La seguridad de 3DES ser dudoso incluso si la clave se expandió a 128 bits (o más bien a 112 bits, por supuesto).
- @MaartenBodewes: ¿tiene una cita de alguien que muestre que 3DES con un ¿La clave desconocida se distingue de una permutación par aleatoria?
- No, por supuesto que no. Sin embargo, ' prefiero ni siquiera tener que razonar si mi cifrado tiene ~ 80 bits o ~ 112 bits de fuerza cuando se alimenta una clave de 128 o 192 bits (' no tengo ninguna duda de que podrá hacerlo, pero bueno, no todos son poncho). Y el tamaño de la clave parece ser un problema en la pregunta. En ese caso, simplemente desechar los bits de paridad es un desperdicio.
- ¿Podría ampliar la declaración " Ahora, estos toman claves de más de 64 bits; la sabiduría común es que una clave de 64 bits no es lo suficientemente larga. "? ¿Qué algoritmos requieren claves de qué longitudes, y las claves de 64 bits no son lo suficientemente largas para qué, precisamente?
- @shader: las claves de solo 64 bits son vulnerables a las búsquedas de fuerza bruta de adversarios grandes (bien financiados). Debido a que generalmente es bastante fácil usar claves algo más grandes (por ejemplo, 128 bits) que no son ' t vulnerables a nadie, generalmente optamos por la opción más segura (incluso si ' no está inmediatamente preocupado de que la NSA esté interesada en atacarnos, o si Amazon decide dedicarnos toda su nube …