2011-04-23 4 views
4

나는 회사와 고객의 데이터베이스가 있습니다. 데이터베이스는 고객이 주소 X에 거주하는 고객이있는 질문에 대답 할 수 있어야합니다. 이는 일반적으로 매우 직접적으로 구현하는 것이 일반적입니다.몇 백만 항목의 보안 해시

내가 피하고 싶은 것은 공격자가 어떻게 든 모든 회사 - 고객 관계를 찾을 수 있다는 것입니다. 이 데이터베이스는 웹 서버에 상주하며 모든 데이터의 무차별 다운로드를 피하기 위해 쿼리가 제한됩니다.

그러나 서버가 손상되어 공격자가 전체 데이터베이스 및 서버에 저장된 개인 키에 액세스 할 수 있다면 어떻게해야합니까? 공격자가 회사 목록 또는 클라이언트 목록을 찾을 수는 있지만 클라이언트와 관련된 회사를 찾아 낼 수 없어야하며 클라이언트의 주소를 검색 할 수 없어야합니다.

클라이언트는 고유 한 ID가 아닌 주소로 식별됩니다. 우리 나라에는 약 500 만 개의 서로 다른 주소가 있습니다. 주소를 보호하기 위해 보안 해시를 사용하지만 5 백만 개의 해시를 계산하고 해시에서 주소로 매핑을 만드는 것은 매우 쉽습니다. 해시가 소금에 절인 경우에도.

내가 생각할 수있는 유일한 것은 모호함을 통한 보안입니다. 해시 함수가 명확하게 인식 할 수없고 컴파일 된 코드로되어 있는지 확인하고 공격자가이 모든 것을 파악할만큼 충분히 똑똑하지 않기를 바랍니다.

이 작업을 실제로 안전하게 할 수있는 방법이 있습니까?

EDIT : a3_nm 및 Nick Johnson의 의견은 물론 정확합니다. 공격자가 모든 데이터에 액세스 할 수 있다면 보안을 설정할 수 없습니다. 이 (명백한) 결함을 지적 해 주셔서 감사합니다.

그래서 데이터베이스에 저장되지 않은 것이 필요합니다. 회사와 클라이언트 만 자신의 데이터에 액세스 할 수 있도록하기 위해 자신의 암호로 암호화 할 수 있습니다. 따라서 회사의 고객 목록은 해당 회사의 암호로 암호화되며,이 암호는 서버에 저장되지 않으며 각 요청과 함께 보내야합니다. 공격자가 암호가 포함 된 요청을 가로 챌 수 없다고 가정하는 것이 좋습니다.

또는이 사고 방식에도 또 다른 (명백한) 결함이 있습니까?

+1

데이터가 노출되어있는 경우 공격자가이 정보에 액세스하지 못하도록하고 싶지만 여전히 자신이 할 수 있기를 원하십니까? 불가능한 이유를 지적하지 않아도되기를 바랍니다. –

답변

3

확실한 것은 확실하지 않습니다. 서버에 대한 총 액세스 권한이있는 공격자가 서버가 응답해야하는 쿼리에 대한 응답을 얻지 못하도록하려는 것 같습니다. 공격자가 서버에 액세스 할 수 있으면 서버를 사용하여 서버가 응답 할 수있는 모든 쿼리에 응답 할 수 있습니다.이를 해결할 방법이 없습니다.

+0

나는이 질문에 대한 나의 편집에 동의한다. – Peter

1

데이터베이스를 웹 서버에 직접 저장하면 안됩니다. 웹에서 직접 액세스 할 수없는 서버에 포장하십시오. 그것은 모든 attaker에게 그것을 훨씬 더 어렵게 만들 것입니다. 나는 당신을위한 준비된 해결책을 가지고 있지 않지만, 시작하는 것이 더 좋은 점 : 같은 문제에 직면 해있는 신용 카드 정보. 이러한 경우에 대한 DB 모델링을위한 Google과 솔루션을 찾을 수 있습니다.

+0

데이터베이스를 다른 서버에 배치한다고해서 근본적으로 더 안전하지는 않습니다. 기껏해야 공격자에게 약간 더 힘들어 할 것입니다. 최악의 경우 전혀 중요하지 않습니다. 하지만 신용 카드 정보에 대한 힌트를 주셔서 감사합니다. – Peter