Articulo de referencia

Código no maleable

La noción de códigos no maleables fue introducida en 2009 por Dziembowski, Pietrzak y Wichs, [ 1 ] para flexibilizar la noción de corrección y detección de errores . De manera i...

La noción de códigos no maleables fue introducida en 2009 por Dziembowski, Pietrzak y Wichs, [ 1 ] para flexibilizar la noción de corrección y detección de errores . De manera informal, un código es no maleable si el mensaje contenido en una palabra clave modificada es el mensaje original o un valor completamente diferente. Los códigos no maleables proporcionan una garantía de seguridad útil y significativa en situaciones donde la corrección y detección de errores tradicionales son imposibles; por ejemplo, cuando el atacante puede sobrescribir completamente el mensaje codificado. Si bien tales códigos no existen si la familia de " funciones de manipulación " F es completamente ilimitada, se sabe que existen para muchas familias de manipulación amplias F.

Fondo

Experimento de manipulación

Para conocer el esquema de funcionamiento del código no maleable, debemos comprender el experimento básico en el que se basa. A continuación, se describe el método de tres pasos para realizar un experimento de manipulación .

  1. Un mensaje de origens{\displaystyle s}se codifica mediante un procedimiento (posiblemente aleatorio)minortedo{\displaystyle Enc}, lo que produce una palabra clavedo{\displaystyle c}=minortedo(s){\displaystyle Enc(s)}.
  2. La palabra clave se modifica mediante alguna función de manipulación.FF{\displaystyle f\in F}a una palabra clave erróneado{\displaystyle c^{*}}=F(do){\displaystyle f(c)}.
  3. La palabra clave erróneado{\displaystyle c^{*}}se decodifica mediante un procedimientoDmido{\displaystyle Dec}lo que da como resultado un mensaje decodificado s{\displaystyle s^{*}}=Dmido(do){\displaystyle Dec(c^{*})}.

El experimento de manipulación puede utilizarse para modelar varios escenarios interesantes del mundo real, como la transmisión de datos a través de un canal ruidoso o la manipulación maliciosa de datos almacenados en la memoria de un dispositivo físico. Con esta base experimental, nos gustaría desarrollar procedimientos especiales de codificación/decodificación.(minortedo,Dmido){\displaystyle (Enc,Dec)}, que nos brindan algunas garantías significativas sobre los resultados del experimento de manipulación mencionado anteriormente, para familias grandes e interesantes.F{\displaystyle F}de funciones de manipulación. A continuación se presentan varias posibilidades para el tipo de garantías que podemos esperar. [ 2 ]

Corrección de errores

Una garantía muy natural, denominada corrección de errores , consistiría en exigir que, para cualquier función de manipulación y cualquier mensaje fuente s , el experimento de manipulación siempre produzca el mensaje decodificado correcto. s=s{\displaystyle s^{*}=s}. [ 3 ]

Detección de errores

Una garantía más débil, denominada detección de errores , requiere que el experimento de manipulación siempre dé como resultado el valor correcto.s=s{\displaystyle s^{*}=s}o un símbolo especials=⊥{\displaystyle s^{*}=\perp }lo que indica que se ha detectado manipulación. Esta noción de detección de errores es una garantía más débil que la corrección de errores, y se puede lograr para funciones de manipulación F más grandes.

Descripción del algoritmo

Un código no maleable garantiza que el experimento de manipulación dé como resultado un mensaje decodificado correcto. s=s{\displaystyle s^{*}=s}o el mensaje decodificados{\displaystyle s^{*}}es completamente independiente y no guarda relación con el mensaje de origen.s{\displaystyle s}En otras palabras, la noción de no maleabilidad para códigos es similar, en espíritu, a las nociones de no maleabilidad para primitivas criptográficas (como el cifrado2, los compromisos y las pruebas de conocimiento cero ), introducidas por el trabajo fundamental de Dolev, Dwork y Naor. [ 4 ]

En comparación con la corrección de errores o la detección de errores , la formalización "correcta" de los códigos no maleables es algo más difícil de definir.TametropagmirsF{\displaystyle Tamper_{s}^{f}}sea ​​una variable aleatoria para el valor del mensaje decodificado, que resulta cuando ejecutamos el experimento de manipulación con el mensaje fuente.s{\displaystyle s}y función de manipulaciónF{\displaystyle f}, sobre la aleatoriedad del procedimiento de codificación. Intuitivamente, queremos decir que la distribución deTametropagmirsF{\displaystyle Tamper_{s}^{f}}es independiente del mensaje codificados{\displaystyle s}. Por supuesto, también queremos contemplar el caso en que el experimento de manipulación dé como resultados=s{\displaystyle s^{*}=s}(por ejemplo, si la función de manipulación es identidad), que claramente depende des{\displaystyle s}.

Por lo tanto, requerimos que para cada función de manipulaciónFF{\displaystyle f\in F}, existe una distribuciónDF{\displaystyle D_{f}}que produce valores concretoss{\displaystyle s^{*}}o un mismo especial{\displaystyle *}símbolo, y modela fielmente la distribución deTametropagmirsF{\displaystyle Tamper_{s}^{f}}a pesar des{\displaystyle s}en el siguiente sentido: para cada mensaje fuentes{\displaystyle s}, las distribuciones deTametropagmirsF{\displaystyle Tamper_{s}^{f}}yDF{\displaystyle D_{f}}son estadísticamente cercanos cuando el{\displaystyle *}El símbolo se interpreta comos{\displaystyle s}. Eso es,DF{\displaystyle D_{f}}simula correctamente el "resultado" del experimento de manipulación con una funciónFF{\displaystyle f\in F}sin conocer los mensajes de origens{\displaystyle s}pero se permite cierta ambigüedad al generar un mismo resultado.{\displaystyle *}símbolo para indicar que el mensaje decodificado debe ser el mismo que el mensaje fuente, sin especificar cuál es el valor exacto. El hecho de queDF{\displaystyle D_{f}}depende únicamente deF{\displaystyle f}y no ens{\displaystyle s}, muestra que el resultado deTametropagmirsF{\displaystyle Tamper_{s}^{f}}es independiente des{\displaystyle s}, exceptuando la igualdad.

Relación con la corrección/detección de errores

Nótese que la no maleabilidad es una garantía más débil que la corrección/detección de errores; esta última asegura que cualquier cambio en la palabra clave pueda corregirse o al menos detectarse mediante el procedimiento de decodificación, mientras que la primera permite que el mensaje se modifique, pero solo a un valor no relacionado. Sin embargo, al estudiar la corrección/detección de errores, generalmente nos restringimos a formas limitadas de manipulación que preservan alguna noción de distancia (por ejemplo, generalmente la distancia de Hamming ) entre la palabra clave original y la manipulada. Por ejemplo, ya es imposible lograr la corrección/detección de errores para la familia simple de funciones.Fdoonortest{\displaystyle F_{const}}que, para cada constantedo{\displaystyle c^{*}}incluye una función " constante "Fdo{\displaystyle f_{c^{*}}}que asigna todas las entradas ado{\displaystyle c^{*}}. Siempre hay alguna función enFdoonortest{\displaystyle F_{const}}que asigna todo a una palabra clave válidado{\displaystyle c^{*}}Por el contrario, es trivial construir códigos que no sean maleables con respecto aFdoonortest{\displaystyle F_{const}}, ya que la salida de una función constante es claramente independiente de su entrada. Los trabajos previos sobre códigos no maleables muestran que se pueden construir códigos no maleables para familias de funciones de manipulación altamente complejas.F{\displaystyle F}para los cuales no se puede lograr la corrección/detección de errores. [ 1 ]

Aplicación sobre funciones de manipulación

Manipulación independiente bit a bit

Como ejemplo muy concreto, estudiamos la no maleabilidad con respecto a la familia de funciones.F{\displaystyle f}que especifican, para cada bit de la palabra clavedo{\displaystyle c}, ya sea mantenerlo como está, invertirlo, establecerlo a 0, establecerlo a 1. Es decir, cada bit de la palabra clave se modifica arbitrariamente pero independientemente del valor de los demás bits de la palabra clave. A esto lo llamamos la familia de "manipulación independiente bit a bit".FBIT{\displaystyle F_{BIT}}Nótese que esta familia contiene funciones constantes.Fdoonortest{\displaystyle F_{const}}y funciones de error constanteFmirr{\displaystyle F_{err}}como subconjuntos. Por lo tanto, como ya hemos mencionado, no es posible lograr la corrección ni la detección de errores con respecto a esta familia. Sin embargo, a continuación se muestra un código eficiente y no maleable para esta potente familia.

ConFBIT{\displaystyle F_{BIT}}Denotamos la familia que contiene todas las funciones de manipulación que manipulan cada bit de forma independiente. Formalmente, esta familia contiene todas las funcionesFi:{0,1}norte{0,1}norte{\displaystyle f_{i}:\left\{{0},{1}\right\}^{n}\to \left\{{0},{1}\right\}^{n}} que se definen mediante n funcionesFi:{0,1}{0,1}{\displaystyle f_{i}:\left\{{0},{1}\right\}\to \left\{{0},{1}\right\}}(para i=1...n) comoF(do1..donorte)=F1(do1)..Fnorte(donorte){\displaystyle f(c_{1}..c_{n})=f_{1}(c_{1})..f_{n}(c_{n})}Tenga en cuenta que solo hay 4 opciones posibles para cada una.Fi{\displaystyle f_{i}}(es decir, cómo modificar un bit en particular) y los denominamos "establecer a 0", "establecer a 1", "invertir", "mantener", donde los significados deberían ser intuitivos. A esta familia la llamamos familia de manipulación independiente a nivel de bits.

Todas las familias de tamaño limitado

Para cualquier familia de funciones "suficientemente pequeña"F{\displaystyle F}Existe un esquema de codificación (posiblemente ineficiente) que no es maleable con respecto a F. Además, para una familia de funciones fija "suficientemente pequeña"F{\displaystyle F}Un esquema de codificación aleatoria probablemente no sea maleable con respecto a F con una probabilidad abrumadora. Desafortunadamente, los esquemas de codificación aleatoria no pueden representarse de manera eficiente, ni es probable que la función de codificación/decodificación sea eficiente. Por lo tanto, este resultado debe interpretarse simplemente como una muestra de "posibilidad" y un objetivo que debemos esforzarnos por alcanzar de manera constructiva. Además, este resultado también resalta la diferencia entre "corrección/detección de errores" y "no maleabilidad", ya que un resultado de esta forma no podría ser válido para las nociones anteriores.

No está claro qué implica realmente la cota del teorema [ 4 ] de este tipo. Por ejemplo, nos dice que existen códigos no maleables con respecto a todas las funciones eficientes, pero esto es engañoso, ya que sabemos que los códigos no maleables eficientes (y en última instancia, solo nos interesan estos) no pueden ser no maleables con respecto a esta clase. Sin embargo, el resultado del método probabilístico sí nos proporciona códigos que son no maleables con respecto a clases muy generales de funciones en el modelo de oráculo aleatorio.

Modelo de seguridad resistente a manipulaciones

En este modelo, consideramos dos formas de interactuar con el sistema:

Ejecutar(incógnita{\displaystyle x}): Un usuario puede proporcionar al sistema consultas Execute(x), paraincógnita{0,1}{\displaystyle x\in \left\{{0},{1}\right\}^{u}}, en cuyo caso el sistema calcula(y,s)GRAMO(incógnita,s){\displaystyle (y,s^{'})\gets G(x,s)}actualiza el estado del sistema as:=s{\displaystyle s:=s^{'}}y resultadosy{\displaystyle y}.

Manosear(F{\displaystyle f}) : También consideramos los ataques de manipulación contra el sistema, modelados por Tamper(F{\displaystyle f}comandos, para funcionesF:{0,1}norte{0,1}norte{\displaystyle f:\left\{{0},{1}\right\}^{n}\to \left\{{0},{1}\right\}^{n}}. Al recibir dicho comando, el estado del sistema se establece ens:=F(s){\displaystyle s:=f(s)}.

Un atacante que también puede interactuar con el sistema a través de consultas Tamper puede potencialmente obtener mucha más información sobre el estado secreto, incluso recuperarlo por completo. Por lo tanto, nos gustaría tener un método general para proteger los sistemas contra ataques de manipulación, de modo que la capacidad de emitir consultas Tamper (al menos para funciones f en alguna familia grande)F{\displaystyle F}) no puede proporcionar al atacante información adicional. Al utilizar código no maleable para este propósito, llegamos a la conclusión: Sea(minortedo,Dmido){\displaystyle (Enc,Dec)}ser cualquier esquema de codificación que no sea maleable con respecto aF{\displaystyle F}, entonces(minortedo,Dmido){\displaystyle (Enc,Dec)}También se puede simular manipulación con respecto aF{\displaystyle F}.

Capacidad de los códigos no maleables

  1. Para cada familiaF{\displaystyle F}con|F|22αnorte{\displaystyle |F|\leq 2^{2^{\alpha n}}}, existen códigos no maleables contraF{\displaystyle F}con una tasa arbitrariamente cercana a 1 −α{\displaystyle \alpha }(esto se logra mediante una construcción aleatoria). [ 5 ]
  2. Para familias de tamañomiincógnitapag(norteO(1)2αnorte){\displaystyle exp(n^{O(1)}2^{\alpha n})}frente al cual no existe un código no maleable de tasa 1 −α{\displaystyle \alpha }(de hecho, este es el caso en la práctica para una familia aleatoria de este tamaño).
  3. 1 −α{\displaystyle \alpha }es la mejor tasa alcanzable para la familia de funciones a las que solo se les permite manipular la primeraαnorte{\displaystyle \alpha n}fragmentos de la palabra clave, lo cual reviste especial interés.

Referencias

  1. ^ Dziembowski , Stefan; Pietrzak, Krzysztof; Wichs, Daniel (2018). "Códigos no maleables". J. ACM . 65 (4): 20:1–20:32. doi : 10.1145/3178432 .Véase también la versión preliminar, Cryptology ePrint Archive, documento 2009/608.
  2. Faust, Sebastian; Mukherjee, Pratyay; Venturi, Daniele; Wichs, Daniel (2014). «Códigos no maleables eficientes y derivación de claves para circuitos de manipulación de tamaño poligonal». Avances en criptología – EUROCRYPT 2014 (PDF) . Notas de clase en ciencias de la computación. Vol. 8441. págs. 111–128 . doi : 10.1007/978-3-642-55220-5_7 . ISBN   978-3-642-55219-9.
  3. E. Shannon, Claude (1949). "Teoría de la comunicación de los sistemas de secreto". Bell System Technical Journal . 28 (4): 656– 715. doi : 10.1002/j.1538-7305.1949.tb00928.x . hdl : 10338.dmlcz/119717 .
  4. 1 2 Dolev, Danny; Dwork, Cynthia; Moni, Naor (24 de marzo de 2000). "Criptografía no maleable". SIAM Journal on Computing . 30 (2): http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=9A853A59C3A45DD1B67690F10232D635?doi=10.1.1.26.8267&rep=rep1&type=pdf . CiteSeerX 10.1.1.49.4643 . doi : 10.1137/s0097539795291562 . 
  5. ^ Cheraghchi, Mahdi; Guruswami, Venkatesan (2 de septiembre de 2013). "Capacidad de Códigos No Maleables". arXiv : 1309.0458 [ cs.IT ].