Digamos que tengo un archivo cifrado en un iPhone y cada vez que quiero descifrarlo, quiero "dibujar" un símbolo de descifrado en lugar de tener que usar un teclado para escribirlo.Algoritmo para descifrar datos con trazos dibujados
Si solicita al usuario que dibuje un símbolo para descifrar un archivo cada vez que lo necesite (p. Ej., Cada vez que inicie su aplicación), probablemente prefiera tener que escribir una contraseña de 20 caracteres en el minúsculo teclado, y aún así obtendrían la seguridad que les daría una contraseña de 20 caracteres (dependiendo de qué tan complicada sea la forma/símbolo que dibujen).
El símbolo que dibujarían probablemente sería un trazo (por ejemplo, una vez que levanta el dedo) pero puede ser muy complejo, por lo que es difícil para otra persona repetirlo, incluso si lo ven dibujar pulg. Algo así como cómo la firma de cada persona es única y difícil de duplicar. En realidad, esto puede complicarlo demasiado si tiene que evitar que se duplique, por lo que, por ahora, esto puede ignorarse y podemos suponer que el símbolo no será visto por otra persona y, por lo tanto, no importa si podría repetirse. por ellos o no.
Supongo que la verdadera pregunta es cómo convertir el mismo (razonablemente) golpe de forma consistente a la misma tecla (por ejemplo, valor hash). Obviamente debería haber algún umbral de tolerancia en el algoritmo, porque no se puede esperar que el usuario repita el trazo exactamente al 100%.
El uso del símbolo como método de desencriptado agrega una dimensión completamente diferente a este problema. Nunca desea almacenar el valor hash generado en ningún lugar en forma descifrada, porque entonces alguien podría tener acceso a esa parte del disco duro y obtener la clave de descifrado sin necesidad de pasar por todo el proceso de dibujo y descifrar el archivo manualmente. También es probable que no desee almacenar nada sobre cómo se dibuja la forma.
Un buen ejemplo de un trazo que un usuario podría usar como su símbolo de descifrado es el símbolo "&". Imagine que un usuario dibuja este símbolo en su iPhone cada vez que necesita descifrar un archivo. El tamaño del símbolo puede no ser el mismo cada vez que se dibuja. Además, la rotación del símbolo puede ser diferente dependiendo de cómo el usuario mantenga su dispositivo. Idealmente, en ambos casos, debido a que el símbolo se dibujó, en relación con los trazos del usuario, lo mismo, debería ser capaz de generar el mismo valor hash y así descifrar el archivo.
Pensé que algo así como el reconocimiento de formas o caracteres es un algoritmo similar. Donde el usuario dibuja algo (representando razonablemente una forma) y luego lo arregla a la forma correcta que tendría el mismo valor hash cada vez que se dibuja. Sin embargo, para algo como esto, lo más probable es que necesite una base de datos de formas que pueda dibujar, y si elige algo así como todas las letras en el alfabeto, solo obtendrá 26 letras. Y suponiendo que el usuario solo necesite dibujar un símbolo para descifrar el archivo, tiene una contraseña extremadamente insegura con solo 26 posibilidades.
Otra cosa que pensé es que podría romper el símbolo que se dibuja en pequeños segmentos y luego ejecutar el reconocimiento de símbolos en los mismos. Imagine que tiene 4 símbolos en una base de datos: línea vertical, línea horizontal y diagonal en ambas direcciones. Ahora, a medida que el usuario dibuja, cada segmento se reconoce como uno de estos, y luego se combinan para formar un valor hash. Entonces imagine que el usuario eligió como su símbolo de descifrado la letra minúscula "r". Entonces comenzarían dibujando una línea vertical hacia abajo, seguida de una línea vertical arriba, seguida por una línea diagonal hacia arriba y hacia la derecha. Un problema con este método es ¿cómo sabría cuándo dividir el trazo en segmentos individuales? Probablemente también desee tener en cuenta cuánto tiempo dura cada segmento individual (por ejemplo, en incrementos de 40 píxeles). De esta forma, si alguien dibuja una "r" deformada donde la joroba sale cerca del fondo, no se reconoce como el mismo símbolo y, por lo tanto, no se descifra el archivo.
Un tercer método podría ser dividir la pantalla en una cuadrícula (aún no estoy seguro de su tamaño) y simplemente ver en qué celdas se dibuja el trazo y usar estos datos de alguna manera para generar una cadena.
¿Alguna otra idea de cómo esto podría implementarse? ¿Alguna vez has oído hablar de algo como esto? ¿Existen fallas fundamentales que impidan que un sistema como este funcione?
Gracias
Problema interesante y un tratamiento exhaustivo. Prestigio. Lamentablemente, no veo ninguna forma de evitar el problema de fidelidad sin una base de datos de símbolos fija (como el software OCR), que como usted señala no sería lo suficientemente seguro para un trabajo serio. –
Puede que le interese este reconocedor de símbolos LaTeX; es genial: http://detexify.kirelabs.org/classify.html –
Problema interesante.¿Qué pasaría si intentara restringirlo un poco - convierta un pequeño conjunto de símbolos fácil de reconocer en unos pocos bits de la clave de cifrado? Si puede obtener un byte completo de datos clave de un solo símbolo, eso es mejor que ascii. ;) – ojrac