2011-01-16 9 views
13

Tengo un montón de scripts R que estoy ejecutando en una máquina con Windows y quiero asegurarme de que el código no sea leído por aquellos que no están destinados a verlo. En una caja Linux, ¡podría envolver el código R en un script bash #! y hacer un script de shell ejecutable encriptado (y quizás incluso de vida limitada). ¿Cuáles son mis opciones para hacer algo similar en Windows?Cifrado de la secuencia de comandos R en MS-Windows

+22

Valoramos a R como un sistema de código abierto que brinda a todos la oportunidad de estudiar el código fuente. –

+0

Dirk, y yo estaba anticipando algo exactamente en esta línea y muy probablemente de usted :-) Con mucho gusto mantendría mi código abierto, excepto que en mi situación inmediata necesito mantener las miradas indiscretas fuera del circuito. Su punto, sin embargo, es muy apreciado y, de hecho, el código abierto es apreciado. –

+0

@Vishal Es poco probable que obtenga mucha ayuda para esta solicitud. Además, cualquier solución que se te ocurra nunca detendrá las miradas indiscretas. –

Respuesta

1

No creo que esto sea posible porque el intérprete de R tiene que ser capaz de descifrar y leer el código para ejecutarlo, lo que significa que quienquiera que esté usando ese intérprete también podrá descifrar y leer el código.

No soy de ninguna manera un experto, por lo que me reservo el derecho de estar 100% equivocado acerca de esa afirmación.

Creo que la mejor solución es garantizar que el valor provenga de la experiencia y los servicios proporcionados por su empresa y sus empleadores, no por mantener secretos.

Si eso falla, puede intentar separar el código en un modelo de cliente/servidor. De esta forma, el cliente solo envía datos y recibe resultados; nunca tienen acceso al código que se ejecuta en el servidor.

Sin embargo, el científico en mí acaba de decir "esa solución apesta y nunca confiaría en los resultados proporcionados bajo tales condiciones".

5

Esta no es una estrategia específicamente orientada a R. (Y no está nada claro cuáles son tus limitaciones u objetivos en realidad). Si deseas un método de encriptación multiplataforma, debes consultar el programa de código abierto TrueCrypt. Admite la creación de archivos cifrados que se pueden montar como volúmenes en cualquier máquina que admita el método de formato de volumen. He probado esto a través de la división de Mac para PC, ya que la Mac puede leer archivos FAT, pero no tiene experiencia con cómo podría funcionar en el abismo entre Linux y PC.

(Su lista TODO para Windows incluye: "Opciones de línea de comandos para la creación de volúmenes (ya implementadas en versiones Linux y Mac OS X)". Así que no veo ninguna manera clara de usarlo sin ejecutar R el programa del sistema operativo.)

+0

Esta es la solución que también he elegido. Instale R y sus paquetes en un volumen cifrado.Alternativamente, utilice su instalación R normal y coloque el paquete sensible en su directorio de biblioteca local que está en un volumen cifrado. –

+0

@DrG, Coluld usted explica un poco su "use su instalación R normal y ponga el paquete delicado en su directorio de biblioteca local que está en una solución de volumen encriptado" también? –

19

Mi respuesta es un poco tarde, pero creo que esta es una buena pregunta. Desafortunadamente, no creo que haya una solución, o al menos una solución fácil, en este momento.

La dificultad es común porque, para la mayoría de los lenguajes interpretados, incluido R, a menudo es posible activar el registro y la inspección de todos los comandos que se ejecutan. Esto puede negar muchos trucos para ofuscar el código.

Para aquellos que prefieren pensar que el código está abierto == bueno, uno debe saber que una razón común para ofuscar el código es si uno está consultando con un cliente que contrata a varios proveedores. No es raro que un cliente tome scripts del proveedor A y le pregunte al vendedor B por qué no funciona con su sistema. (Esto puede hacerlo un trabajador clandestino de TI de bajo nivel, en lugar de alguien responsable de los contratos de NDA). Si A & B son competidores, el código de A acaba de ser entregado a B. Cuando los scripts == programas serios, entonces el código serio tiene sido regalado

Las formas que he visto esta cuestión son:

  1. hacer una llamada a un lenguaje compilado, y utilizar protecciones estándar disponibles allí.
  2. Aloje el ejecutable en un servidor diferente y use las llamadas al servidor para ejecutar los cálculos. (En R, hay múltiples opciones del lado del servidor.)
  3. Utilice el código compilado (preprocesado/bytecode) dentro del idioma.

La opción 2 es realmente más fácil y mejor cuando el código se puede distribuir ampliamente, no solo por razones de IP. Una ventaja importante es que le permite actualizar el código sin tener que pasar por el dolor de un proceso de lanzamiento en todo el sitio. Si se necesitan nuevas bibliotecas, no hay problema: actualice el servidor.

La opción 3 se realiza en Matlab con .p archivos, y se puede hacer con py2exe para Python en Windows. En R, la nueva compilación de bytecode puede ser análoga, pero no estoy lo suficientemente familiar como para abordar las diferencias entre los archivos .Rc en el contexto R y .p en el contexto de Matlab. Para obtener más información sobre el compilador, consulte: http://www.inside-r.org/r-doc/compiler/compile

La computación de alojamiento en el servidor es ideal para trabajar con usuarios poco sofisticados, ya que es más fácil iterar rápidamente en respuesta a errores o solicitudes de características. La protección de IP es simplemente un beneficio.

+2

+1, nos encontramos en esta posición con bastante frecuencia, aquí es donde la documentación clave para las referencias teóricas y los conjuntos de datos adecuadamente etiquetados son útiles. – Chase

Cuestiones relacionadas