My Company의 MySQL DB에서 고객 정보를 암호화하는 가장 좋은 방법은 무엇입니까?


34

오래 전부터 우리 회사는 MySQL DB를 버리고 도난당한 침입 사건이있었습니다. 경영진은 현재 매우 불안해하며 다른 보안 조치를 취하는 것 외에도 DB의 모든 고객 정보 (전자 메일 주소, 집 주소, 이름 등)를 암호화하려고합니다.

어디서부터 시작해야할지 모르겠습니다. 우리는 PHP 응용 프로그램을 실행합니다. 분명히 이것은 우리가 최소화하고자하는 추가 오버 헤드를 생성 할 것입니다. 또 다른 우려는 새로운 암호화 된 필드가 사용될 때마다 코드를 변경하는 것이 어려울 것입니다.

이것은 불필요한 예방 조치로 나를 공격하지만 관리는 제대로 된 것처럼 보입니다.

이 사용 사례에 가장 적합한 암호화 알고리즘/방법 유형은 무엇입니까?

+8

서버 보안을 강화하십시오. 그곳에 시간을 보내십시오. 모든 데이터를 암호화하는 것이 극단적 인 것처럼 보입니다. 뒤로 밀면 양복이 모든 것을 알지 못합니다. 13 feb. 122012-02-13 18:37:11

+4

데이터베이스 액세스는 모델의 저수준 변경만으로 데이터를 암호화하는 데 필요한 지점까지 격리되어야합니다. 문자 그대로 데이터 영역/모델/비즈니스 객체 외부의 어떤 것도 변경되거나 데이터가 암호화된다는 것을 알고 있어야합니다. 내부 저장 공간이 변경되어 모델을 사용하는 방식을 변경해야하는 경우 앱이 제대로 작성되지 않습니다. 13 feb. 122012-02-13 18:43:51

  0

데이터가 처음에 어떻게 도난 당했는지에 대해 더 많은 정보를 제공하는 것이 도움이 될 수 있습니다. 코딩 문제입니까? 서버 설정 문제입니까? 민감한 데이터는 암호화를 사용하여 화이트리스트 머신에서만 액세스 할 수있는 별도의 서버에 보관하는 것이 가장 좋습니다. 소금과 해시를보세요. 13 feb. 122012-02-13 18:44:20

  0

@Paul 나는 당신에게 거기에 동의하지만, 사령부 사슬에서 꽤 낮습니다. 프로젝트 매니저는 모든 민감한 고객 정보를 암호화 할 수있는 실행 가능한 옵션을 조사해 달라. 어쩌면 나는 그들이 원하는 것이 불필요하고 해킹 될 수 있다고 상급을 보여주기위한 어떤 방법을 생각해 낼 필요가있을 것입니다. 13 feb. 122012-02-13 18:44:28

+2

@earthmeLon "소금과 해싱"은이 질문과 아무 관련이 없습니다. "소금과 해시를 던져라!"= 보안. 그것이 무엇인지 모르는 경우 그것을 제안해서는 안됩니다. 13 feb. 122012-02-13 18:46:28

+1

귀하의 질문은 해커가 귀하의 내부 시스템과 DB에 액세스 할 수 있음을 의미합니다. 당신은 당신이 정말로 필요로하는 것을 결정해야합니다 - 당신의 상사를 한두 달 정도 행복하게 만들거나 훌륭한 기업 보안을 구현하십시오. 13 feb. 122012-02-13 18:46:34

  0

@eysikal 나는 당신의 말을 듣는다. 나는 그들에게이 스레드를 보여주기 시작할 것입니다. 13 feb. 122012-02-13 18:46:46

  0

@earthmeLon 네, 그것은 분명히 우리의 데이터가 어떻게 손상되었는지 알지 못한다는 IT 부서의 목적에 도움이되지 않습니다. 우리 사이트에서 실행하는 블로깅 또는 포럼 소프트웨어의 취약점/보안 허점이라고 생각됩니다. 13 feb. 122012-02-13 18:46:54

  0

@meagar 나는 소금과 해싱에 대해 매우 잘 알고 있습니다. 내가 말했듯이, 그의 의도와 문제는 분명하지 않습니다. 나는 사용자에게 데이터베이스와 정보 보안에 대한 더 많은 정보를 조사하는데 사용할 수있는 몇 가지 핵심어를 제공하려고 노력하고있다. salting/hashing은 저장된 정보에 보안을 추가하는 데 매우 유용한 정보입니다. 13 feb. 122012-02-13 18:48:02

+1

@eysikal 고객 데이터를 암호화하는 데 "불필요하고 해킹당한 것"이 없습니다. 그것은 절대적으로 * 필요하며, 사업을하는 곳에 따라 법으로 요구됩니다. 이미이 일을하지 않은 것은 완전히 무책임한 일입니다. 13 feb. 122012-02-13 18:48:14

  0

@eysikal 로컬 호스트에서 패스워드가 필요없는 루트 mysql을 열어 주셨을 것입니다. 이것은 정보를 도난당하는 일종의 물건입니다. 13 feb. 122012-02-13 18:49:41

+2

@earthmeLon 다시 말해서 소금과 해시는 키워드로도 원격으로 적용 할 수 없습니다. 그는 안전하게 암호를 저장하는 것에 대해 이야기하는 것이 아니며, "되돌릴 수있는 암호화 *"를 사용하여 "전자 메일 주소, 집 주소, 이름"을 저장하는 것에 대해 이야기합니다. 유용한 키워드가 필요하면 "[PII 보안] (https://www.google.com/?q=security+PII)"을 시도하십시오. [개인 식별 정보] (http://en.wikipedia.org/wiki/Personally_identifiable_information)의 안전한 저장 공간은 ** 거대한 ** 거래이며, 고객 데이터 저장을 시작하기 전에 해결해야하는 정보입니다. 13 feb. 122012-02-13 18:52:03

+1

@meagar 사용자 비밀번호와 같은 민감한 정보는 단방향으로 암호화됩니다. 우리는 지불 정보를 저장하지 않습니다. 이름, 주소 등을 암호화하는 것이 일반적입니까? 이러한 유형의 필드를 암호화되지 않은 상태로 두는 것이 "완전히 무책임한"것이라면 나는 거기에있는 웹 앱의 80 %가 "무책임하다"고 추측합니다. 13 feb. 122012-02-13 18:52:39

  0

@eysikal mysql 인젝션을 살펴보십시오. 모든 사용자 입력을 sanitize/normalize해야합니다. 여기에는 _POST, _GET 및 COOKIES가 포함됩니다. 그 불쾌한 쿠키를 잊지 마세요. mysql_real_escape_string(); 13 feb. 122012-02-13 18:53:16

  0

@meagar 모델에 대해 동의합니다. 불행히도, 잘 알고 있듯이 모든 것이 올바르게 수행되는 프로젝트에서는 항상 작업하지 않습니다. 앱에는 분리보기/모델/db 로직 형식이 있지만 완벽하지는 않습니다. 우리가 사냥해야 할 패러다임을 따르지 않는 많은 "루즈 (rouge)"쿼리가 있습니다. 13 feb. 122012-02-13 18:55:48

  0

@eysikal 시스템을 분류하지 않으면 데이터를 암호화해도 아무런 변화가 없습니다. 예 : 데이터베이스로 서버에 액세스하면 암호화 키에 대한 액세스 권한이 없는지 확인해야합니다. 달걀과 바구니에 관한 것이고 한번에 모두 파괴시키지 않는 것 : P 13 feb. 122012-02-13 18:55:55

  0

@eysikal 내가 말했듯이 (법률에 의해 요구 될 가능성이 높다) (http://en.wikipedia.org/ wiki/개인 식별 가능 정보 # In_privacy_law). 무지는 핑계가 아니며 "다른 모든 사람들은 그렇게하지 않습니다"는 핑계가 아닙니다. 데이터가 손상되어 PII가 도난당한 것으로 판명되면 큰 법적 문제가 발생할 수 있습니다. 13 feb. 122012-02-13 18:57:23

+3

@meagar - Facebook API에 액세스하여 수천 명의 사용자 정보를 수집 할 때 불법이라고 제안합니까? 당신이 말하는 PII "법"은 SSN의 CC 정보 등 기본 정보가 아닌 정보를 안전하게해야한다는 것을 의미합니다 13 feb. 122012-02-13 19:06:00

  0

"AES php"에 대한 google의 첫 번째 결과 http://www.phpaes.com/ http : //php.net/manual/en/ref.mcrypt.php 13 feb. 122012-02-13 18:43:37

  0

새로운 질문이이 질문의 사본으로 끝나고 제공 할 수있는 더 나은 대답이 있기 때문에이 질문을 다시 열어 드리겠습니다. 10 may. 162016-05-10 15:41:05

49

여기 MySQL에서 이것을 수행하는 방법에 대한 좋은 글이 있습니다 : http://thinkdiff.net/mysql/encrypt-mysql-data-using-aes-techniques/.

256 비트 키가있는 AES를 사용하는 것이 좋습니다. 가장 일반적인 방법은 지금 당장 시행되고있는 표준입니다. 256 비트 AES 키는 최신 컴퓨팅 성능에 대해 안전 할만큼 충분한 크기로 간주됩니다.

데이터베이스를 암호화하기에는 과도하다고 생각하는지 여부에 관계없이 좋은 생각입니다. 데이터가 매우 민감하지 않더라도 고객 기록을 잃어 버리면 회사에 매우 당혹 스러울 수 있으며 향후 고객의 신뢰와 사람들의 데이터 이전 의사에 부정적인 영향을 미칠 수 있습니다. 데이터베이스의 전체 내용을 암호화하는 것은 업계 표준이 아니지만 추세는 그렇게 움직이고 있으며 더 강력한 보안 태세를 채택 할 수는 없습니다. 그 밖의 것이 없다면, Defense-In-depth 구현의 또 다른 항목으로 생각하십시오.

http://www.symantec.com/connect/articles/secure-mysql-database-design - 응용 프로그램을 확인하기위한 다른 것들에 대한 조언을 제공하는 보안 데이터베이스 시스템 디자인에 대한 기본 지식을 제공합니다.

+5

이 방법은 보안 수준이 낮습니다. 암호화 모드가 ** 안전하지 않은 ECB 모드 **로 다시 복귀하기 때문에 이러한 접근 방식이 적용됩니다. 04 sep. 142014-09-04 17:14:25