솔루션(위의 업데이트된 답변)

솔루션(위의 업데이트된 답변)

저는 gpgUbuntu와 OSX에서 2.2.20을 사용하여 PGP 키를 사용하여 일반 텍스트 비밀번호 파일을 암호화하고 있습니다(둘 다 동일한 PGP 키를 가짐). Ubuntu에서는 해독할 수 없지만 OSX에서는 해독할 수 있는 암호화된 파일이 있습니다. 또한 둘 다 잘 해독되는 파일이 많이 있습니다.

내가 실행 중인 작업(및 Linux의 전체 자세한 출력)은 다음과 같습니다.

$ gpg --verbose -o bad.txt --decrypt bad.gpg 
gpg: public key is 7XXXXXXXXXXXXXXX
gpg: using subkey 7XXXXXXXXXXXXXXX instead of primary key 5XXXXXXXXXXXXXXX

다음은 OSX에서 동일한 명령의 출력입니다.

gpg: Note: RFC4880bis features are enabled.
gpg: public key is 7XXXXXXXXXXXXXXX
gpg: using subkey 7XXXXXXXXXXXXXXX instead of primary key 5XXXXXXXXXXXXXXX
gpg: encrypted with rsa4096 key, ID 7XXXXXXXXXXXXXXX, created 2022-01-23
      "My Name <[email protected]>"
gpg: AES256.OCB encrypted data
gpg: original file name='FNnyaS-bad.txt'

bad.txtOSX에서 이 명령은 Ubuntu에서 작동하지 않는 해독된 콘텐츠도 출력합니다.

나는 몇 가지 사실을 발견했습니다.

  1. OSX에서는 gpg다음 메시지를 출력합니다. gpg: Note: RFC4880bis features are enabled.이는 관련이 있을 수 있습니다.
  2. gpgOSX의 버전은 Ubuntu의 2.2.20보다 최신 버전인 2.3.4입니다 .gpg

여기서 무슨 일이 일어나고 있는지 설명할 수 있는 사람이 있나요? 이상하게도 verbose 모드에서도 로그에는 오류가 표시되지 않습니다. Ubuntu에 최신 버전을 설치할 수 없는 것 같습니다 gpg(적어도 아님 apt). 혼합 버전에 더 주의해야 합니까 gpg?

답변1

나는 이 오류를 알아내려고 반나절을 보냈습니다. gopass가 처음 실패하기 시작했을 때 오류가 없었습니다.

나는 Ubuntu가 macos에 대한 메시지를 인코딩할 수 있고 macos가 메시지를 디코딩할 수 있다는 것을 발견했습니다. 실행되면 다음을 보고합니다.gpg: AES256.CFB encrypted data

그리고 gpg 출력을 디코딩하는 동안 macos에서 동일한 파일을 인코딩할 때gpg: AES256.OCB encrypted data

@dave_thompson_085님의 추측이 좋습니다.

솔루션(위의 업데이트된 답변)

요약:주요 기본 설정에서 AEAD를 실행한 gpg --edit-key ...다음 비활성화합니다. setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed그런 다음 메시지를 다시 암호화하십시오.ysave

나는 이 문제를 심층적으로 조사했습니다. CFB는 AEAD 알고리즘이 아니며 단지 어떤 암호 블록이 사용되었는지 나타냅니다. AEAD는 사이다 블록과 관련 일반 텍스트(예: 패키지 헤더 등)의 유효성을 검사하는 방법을 정의합니다. MDC(수정 감지 코드)보다 빠른 대안입니다.

GPG에는 키 환경설정에서 활성화된 경우 비활성화하거나 강제 적용하는 옵션이 없으며 AEAD새 GPG로 키를 생성할 때 기본적으로 이 방식으로 설정됩니다. 이 문제를 해결하는 유일한 방법은 주요 기본 설정을 편집하여 AEAD 알고리즘을 제거하는 것입니다.MDCAEAD

gpg 2.2.x와 호환되도록 주요 환경 설정을 편집하는 방법

먼저 AEAD가 사용되는지 확인하기 위해 간단한 테스트를 해보겠습니다.

$ [email protected]
$ echo test | gpg --encrypt --recipient $KEY | gpg --verbose --decrypt
...
gpg: AES256.OCB encrypted data
gpg: original file name=''
test

보시다시피 OCB를 사용하고 있습니다. 이제 주요 기본 설정을 편집해 보겠습니다. showpref를 사용하여 현재 기본 설정을 표시할 수 있습니다.

$ gpg --edit-key $KEY

gpg> showpref
[ultimate] (1). Piotr Czapla <[email protected]>
     Cipher: AES256, AES192, AES, 3DES
     AEAD: OCB
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, AEAD, Keyserver no-modify

다음 명령을 원하는 대로 조정하되 AHEAD를 비활성화하세요. 기본 설정을 변경하기 전에 확인 메시지가 표시됩니다. 가능하다면 다음 목록이 도움이 될 것입니다.setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed

변경 사항을 확인하고 키를 저장합니다.

gpg> setpref SHA512 SHA384 SHA256 SHA224 SHA1 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed

Set preference list to:
     Cipher: AES256, AES192, AES, 3DES
     AEAD:
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, Keyserver no-modify
Really update the preferences? (y/N) y

sec  ed25519/285CE99FAA64E280
     created: 2022-07-20  expires: 2025-07-19  usage: SC
     trust: ultimate      validity: ultimate
ssb  cv25519/C2C95918A535E298
     created: 2022-07-20  expires: 2025-07-19  usage: E
ssb  ed25519/CDEBF13E9DE11878
     created: 2022-07-21  expires: 2027-07-20  usage: A
[ultimate] (1). Piotr Czapla (api key used to decrypt gopass on less secure instances) <[email protected]>

gpg> save

aead그런 다음 사용되지 않는 것을 테스트하십시오 .

$ echo test | gpg  --encrypt  --recipient $KEY | gpg --verbose --decrypt
...
gpg: AES256.CFB encrypted data
gpg: original file name=''
test

CFB그리고 기본값이 어떻게 선택되는지 살펴보세요.

관련 정보