In ogni caso, il tuo intero scenario sembra fare una serie di presupposti che sembrano piuttosto magici. Ad esempio:
They agreed to accept the source code encrypted and once every year check that the "whatever method we choose" works and that the file we are uploading to their server works.
Come possono controllare se il file che carichi sul loro server "funziona", se non decifrandolo? Se riescono a decrittografarlo una volta all'anno, perché non possono decifrarlo quando vogliono? E anche se (in qualche modo!) Possono davvero decifrarlo solo una volta all'anno, perché non possono quindi resistere per sempre alla fonte decifrata?
Una volta considerate queste domande, mi sembra che ciò che stai proponendo sia molto più complesso di come lo stai facendo:
- Devi assolutamente mostrare il tuo codice sorgente al client per far funzionare qualsiasi schema, altrimenti non possono sapere che il file crittografato che fornisci è in realtà il tuo codice sorgente.
- Il metodo per mostrare loro il codice sorgente non può dare loro una copia in chiaro del codice di base, perché quindi non ha senso dar loro il file crittografato.
- Hai bisogno che loro firmi siano soddisfatti della tua affermazione secondo cui ciò che hai mostrato è davvero il tuo codice sorgente e che il file crittografato che stai trasmettendo li decifra allo stesso modo di quello che mostrato loro.
Quindi, per rendere veramente funzionante ciò che stai descrivendo, hai bisogno di una cerimonia complicata, forse qualcosa del genere:
- Il client, l'agente di escrow principale e ti trovi insieme in una stanza.
- O fornite un computer con una nuova installazione del sistema operativo, l'installazione degli strumenti necessari per eseguire la cerimonia, nessuna connettività di rete e la capacità di leggere i supporti rimovibili.
- Il client esamina il computer e ha installato il software per verificare che il software installato non sia dannoso in alcun modo.
- Copia il tuo codice sorgente da un supporto rimovibile nel disco rigido del computer.
- Il cliente deve esaminare il codice sorgente per accertarsi che sia autentico, ma non è autorizzato a copiarlo su un supporto esterno.
- Con la testimonianza del client, si eseguono i comandi per archiviare l'albero dei sorgenti, generare una chiave, crittografare l'archivio e copiare il file crittografato nella scelta del client di un supporto esterno, che viene quindi fornito al client.
- Con la testimonianza del client, si eseguono i comandi per copiare la chiave nella scelta del client di supporti esterni, che viene quindi fornita all'agente di escrow.
- Ora devi tutti firmare che la cerimonia è stata eseguita in modo soddisfacente, altrimenti non è valido.
E scommetto che lo sto semplificando un bel po '. Messaggio da portare a casa: fare ciò che si propone in modo sicuro con parti che non si fidano veramente , è molto più complicato di quanto si pensi. Se pensi che questo approccio paranoico sia eccessivo, allora stai fiduciosamente implicitamente nel tuo cliente, e forse è meglio codificare quella fiducia in condizioni contrattuali piuttosto che accumulare materiale tecnico sulla sicurezza.
Is it safe to use Public/Private key approach?
L'uso della crittografia a chiave pubblica non ti guadagna nulla qui, perché dal punto di vista del cliente, stai semplicemente dando loro un file crittografato e trattenendo la chiave che può decodificarlo. Quindi quella chiave potrebbe essere simmetrica.
Or are there other methods that could improve our safety?
Condivisione segreta mi viene in mente, ma potrebbe non essere pratico con un file molto grande.