Pregunta

Muchos de los clientes de mi empresa utilizan nuestro software de adquisición de datos con fines de investigación.Debido a la naturaleza de la investigación en general, algunos de los clientes solicitan que los datos se cifren para evitar su manipulación; podría haber consecuencias graves si se demuestra que sus datos están falsificados.

Algunos de nuestros binario El software cifra los archivos de salida con una contraseña almacenada en la fuente, que parece caracteres aleatorios.A nivel de software, podemos abrir archivos cifrados para operaciones de solo lectura.Si alguien en realidad Quería saber la contraseña para poder alterar los datos, sería posible, pero sería mucho trabajo.

Estoy pensando en usar Python para el desarrollo rápido de otra pieza de software.Para duplicar la funcionalidad de cifrado para derrotar o desalentar la manipulación de datos, la mejor idea que se me ha ocurrido hasta ahora es simplemente usar ctypes con una DLL para operaciones de lectura/escritura de archivos, de modo que el método de cifrado y descifrado esté "suficientemente" ofuscado.

Somos muy conscientes de que un método "indescifrable" es inalcanzable, pero al mismo tiempo obviamente no me siento cómodo con tener los enfoques de cifrado/descifrado en texto plano en el código fuente de Python.Creo que sería suficiente "desalentar muy fuertemente la manipulación de datos".

¿Cuál sería el mejor enfoque para lograr un medio feliz de cifrado u otra prueba de integridad de datos utilizando Python? Yo vi otra publicación Estamos hablando de generar una "firma a prueba de manipulaciones", pero si se generara una firma en Python puro, entonces sería trivial generar una firma para cualquier dato arbitrario.Nosotros podría Podría llamar a casa para demostrar la integridad de los datos, pero eso parece un gran inconveniente para todos los involucrados.

¿Fue útil?

Solución

Como principio general, usted no desea utilizar el cifrado para proteger contra la manipulación, por el contrario desea utilizar una firma digital. Encriptación da confidencialidad , pero que está después integridad .

Calcular un valor hash sobre sus datos y, o bien almacenar el valor hash en un lugar donde usted sabe que no puede ser alterado o firmar digitalmente a él.

En su caso, parece que usted quiere asegurarse de que sólo su software puede haber generado los archivos? Como usted dice, no puede existir una forma muy segura de hacer esto cuando los usuarios tienen acceso al software, ya que puede destrozarlo y encontrar las claves secretas que incluya. Teniendo en cuenta esta restricción, creo que su idea de utilizar un archivo DLL es casi tan bueno como lo puede hacer.

Otros consejos

Si está incrustando contraseñas en algún lugar, ya que está regado. No se puede garantizar nada.

Sin embargo, se puede usar el cifrado de clave pública / clave privada para asegurarse de que los datos no ha sido manipulado.

La forma en que funciona es la siguiente:

  1. Se genera un / par de claves privada clave pública.
  2. Mantenga la clave privada segura, distribuir la clave pública.
  3. y
  4. Hash los datos a continuación firman el hash con la clave privada.
  5. Utilice la clave pública para verificar el hash.

Esto hace de manera efectiva los datos de sólo lectura fuera de su empresa, y ofrece su programa de una forma sencilla de verificar que los datos no han sido modificados sin la distribución de contraseñas.

Aquí hay otra cuestión.Presumiblemente, su software de adquisición de datos recopila datos de alguna fuente externa (como algún tipo de dispositivo de medición), luego realiza el procesamiento necesario en los datos sin procesar y almacena los resultados.Independientemente del método que utilice en su programa, otro posible vector de ataque sería introducir datos incorrectos en el programa, y ​​el programa en sí no tiene forma de saber que está introduciendo datos inventados en lugar de datos que provienen de la medición. dispositivo.Pero esto podría no tener solución.

Otro posible vector de ataque (y probablemente el que le preocupa es la manipulación de los datos del ordenador una vez almacenados).He aquí una idea para mitigar ese riesgo:configure un servidor separado (esto podría ser algo que su empresa ejecutaría o, más probablemente, sería algo que configuraría el cliente) con un servicio web protegido con contraseña que permita al usuario agregar (pero no eliminar) registros de datos.Luego haga que su programa, cuando recopile datos, los envíe al servidor (usando la contraseña/cadena de conexión que está almacenada en el programa).Haga que su programa solo escriba los datos en la máquina local si recibe la confirmación de que los datos se han almacenado correctamente en el servidor.

Ahora supongamos que un atacante intenta alterar los datos del cliente.Si puede aplicar ingeniería inversa al programa, entonces, por supuesto, aún puede enviarlo al servidor para su almacenamiento, tal como lo hizo el programa.Pero el servidor seguirá teniendo los datos originales, por lo que la manipulación será detectable porque el servidor terminará con los datos originales y modificados; el cliente no podrá borrar los registros originales.(Por supuesto, el programa cliente no necesita saber cómo borrar registros en el servidor).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top