En cualquier caso, todo tu escenario parece hacer una serie de suposiciones que suenan bastante mágicas. Por ejemplo:
Acordaron aceptar el código fuente encriptado y una vez al año verifican que el "método que escojamos" funcione y que el archivo que estamos cargando en su servidor funcione.
¿Cómo pueden verificar si el archivo que carga en su servidor "funciona", si no es así descifrando? Si pueden descifrarlo una vez al año, ¿por qué no pueden descifrarlo cuando lo deseen? E incluso si (de alguna manera!) Realmente solo pueden descifrarlo una vez al año, ¿por qué no pueden aferrarse a la fuente descifrada para siempre?
Una vez que consideras estas preguntas, me parece que lo que te propones hacer tiene que ser mucho más complejo de lo que estás haciendo sonar:
- Es absolutamente necesario que muestre su código fuente al cliente para que funcione cualquier esquema, porque de lo contrario no pueden saber que el archivo cifrado que usted les da es realmente su código fuente.
- El método para mostrarles el código fuente no puede darles una copia de texto simple de la base de código, porque entonces no tiene sentido darles el archivo cifrado.
- Los necesita para firmar que están satisfechos con su afirmación de que lo que les mostró es de hecho su código fuente y que el archivo cifrado que les está entregando se descifra de la misma forma que usted. les mostró.
Para hacer que lo que estás describiendo realmente funcione, necesitas una ceremonia complicada, quizás algo como esto:
- El cliente, el agente de custodia de claves y usted se reúnen en una habitación.
- O bien proporciona una computadora con una instalación de sistema operativo nueva, instalación de las herramientas necesarias para llevar a cabo la ceremonia, sin conectividad de red y la capacidad de leer medios extraíbles.
- El cliente examina la computadora e instaló el software a fondo para asegurarse de que el software instalado en él no sea malicioso de ninguna manera.
- Copia el código fuente de los medios extraíbles en el disco duro de la computadora.
- El cliente examina el código fuente para asegurarse de que es auténtico, pero no pueden copiarlo en medios externos.
- Con el cliente que atestigua, ejecuta los comandos para archivar el árbol de origen, generar una clave, cifrar el archivo y copiar el archivo cifrado en la selección de medios externos del cliente, que luego se entrega al cliente.
- Con el cliente que atestigua, ejecuta los comandos para copiar la clave en la selección de medios externos del cliente, que luego se entrega al agente de custodia.
- Ahora todos tienen que firmar que la ceremonia se realizó a su entera satisfacción o, de lo contrario, no es válida.
Y apuesto a que estoy simplificando esto demasiado. Mensaje para llevar a casa: hacer lo que propone de forma segura con las partes que realmente no confían entre sí , es mucho más complicado de lo que cree. Si crees que este enfoque paranoico es excesivo, entonces estás confiando implícitamente en tu cliente, y tal vez es mejor codificar esa confianza en condiciones contractuales que acumular información sobre seguridad técnica.
¿Es seguro utilizar el enfoque de clave pública / privada?
El uso de la criptografía de clave pública no le proporciona nada aquí, ya que, desde el punto de vista del cliente, solo le está dando un archivo cifrado y retiene la clave que puede descifrarlo. Así que esa clave podría ser simétrica.
¿O existen otros métodos que podrían mejorar nuestra seguridad?
Compartir secretos viene a la mente, pero puede ser poco práctico con un archivo muy grande.