2011-04-12 2 views
0

클라이언트 (Android)에서 암호화 된 파일을 수신하는 HTTP 서버 (CherryPy 및 Python)를 구현했습니다. 나는 OpenSSL을 사용하여 업로드 된 파일의 암호를 해독합니다. 현재 openssl -enc -pass file:password.txt -in encryptedfile -out decryptedfile을 사용하여 서버 측에서 암호 해독을 수행합니다. 보시다시피 openssl에서 사용하는 비밀번호는 일반 텍스트 파일 (password.txt)에 저장됩니다.서버 (Linux, Python, CherryPy)에 Openssl 암호를 저장하기위한 보안 옵션

이 OpenSSL 암호를 저장하는 더 안전한 방법이 있습니까?

감사합니다.

답변

0

상위 FD로 전달하고 명령 줄에서 해당 FD를 사용하십시오. 프로세스가 실행되기 전에 FD를 설정하려면 preexec_fn 인수를 사용해야합니다.

subprocess.Popen(['openssl', ..., 'file:/dev/fd/12', ...], ..., 
    preexec_fn=passtofd12(password), ...) 
+0

감사합니다. 왜 파일 디스크립터 (FD)를 사용하는 것이 더 안전한 지 설명해 주시겠습니까? –

+1

암호를 저장하기 위해 임시 파일이 필요 없기 때문에; 파이썬 프로세스는 openssl 프로세스에 직접 삽입 할 수 있습니다. –

0

사용자의 프라이버시 및 기타 이유로 비밀번호는 일반적으로 서버에 저장되지 않습니다. 일반적으로 사용자는 서버에 일종의 해시로 저장된 암호를 선택합니다.

사용자는 사용자 입력을 기반으로 제공된 해시에 대해 저장된 해시를 검사하여 웹 응용 프로그램을 인증합니다. 클라이언트가 인증되면 세션 식별자가 제공되어 서버 리소스를 사용할 수 있습니다. 이 시간 동안 사용자는 예를 들어 파일을 업로드 할 수 있습니다. 서버에서 파일의 암호화는 호스팅 서버가 적절하게 보안되고 다른 문제가없는 것으로 가정 할 때 불필요합니다.

이 경우 인증 메커니즘은 명확하지 않으며 위험한 위협이나 업로드 된 파일의 수명주기도 아닙니다.

서버에 암호화 된 파일과 일부 유형의 암호가있는 것 같습니다. 전송 단계에서 또는 서버의 저장소로 고려되는 암호 보호입니까? HTTPS 프로토콜은 파일/데이터의 전송과 관련된 위협으로부터 보호 할 수 있습니다. 귀하의 설명에서 알 수 있듯이 우려는 서버 측의 스토리지로 보입니다.

암호를 서버에서받은 후에 (개별적으로 또는 마스터 암호를 사용하여) 암호를 추가하면 다른 보안 계층이 추가되지만이 방법은 (1)을 암호로 저장해야하므로 오류가 발생하지 않습니다 (2) 파일에 액세스하기위한 일반 텍스트로 된 서버 또는 암호를 요구하는 처리의 일부로 필요한 경우 관리자가 수동으로 입력해야합니다. 암호로 암호화 된 자원은 사용자가 사용할 수 없게됩니다.

나는 무엇이 계속되고 있는지 완전히 알지 못하지만 가장 안전한 방법은 웹 응용 프로그램을 다시 작성하고 디자인과 요구 사항을주의 깊게 생각하는 것입니다.

+0

응답 해 주셔서 감사합니다. 유스 케이스를 설명하겠습니다. –

+0

Android 기기에 서버에 업로드하려는 암호화 된 파일이 있습니다. 파일 전송 크기가 크고 따라서 오프라인으로 암호화되므로 (배터리 및 CPU 절약을 위해) HTTPS가 아닌 HTTP를 사용하여 파일 전송이 수행됩니다. 클라이언트가 암호화 키를 알지 못할 수도 있습니다. 당신이 말했듯이 서버가 "안전"하다고 가정하고 서버에 일반 텍스트로 키를 저장하거나 클라이언트가 보안 연결 (HTTPS)을 통해 암호를 전송할 수 있습니다. 서버는 SHA1 해시를 암호 해시와 일치시킨 다음 암호로 파일을 암호화 할 수 있습니다. –

+1

@Soumya Simanta : HTTP 연결은 HTTPS보다 MITM 공격에 더 취약하다는 점에 유의하십시오. 파일의 메시지 요약을 HTTPS의 암호와 함께 전송하고 HTTP로 파일을 전송하는 것을 고려하십시오.그러나 나는 HTTPS에서 모든 것을 할 것이다. 두 방법 모두 동일한 작업이 수행되므로 차이는 공칭으로 보입니다. HTTPS는 전송과 암호화가 모두 병렬로 처리되기 때문에 속도가 빠릅니다. 전체 파일을 전선으로 전송하기 전에 암호화해야하는 대신 HTTPS가 더 빠릅니다. 서버는 해독하지 않아도 리소스를 저장합니다. – sosc