Você pode combinar o processo de download e verificar a assinatura em um processo de tubulação como este:
wget -qO- http://someaddress/filename.gpg|gpg >filename
Se eu tiver um arquivo binário assinado de 100 MB que eu baixei pela Internet, preciso de 200 MB de espaço em disco para abri-lo. O arquivo acabou de ser assinado, não criptografado.
Quando o espaço em disco é baixo, não é possível obter o arquivo original quando o comando gpg falha. Eu vi que o arquivo gpg assinado é o arquivo original + alguns bytes de assinatura no início e no final. É possível remover esses bytes do arquivo sem criar um novo arquivo, economizando espaço em disco? A assinatura pode ser verificada usando:
# gpg --verify filename.gpg
sem criar um novo arquivo no disco. Um fluxo de trabalho de amostra é descrito abaixo:
# # Sample workflow
# cd /tmp/new
# wget http://someaddress/filename.gpg
# ls
filename.gpg
# du -h filename.gpg
100M filename.gpg
# gpg filename.gpg
gpg: Signature made Thu May 28 10:53:26 2015 UTC using RSA key ID XXXXXXXXX
gpg: Good signature from "Example <[email protected]>"
# ls
filename filename.gpg
# du -ch *
100M filename
100M filename.gpg
200M total
# rm filename.gpg
Quando o espaço em disco é baixo, o comando gpg filename.gpg falhará.
Você pode combinar o processo de download e verificar a assinatura em um processo de tubulação como este:
wget -qO- http://someaddress/filename.gpg|gpg >filename
Sim, você pode retirar bytes do começo e do fim sem usar mais espaço em disco. A maioria dos utilitários, no entanto, copia o arquivo para um novo arquivo, exclui o antigo e renomeia o novo como o antigo. Acho que é seguro assumir que gpg
está nessa categoria. Isso usa o dobro do espaço em disco necessário para o arquivo, é claro.
O que você precisa fazer é:
Com o utilitário certo, seria até possível fazer isso em uma única etapa, e seria fácil escrever um programa em C para fazer exatamente isso.
No entanto, suponho que você queira fazer isso apenas com as ferramentas já disponíveis. Na verdade, é possível fazer isso com dd
:
dd if=filename.gpg of=filename.gpg bs=49 skip=1 conv=notrunc
Isto é no pressuposto de que o cabeçalho tem 49 bytes de comprimento. (YMMV)
Agora você precisa truncar o arquivo para o tamanho correto. Existe um utilitário chamado truncate
no GNU coreutils
que estará presente em muitos sistemas Unix. No entanto, você precisa saber o deslocamento de bytes do trailer. Isso pode ser feito com o GNU grep
:
grep -b '^-----BEGIN PGP SIGNATURE-----' filename.gpg
Isso produzirá algo como:
104857600:-----BEGIN PGP SIGNATURE-----
O passo final é usar esse valor com truncate
:
truncate -s 104857600 filename.gpg
No entanto, se você já conhece a duração do trailer, pode pular o grep
e apenas informar truncate
para encurtar o arquivo por esse número de bytes:
truncate -s -103 filename.gpg
Tags security encryption pgp linux