오늘 이걸 받았어요경고하다Cygwin의 OpenSSL은 다음과 같은 몇 가지 패키지를 업데이트한 후 출시되었습니다 openssl
.
*** 경고: 더 이상 사용되지 않는 키 파생을 사용합니다. 또는 을
사용하는 것이 더 좋습니다 .-iter
-pbkdf2
이것Cygwin에서 사용되는 OpenSSL 버전예전에는 :
OpenSSL 1.1.1b 26 Feb 2019
BluRay에서 생성한 백업을 해독하는 동안 이런 일이 발생했습니다.리눅스 민트 19.1, 여기서 OpenSSL 버전은분명히 늙었어:
OpenSSL 1.1.0g 2 Nov 2017
암호화 및 암호 해독 명령( -d
끝에 추가하기만 하면 됨)은 다음과 같습니다.
openssl enc -aes-256-cbc -md sha256 -salt -in "$InputFilePath" -out "$OutputFilePath"
이 경고는 무엇을 의미합니까? 향후 백업에서 이 문제를 방지하기 위해 할 수 있는 일이 있습니까?
답변1
OpenSSL의 두 가지 주요 버전과 Synopsys의 최신 버전을 비교하기 위해 매뉴얼 페이지를 인용하겠습니다.
OpenSSL1.1.0
openssl enc -ciphername [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
OpenSSL1.1.1
openssl enc -cipher [-help] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-rand file...] [-writerand file] [-engine id]
분명히 더 큰 차이점이 있는데, 이는 이 질문을 염두에 두고 1.1.0에는 이 두 스위치가 없다는 것입니다.
pbkdf2
iter
이제 기본적으로 두 가지 옵션이 있습니다. 경고를 무시하거나 암호화 명령을 다음과 같이 조정하십시오.
openssl enc -aes-256-cbc -md sha512 -pbkdf2 -iter 1000000 -salt -in InputFilePath -out OutputFilePath
이 스위치의 위치:
-aes-256-cbc
너야~해야 한다최대 보호 또는 128비트 버전에 대해서는 3DES(Triple DES)가 한동안 사용되지 않음을 참조하세요.Triple DES는 2017년에 NIST에 의해 더 이상 사용되지 않습니다., AES는 모든 최신 CPU에 의해 크게 가속화되지만 CPU가AES-NI 명령어 세트예를 들어grep aes /proc/cpuinfo
;승리, 승리-md sha512
SHA-256에 비해 SHA-2 기능 제품군이 더 빠릅니다.더 안전할 수도 있지만;승리, 승리하지만 이는 새로운 버전에서는 변경될 수 있습니다.SHA 명령어 세트최신 CPU에서는-pbkdf2
: 사용PBKDF2(비밀번호 기반 키 도출 기능 2) 알고리즘-iter 1000000
매뉴얼 페이지를 인용하여 비밀번호의 기본 반복 횟수(10000)를 재정의합니다.암호화 키를 파생할 때 암호에 대해 지정된 반복 횟수를 사용합니다. 값이 높을수록 생성된 파일을 무차별 대입하는 데 필요한 시간이 늘어납니다. 이 옵션을 사용하면 PBKDF2 알고리즘을 사용하여 키를 파생할 수 있습니다.
반복의 기본값은 문서화되어 있지 않지만 apps/enc.c
다음과 같이 파일에 지정됩니다.
case OPT_PBKDF2:
pbkdf2 = 1;
if (iter == 0)
iter = 10000;
break;
-d
암호를 해독하려면 원래 명령줄 끝에 스위치를 추가하기만 하면 됩니다.
답변2
최근에 최신 버전의 cygwin을 설치했습니다. "openssl"이 경고를 발행하기 시작합니다.
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
이제 암호화에 다음을 사용합니다.
openssl aes-256-cbc -salt -pbkdf2 -in name -out name.aes
해독을 위해 다음을 수행합니다.
openssl aes-256-cbc -d -salt -pbkdf2 -in name.aes -out name
답변3
OpenSSL은 적어도 6년 후에 마침내 이 명령에 꽤 심각한 결함이 있음을 인정한 것 같습니다 enc
(자체 매뉴얼 페이지에서는 이를 "버그"라고 부릅니다). 어쩌면 지금은 수정 중일 수도 있지만 데이터가 너무 중요하다면 다음과 같은 (상대적으로) 더 안전한 도구를 사용하는 것은 어떨까요?GnuPG대신에? 반드시 공개 키 암호화를 사용할 필요는 없습니다. gpg는 전통적인(비밀번호/키 파일만) 암호화도 수행할 수 있습니다.
이것은 에서 발췌한 것입니다.내 다른 답변기본 강조:
OpenSSL~해야 한다gpg가 수행하는 것과 동일한 작업을 모두 수행할 수 있습니다(OpenSSL은 1998년부터 존재했지만 버전 번호가 의미하는 경우 2010년에 버전 1에 도달했습니다). 그러나 실수를 저지르기 쉬워 보안이 크게 저하됩니다. 그리고로부터security.stackexchange.com에 대한 이 기사(2013년 1월부터)그리고 또 다른평판이 287K인 사용자의 경우 이
openssl enc
명령에는 몇 가지 단점이 있을 수 있습니다.OpenSSL에서 사용하는 암호화 형식은 비표준입니다. 이는 "OpenSSL이 수행하는 작업"이며, 모든 OpenSSL 버전이 서로 일관성을 유지하려는 경우 OpenSSL 소스 코드 외에 이 형식을 설명하는 참조 문서는 아직 없습니다. 헤더 형식은 매우 간단합니다.
magic value (8 bytes): the bytes 53 61 6c 74 65 64 5f 5f salt value (8 bytes)
따라서 고정된 16바이트 헤더는 "Salted__" 문자열의 ASCII 인코딩으로 시작하고 그 뒤에 솔트 자체가 옵니다. 그게 다야! 암호화 알고리즘은 언급되어 있지 않습니다. 이를 직접 추적해야 합니다.
암호와 솔트를 키와 IV로 변환하는 과정은 문서화되어 있지 않지만 소스 코드를 보면 OpenSSL 전용을 호출하는 것으로 나타납니다.EVP_BytesToKey()사용자 정의를 사용하는 함수키 도출 함수일부 중복된 해시. 이는 의심스러운 평판(!!)의 MD5 해시 함수에 의존하는 비표준 및 충분히 검증되지 않은 구성(!)입니다. 이 함수는 명령줄에서 변경할 수 있습니다.문서화되지 않은
-md
플래그(!!!); "반복 횟수"는 명령enc
에 의해 설정됩니다.1그리고 변경할 수 없습니다 (!!!). 이는 키의 처음 16바이트가 다음과 같음을 의미합니다.MD5(비밀번호||소금),그게 다야.이건 정말 너무 약해요!PC에서 코드를 작성하는 방법을 아는 사람이라면 누구나 이 체계를 해독하고 초당 수천만 개의 잠재적 비밀번호를 "시도"할 수 있습니다(GPU를 사용하면 수억 개의 비밀번호 가능)."openssl enc"를 사용하는 경우 비밀번호의 엔트로피가 매우 높은지 확인하세요!(즉, 일반적으로 권장되는 것보다 높으며 최소한 80비트를 목표로 합니다.) 또는 전혀 사용하지 않는 것이 더 낫습니다. 대신에 더 강력한 것을 찾으십시오(GnuPG, 비밀번호를 대칭적으로 암호화할 때 더 강력한 KDF와 기본 해시 함수의 여러 반복을 사용합니다.
man enc
"BUGS" 아래에도 이런 것이 있습니다:반복 횟수를 포함하도록 허용하는 옵션이 있어야 합니다.
댓글 중 하나첫 번째 기사심지어 이 문제가 거의 10년 동안 계속됐다고도 합니다.
이 반복 계산 문제는 정말 골치 아픈 문제입니다. 거의 10년 전에 나는 "openssl enc"와 기본적으로 동일한 작업을 수행하지만 반복적인 PBKDF2 해시를 사용하는 "암호화" Perl 스크립트를 만들었습니다. ict.griffith.edu.au/anthony/software#encrypt 이렇게 하면 솔트 처리된 "openssl enc" 파일의 암호가 해독되지만 PBKDF2를 사용하여 다시 암호화됩니다. 이제 OpenSSL 파일 암호화가 개선되었으면 좋겠습니다! –안소니2월 7일 5시 05분
이것은gpg를 사용한 대칭 암호화의 예.
간단히 말해서:
gpg --symmetric --cipher-algo AES256 --output file.gpg file.txt
그리고
gpg --decrypt --output file.txt file.gpg