it-swarm-korea.com

응용 프로그램 이진에 개인 비대칭 키를 저장 하시겠습니까?

공유 비밀 키에 대한 데몬 스타일 프로세스 (즉, 사용자 상호 작용 없음)에 액세스하여 암호화 된 공유 데이터 파일에 액세스하고 싶습니다. 동일한 암호화 데이터에 액세스하는 사용자 응용 프로그램은 공유 비밀 키를 사용자의 OS 키 체인 (예 : OS X 키 체인 또는 그놈 키링 등)에 저장합니다. OS 키 체인은 사용자의 로그인 (또는 다른 사용자 별) 암호로 비밀 키를 보호합니다.

여기서 암호화는 서버와 클라이언트간에 공용 네트워크를 전송할 때 데이터를 보호하는 데 사용됩니다. 문제의 데이터는 과학 실험의 원시 데이터입니다. 대체로 귀중한 것은 아니지만 (예를 들어 공격자가 암호화를 위반하여 데이터를 탐색 할 가능성은 거의 없음) 일부는 잠재적으로 매우 가치가 있으며 사용자는 공개적으로 공유 할 때까지 세부 정보를 비공개로 유지하려고합니다 (예 : 보호) 네트워크의 일반 관찰자로부터). 과학적 분석 없이는 데이터의 가치를 판단하기가 어렵 기 때문에 암호화되지 않은 와이어를 통과하는 사용자의 활동 (쿼리 포함)을 관찰하면 관찰자에게 데이텀의 가치에 대한 힌트를 얻을 수 있습니다.

Daemon-process는 시스템의 조회 서버입니다. 공유 데이터를 읽고 쿼리를 처리 한 후 결과 세트에 대한 식별자를 클라이언트에 리턴 한 다음 식별 된 데이터를 공유 저장소에서 가져옵니다.

암호화 된 데이터를 사용자의 로컬 워크 스테이션/노트북에 동기화 할 수 있으므로 디스크의 데이터 암호화는 결정된 공격자에게 방해가됩니다. 우리는 also 사용자가 쿼리 서버를 로컬로 실행할 수 있도록 허용합니다 (여전히 init.d/launchd로 시작됨). 데몬에 저장된 비밀 키를 보호하기 위해 가능한 모든 작업을 원합니다. 주요 위험은 결정된 악의적 인 사용자가 시스템의 데몬에서 비밀 키를 발견 할 수 있다는 것입니다. 해당 키가 노출되면 키를 변경하고 모든 사용자를 업데이트 한 다음 데이터베이스를 다시 암호화해야합니다.

데몬 프로세스를위한 공유 비밀 키를 저장하는 가장 좋은 방법은 무엇입니까? 디스크에 키를 넣고 파일을 디스크에 암호화 할 수 있지만 데몬 프로세스는 해당 파일을 해독 할 키가 있어야합니다. 이것은 원래의 암호화 된 데이터에 대한 공유 비밀 키를 갖는 것과 같습니다. 내 순진한 접근 방식은 키를 응용 프로그램의 이진 파일에 저장하는 것이지만 이것이 최선의 방법이라고는 상상할 수 없습니다. 어떤 충고?

12
Barry Wark

이것은 빠르게 '거북이 거북 거림'문제로 바뀝니다. 암호화를 중단하고 다른 방법에 의존하는 시점을 결정하기 만하면됩니다. 목표는 해커를 결정하지 않은 일반 사용자를 막아 보호 된 데이터를 쉽게 얻는 것입니다.

DB 암호와 SSL 인증서 암호를 저장 해야하는 웹 응용 프로그램에서 비슷한 방법으로 씨름했습니다. 내가 한 일은 different 마스터 비밀번호를 사용하여 앱의 구성 파일에서 해당 비밀번호를 암호화하는 것이 었습니다. 마스터 비밀번호는 애플리케이션 시작 스크립트에서 설정 한 환경 변수로 저장되었습니다. 마스터 비밀번호는 시작 스크립트에서만 설정되었으므로 표준 UNIX 파일 권한을 사용하여 스크립트를 실행할 수있는 기능과 함께 단일 사용자에게 스크립트에 대한 액세스 권한을 부여하는 것이 쉬웠습니다.

내 생각은 그렇지 않으면이 스크립트에 액세스하기 위해 이미 루트가되어야한다는 점이었습니다.이 시점에서 실제로 중요하지 않습니다. 루트를 신뢰할 수 없거나 서버가 해킹당한 경우 다른 문제가있을 수 있습니다.

또한, 작동 방식에 대한 모든 세부 사항이 의도적으로 잘 문서화되어 있지 않다는 점에서 모호성을 통해 약간의 보안이 있습니다. 시작 스크립트의 작동 방식을 역 추적 한 다음 어떤 알고리즘이 사용되는지, salt + plantext의 형식을 지정하는 방법 등을 파악해야합니다. DB 비밀번호를 얻고이 정보를 얻으려면 이미 알고 계실 것입니다. DB 서버에 직접 연결됩니다.

12
AngerClown

평소와 같이 시작하기 가장 좋은 곳은 몇 가지 질문을하는 것입니다. 위협 모델은 무엇입니까? 무엇을 보호하려고합니까? 누구로부터 보호하려고합니까? 처음에 암호화를 사용하는 이유는 무엇입니까? 이 중 어느 것도 질문에서 명확하지 않습니다. (Crypto는 마법의 요정 가루가 아닙니다.) 이러한 질문에 대한 답이 없으면 해결책을 제시 할 수 없습니다. 올바른 해결책은 달성하려는 목표에 달려 있습니다.

일반적으로 말하자면이 문제에 대한 훌륭한 해결책은 없을 것입니다. 사용자의 개입없이 시스템을 시작할 수있게하려면 개인 키가 디스크 어딘가에 일반 텍스트로 표시됩니다 (또는 일반 텍스트로 표시). 다른 사람들이 제안한 것처럼 "거북이를 완전히 쫓아 내십시오".

개인 키가 파일 시스템 액세스 제어에 의해 보호되도록하는 것이 한 단계입니다. 예를 들어, 일반 사용자는 읽을 수 없지만 루트는 읽을 수 있습니다.

각주 : 정교한 접근 방식이 있지만 저렴한 환경에는 적합하지 않을 수 있습니다. (1) 한 가지 더 안전한 접근 방법은 개인 키를 서버에 연결된 하드웨어 보안 모듈에 저장하는 것입니다. 서버가 손상되면 소프트웨어는 개인 키를 도용 할 수 없지만 하드웨어 보안 모듈이 임의의 메시지를 서명/복호화하도록 지시 할 수 있습니다. (2)보다 정교한 접근 방식은 TPM을 사용하고 개인 키를 특정 소프트웨어에 잠그는 것입니다. 불행히도 현재의 OS는 이에 대한 훌륭한 지원을 제공하지 않으므로 sysadmin으로 스스로를 수행하는 것은 매우 어려운 일입니다. 상당한 개발자 지원이 필요합니다.

7
D.W.

배리, 난 당신의 솔루션을 좋아하고 한 걸음 더 나아갈 생각이 있습니다. 키 파일에서 400을 사용하도록 자동으로 설정된 새 컴퓨터를 만드는 데 사용하는 컴퓨터 이미지를 유지 한 다음 부팅 할 때 서버 소프트웨어를 루트로 시작하고 키를 메모리로 읽고 키를 삭제 한 다음 서버 소프트웨어를 실행하는 사용자를 전환합니다 루트가 아닌 계정에.

1
devadvocate

완벽을 기하기 위해 우리가 선택한 솔루션은 @SteveSyfuhs '와 @AngerClown의 답변의 조합이었습니다. OS X에서는 시스템 키 체인 (/Library/Keychains/System.keychain). Linux에서는 루트가 소유 한 권한 비트 400 (즉, 소유자 만 읽기 전용)을 가진 파일에 암호화 키를 저장합니다.

1
Barry Wark

데몬 계정에 사용 가능한 키 체인이 없습니까?

1
Steve