Pretendo enviar atualizações de software para máquinas off-line por meio de pen drives USB.
Machies serão despachados, e no local por potencialmente muitos anos,
Durante esse tempo, novos desenvolvedores serão contratados e demitidos.
Eu pretendo usar o GnuPG para verificar as atualizações no pen drive antes de instalá-las.
Haverá uma chave mestra e cada desenvolvedor receberá sua própria chave de desenvolvedor.
As chaves do desenvolvedor serão assinadas pela chave mestra.
As máquinas implantadas confiarão totalmente na chave mestra.
No entanto, as máquinas implantadas não terão todas as chaves de desenvolvedor.
Como posso fazer com que as máquinas implementadas entendam que podem confiar em pacotes assinados com chaves desconhecidas? Se essas chaves desconhecidas forem assinadas pela chave mestra totalmente confiável ??
Nos meus testes, gpg --verify package.tar.gz.sig falha porque a chave pública NÃO é conhecida.
Para obter o gpg - verify para aceitar a chave, eu preciso primeiro gpg --import developer_123.key.
Mas isso não verifica se a nova chave foi assinada pelo mestre confiável!
Eu posso criar uma nova chave rogue_developer, não assinada pelo mestre confiável, importá-la e, em seguida, gpg --verify autenticará o pacote.
Eu acho que estou entendendo mal uma compreensão fundamental de como esse processo deve funcionar?
Devo eu ...
1) Permitir que todos os desenvolvedores assinem com a chave mestra (má idéia, a chave será perdida e eu não poderei revogá-la sem precisar recallar as máquinas instaladas!)
2) Agrupe a chave de desenvolvedor exportada com a atualização USB.
Mas como posso verificar se foi assinado pelo mestre antes de importá-lo?
3) Se existe uma maneira de validar que o pacote foi assinado por uma chave que foi assinada pelo meu mestre confiável sem ter que importar essa chave?
4) Algo mais que eu não tenha pensado?
Tenho certeza de que estou entendendo mal alguma coisa ... Como você pensou que tornar o mestre totalmente confiável deveria significar que também validamos chaves que foram assinadas por essa chave confiável?
Mas como esse processo funciona?
Obrigado por todos os ponteiros!
Chris.
EDIT:
Eu criei para testar, um desenvolvedor real (DVKey) e um invasor não autorizado (ROKey).
DVKey é assinado pela chave mestra, que é totalmente confiável.
ROKey NÃO é assinado pela chave mestra.
Ao verificar um pacote assinado pelo DVKey, recebo
[cds@notebook ~]$ gpg --homedir FMHOME --verify ArchLinuxARM-rpi-2-latest.tar.gz.sig
gpg: assuming signed data in 'ArchLinuxARM-rpi-2-latest.tar.gz'
gpg: Signature made Wed 18 Nov 2015 21:15:55 GMT using RSA key ID B90C2061
gpg: Good signature from "DVKey " [full]
[cds@notebook ~]$ echo $?
0
Note que o gpg retornou '0', sucesso.
Quando eu verifico o pacote não autorizado, obtenho
[cds@notebook ~]$ gpg --homedir FMHOME --verify Untitled.log.sig
gpg: assuming signed data in 'Untitled.log'
gpg: Signature made Wed 18 Nov 2015 21:23:03 GMT using RSA key ID EEF5033E
gpg: Good signature from "ROKey " [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: C00D C1EE 4670 2FE9 4B8D D03E 4DC6 8D9C EEF5 033E
[cds@notebook ~]$ echo $?
0
Note que recebi um aviso! mas o gpg ainda retornou '0', sucesso.
Preciso que a falta de uma assinatura confiável seja uma FALHA para verificar.
Novamente, OBRIGADO.