OpenSSL에 비밀번호를 전달하는 더 안전한 방법은 무엇입니까?

OpenSSL에 비밀번호를 전달하는 더 안전한 방법은 무엇입니까?


pass:"${var}"OpenSSL을 사용하면 bash에서 환경 변수를 비밀번호 로 사용하는 두 가지 방법이 있습니다 env:var.

ps매뉴얼 페이지에서는 로 전달될 때 비밀번호를 읽을 수 있는 것처럼 보이고 pass:"${var}"에서도 가능할 수도 있으므로 어떤 방법이 가장 보안을 제공하는지 궁금합니다 env:var.

OpenSSL 매뉴얼 페이지의 관련 섹션:

암호문 인수

여러 명령은 일반적으로 입력 및 출력 비밀번호에 각각 -passin 및 -passout을 사용하여 비밀번호 인수를 허용합니다. 이를 통해 다양한 소스에서 비밀번호를 얻을 수 있습니다. 이 두 옵션 모두 아래에 설명된 형식의 단일 인수를 사용합니다. 비밀번호 인수가 제공되지 않고 비밀번호가 필요한 경우 사용자에게 비밀번호를 입력하라는 메시지가 표시됩니다. 이는 일반적으로 에코가 꺼진 상태로 현재 터미널에서 읽혀집니다.

패스:비밀번호

실제 비밀번호는 비밀번호입니다. 비밀번호는 유틸리티(예: Unix의 'ps')에 표시되므로 이 형식은 보안이 중요하지 않은 경우에만 사용해야 합니다.

환경:var

환경 변수 var에서 비밀번호를 얻습니다. 다른 프로세스의 환경이 특정 플랫폼(예: 특정 Unix OS의 ps)에서 표시되므로 이 옵션은 주의해서 사용해야 합니다.

답변1

매뉴얼 페이지는 이 문제에 대해 매우 명시적입니다.환경:var방법.

매뉴얼 페이지가 정확합니다. 모든 명령줄 매개변수는 ps를 통해 볼 수 있습니다.모든 사용자들시스템에서.

alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
evil$ ps aux|grep openssl                                                                                                                               
alice      17594  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456

환경 변수를 사용하는 경우 다른 사용자(루트 제외)는 해당 변수의 이름만 볼 수 있고 내용은 볼 수 없습니다.

alice$ OPENSSLPW=123456
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW
evil$ ps aux|grep openssl                                                                                                                               
alice      17713  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW

관련 정보