디스크에 새 파일을 생성하지 않고 서명된 파일에서 gpg 서명을 제거하는 방법은 무엇입니까?

디스크에 새 파일을 생성하지 않고 서명된 파일에서 gpg 서명을 제거하는 방법은 무엇입니까?

인터넷을 통해 다운로드한 100MB의 서명된 바이너리 파일이 있는 경우 이를 열려면 200MB의 디스크 공간이 필요합니다. 파일은 암호화되지 않고 서명만 됩니다.

디스크 공간이 부족하면 gpg 명령이 실패하여 원본 파일을 가져올 수 없습니다. 서명된 gpg 파일이 원본 파일 + 시작과 끝의 몇 바이트의 서명임을 확인했습니다. 새 파일을 생성하지 않고 파일에서 이러한 바이트를 제거하여 디스크 공간을 절약할 수 있습니까? 서명은 다음을 사용하여 확인할 수 있습니다.

# gpg --verify filename.gpg

디스크에 새 파일을 생성하지 않고. 샘플 워크플로는 아래에 설명되어 있습니다.

# # 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

디스크 공간이 부족하면 gpg filename.gpg 명령이 실패합니다.

답변1

다음과 같이 다운로드 프로세스를 결합하고 하나의 파이프 프로세스로 서명을 확인할 수 있습니다.

wget -qO- http://someaddress/filename.gpg|gpg >filename

답변2

예, 더 많은 디스크 공간을 사용하지 않고도 처음과 끝에서 바이트를 제거할 수 있습니다. 그러나 대부분의 유틸리티는 파일을 새 파일에 복사하고 이전 파일을 삭제한 다음 새 파일의 이름을 이전 파일과 동일하게 바꿉니다. gpg이 범주에 속한다고 가정하는 것이 안전하다고 생각합니다 . 물론 이는 파일에 필요한 디스크 공간을 두 배로 사용합니다.

당신이 해야 할 일은:

  1. PGP 헤더의 크기만큼 파일의 바이트를 "아래로" 이동합니다.
  2. PGP 트레일러를 제거하려면 파일 길이를 설정하세요.

올바른 유틸리티를 사용하면 이 작업을 단일 단계로 수행하는 것도 가능하며 이를 수행하는 C 프로그램을 쉽게 작성할 수도 있습니다.

하지만 이미 사용 가능한 도구만 사용하여 작업을 수행하고 싶다고 가정합니다. 실제로 다음을 사용하여 이 작업을 수행할 수 있습니다 dd.

dd if=filename.gpg of=filename.gpg bs=49 skip=1 conv=notrunc

이는 헤더 길이가 49바이트라는 가정에 따른 것입니다. (YMMV)

이제 파일을 올바른 길이로 잘라야 합니다. 많은 Unix 시스템에 존재하는 truncateGNU 라는 유틸리티가 있습니다 . coreutils그러나 트레일러의 바이트 오프셋을 알아야 합니다. 이는 GNU를 사용하여 수행할 수 있습니다 grep.

grep -b '^-----BEGIN PGP SIGNATURE-----' filename.gpg

그러면 다음과 같이 출력됩니다.

104857600:-----BEGIN PGP SIGNATURE-----

마지막 단계는 이 값을 다음과 함께 사용하는 것입니다 truncate.

truncate -s 104857600 filename.gpg

그러나 예고편의 길이를 이미 알고 있는 경우에는 해당 바이트 수만큼 파일을 줄이도록 grep지시 할 수 있습니다.truncate

truncate -s -103 filename.gpg

관련 정보