목표 :사용자의 비밀번호로 보호되는 개인 키와 쌍을 이루는 공개 키로 암호화하여 웹 응용 프로그램 데이터베이스의 PII를 보호합니까?
I 사용자가 질문을 작성하고 사용자 정의 웹 응용 프로그램에 다른 사용자의 정보를 수집 (PHP/MySQL을이 강해 호스팅 환경에서) 및 수집 된 데이터를 보호 할 수 있도록하고 싶습니다.
배경 :
모든 사용자가 답변을들은 개인 식별 정보 (PII)으로 해석 할 수없는만큼 일반적입니다 기본 질문, 따라서 그것을 보호하기 위해 내 책임을 제한하지만, 사용자가 자신의 누가 만들 질문은 가능성이있는 PII를 요구할 것입니다.
나는이 정보를 보호하여 호스팅 계정 또는 데이터베이스가 손상되었거나 (또는 둘 다!), PII가 상당한 양의 작업없이 복구 될 수 없도록 보호합니다. 이론적으로 작은 부분 만 복구 할 수 있습니다.
제안 된 솔루션 :
의 MySQL의 내장 PII 테이블을 암호화하는 데 사용되는 AES_ENCRYPT()/AES_DECRYPT()
기능, 암호는 호스팅 계정이 손상되었다, 그래서 만약 호스팅 계정에 저장해야 데이터를 가정 쉽게 읽을 수 있습니다.
사용자의 암호가 잘 보호되어 있기 때문에 (소금으로 해시 됨) 인증 과정에서 일반 텍스트 암호를 캡처하고 암호화 한 다음 사용자가 로그 아웃 할 때까지 PHP 세션에 저장하려고합니다.
개인 키가 사용자의 암호 + salt로 암호로 보호되어 공용/개인 키 조합이 각 사용자에 대해 만들어집니다.
그런 다음 해당 사용자의 사용자 정의 질문에 기반한 PII 데이터가 DB에 추가되면 사용자의 공개 키를 사용하여 앱을 통해 수집 한 개인 식별 정보를 암호화합니다. 데이터를 읽을 때 (사용자가 로그인 한 경우에만) 사용자의 개인 키 (암호 + 소금으로 잠금 해제 됨)로 데이터가 암호화되지 않습니다.
혜택 I은 참조 :
서버가 완전히 손상 최악의 시나리오에- , 응용 프로그램 코드는 암호화 키를 찾을 수 읽기, PHP 세션 파일은 사용자의 암호, 다음 항목을 찾을 해독 해당 사용자와 연관된 PII 테이블의 암호가 해독되면 만 현재 로그인 한 사용자의 질문에서 수집 한 PII를 복구 할 수 있습니다. 로그인하지 않은 모든 사용자는 안전합니다.
- DBA 또는 유사한 사람도 PII를 읽을 수 없습니다.
단점이 내가 볼 수 있습니다. 그들이에 로그온 한 상태
- 사용자 암호는 복구 할 수있는 형태로 저장되어있는 데이터에 대한 액세스를 푸는 것이 자신의 암호를 잊어
- 사용자를.
- 비교적 작은 비트의 데이터는 암호화로 인해 DB에서 훨씬 많은 공간을 차지합니다.
내 질문 : 더 좋은 방법이 있나요?
서버가 손상되는 즉시 보호를 보장하는 것은 거의 불가능합니다. 누군가가 php-code에 접근하자마자 그는 로그인시 평문 파일에 모든 암호 (또는 키 쌍)를 쓰도록 코드를 쉽게 수정할 수 있습니다. 소금이 알려 지자 마자 해시는 보호를 위해 저장되지 않습니다. – Fge
예, 침해가 발견되지 않는 한 비밀번호를 캡처 할 수 있습니다. 아이디어는 봉쇄이며 누출을 최소화합니다. 바라건대, 위반이 상당히 빨리 발견되고 모든 사용자가 그 시간 내에 로그인하지 않을 수 있기 때문에 적어도 일부 데이터는 여전히 보호됩니다. –
정확히 PHP 세션에 저장 하시겠습니까? 로그인시 개인 키만 해독하면 메모리에 추가 암호화 키가 필요한 이유가 표시되지 않습니다. –