Una de las principales verdades de la criptografía es que no debe inventar nada en esta área si no es un profesional. Esto es en parte cierto, porque lo mejor ha sido inventado, sufrido y utilizado durante décadas en el campo de la tecnología de la información. El otro lado de la verdad es que el desarrollo de un cierto campo de conocimiento ocurre solo con una afluencia constante de ideas frescas y soluciones originales.
Por razones obvias, no estafaremos a gigantes de la criptografía industrial como AES, sino que nos sumergiremos, por así decirlo, en nuestra propia investigación criptográfica con blackjack y alegrías.
En parte porque es interesante, en parte porque cuando modela algo propio y lo compara con estándares reconocidos, puede ver claramente el contraste, las soluciones efectivas y las omisiones francas, comprende lo que puede esforzarse por aumentar la eficiencia.
Pero ya bastante agua.
Digamos que nuestra aplicación web está escrita en php, necesita cifrado reversible y creemos que podemos escribir nuestro propio sistema de cifrado.
Entonces, escribiremos nuestro propio sistema de encriptación reversible con una clave privada y pública, una que tendrá las siguientes características de un algoritmo criptográfico un poco más seguro:
- La presencia de caracteres de ruido en el cifrado resultante.
- La información en cada canal del remitente-destino se cifrará con una clave privada, y la función de correspondencia será única para cada clave.
- Cada mensaje recibirá un código de resumen, un código único que es función de la clave privada y el mensaje original. Esto es necesario para lograr la unicidad de la función de correspondencia "carácter codificado <=> carácter codificado" no solo para el canal "Remitente-Destino", sino también para cada mensaje individual.
Por lo tanto, incluso si imaginamos que la correspondencia de los símbolos codificados y de origen para un mensaje en particular se ha conocido mediante el uso del análisis criptográfico, por ejemplo, el análisis de frecuencia, esto no da ninguna preferencia al examinar otro mensaje. - Para complicar el análisis de frecuencia, codificaremos cada símbolo de mensaje fuente con dos símbolos de cifrado.
Entonces que paso.
En realidad, puedes ver el resultado final
aquíClase SymCoderLa clase SymCoder incluye métodos de cifrado y descifrado.
El cifrado se realiza mediante el método code (), que recibe el mensaje original en la entrada.
Aquí, el mensaje en la tabla de correspondencia generada en tab_coded crea un mensaje cifrado, diluido alrededor de los bordes y dentro con símbolos de ruido.
Los símbolos de ruido, por cierto, son únicos para cada canal remitente-destino, ya que se generan utilizando la tecla de canal, pero no son exclusivos de los mensajes. Los caracteres utilizados para el cifrado en code_symbols son algunos caracteres de puntuación y caracteres como%, @, etc.
Para cada carácter codificado, hay dos caracteres de code_symbols por razones obvias, que hay varias veces menos que los caracteres codificados.
La tabla de coincidencia create_tab_coded se construye utilizando la traducción del hash de la clave de mensaje en una matriz con el número de elementos igual al número de elementos en la matriz de caracteres de código. La posición del inicio de la omisión de códigos de dos caracteres también es siempre diferente y está asociada con la tecla del canal. Esto permite estar seguro de que el algoritmo para omitir caracteres codificados y su correspondencia con los caracteres de código siempre (bien, o garantizado a menudo) será diferente.
Por ejemplo, el mensaje "hola mundo" que se codifica se ve así:
Digest-a00bf11d-&?==&!&?.@.@=!=-.?&1.#&?=:.:.1%!&-%@&@%~&1^#=?%%.!%+.?.~=?..&?%&&:%~.#%@&1&1.#=?.#.?.!&1==&=.-=!
Y aquí está el mismo mensaje codificado nuevamente:
Digest-a00bf11d-=:.?=:&!.?.1&-=:=?.?.=.?.!&=%!=-%@=!%~.=^#.1%%.!%+=:.~.@..==%&&1%~.1%@=?.@.!&=.!&@=:&1.==:=!.1&:
Se puede ver que el resumen del mismo mensaje es el mismo, pero el cifrado se vuelve diferente: los símbolos de ruido se agregan por coincidencia arbitraria y en orden aleatorio para cada nuevo cifrado.
Los mensajes tienen redundancia, que disminuye a medida que aumenta el volumen del mensaje, alcanzando hasta un 10% de ruido en el límite (para los mensajes más cortos, el ruido alcanza el 90% y más del porcentaje), la longitud mínima de un mensaje cifrado es de 116 caracteres. Uno de los pocos inconvenientes de este método de cifrado es un aumento doble en los mensajes codificados.
La decodificación es la traducción inversa de la forma "símbolo de código": el símbolo original con el ruido cortado del mensaje. ¿Cuál podría ser la clave? En principio, cualquier cadena que sea exclusiva de cada par del tipo destino-destinatario.
Por ejemplo, si crea un mensajero con encriptación de mensajes, en este caso la versión más simple de la clave privada puede ser md5 ($ user_id_1. $ Salt. $ User_id_2), entonces la clave será única para cada canal de mensajes.