저는 gpg
Ubuntu와 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.txt
OSX에서 이 명령은 Ubuntu에서 작동하지 않는 해독된 콘텐츠도 출력합니다.
나는 몇 가지 사실을 발견했습니다.
- OSX에서는
gpg
다음 메시지를 출력합니다.gpg: Note: RFC4880bis features are enabled.
이는 관련이 있을 수 있습니다. gpg
OSX의 버전은 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
그런 다음 메시지를 다시 암호화하십시오.y
save
나는 이 문제를 심층적으로 조사했습니다. CFB는 AEAD 알고리즘이 아니며 단지 어떤 암호 블록이 사용되었는지 나타냅니다. AEAD는 사이다 블록과 관련 일반 텍스트(예: 패키지 헤더 등)의 유효성을 검사하는 방법을 정의합니다. MDC(수정 감지 코드)보다 빠른 대안입니다.
GPG에는 키 환경설정에서 활성화된 경우 비활성화하거나 강제 적용하는 옵션이 없으며 AEAD
새 GPG로 키를 생성할 때 기본적으로 이 방식으로 설정됩니다. 이 문제를 해결하는 유일한 방법은 주요 기본 설정을 편집하여 AEAD 알고리즘을 제거하는 것입니다.MDC
AEAD
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
그리고 기본값이 어떻게 선택되는지 살펴보세요.