2011-08-03 3 views
1

이것은 AES_ENCRYPT를 사용하여 MySQL 데이터베이스에 삽입되는 데이터에 대한 암호화를 생성하는 것과 관련된 보안 문제입니다.AES_ENCRYPT 키 저장

데이터를 암호화하는 데 사용되는 키를 저장할 최적의 위치는 무엇입니까? 분명히 데이터베이스에 없습니다! :)

답변

1

음, 다양한 옵션이 없습니다. 어디에서나 키 (데이터베이스, 코드, 파일)를 입력하면 다른 사람들이 기계에 액세스 할 수있는 한 쉽게 찾을 수 있습니다.

당신이 할 수있는 일은 암호를 기반으로 다른 키를 사용하여 해당 키를 암호화하고 (적어도 로컬에 있지는 않지만 어디에도 저장되지 않음) 응용 프로그램을 시작할 때 해당 암호를 묻는 것입니다. 이렇게하면 암호화 된 AES_ENCRYPT 키를 데이터베이스에 저장하고 암호로 로그인 한 후 암호를 해독하여 사용을 시작할 수 있습니다.

1

Security by obscurity!

웹 서버가 유출 된 경우 공격자는 코드가 저장된/암호 해독을 수행 할 수있는 키를 찾을 수 있어야하므로 공격자가 키에 액세스 할 수 있으며 코드는 키를 발견 한 위치를 설명합니다 . 이것이 실제 가치를 더하는 유일한 시나리오는 응용 프로그램 외부의 데이터 (예 : 백업 테이프)를 보호하는 경우입니다. 그러나 DBM은 쿼리를 최적화하고 더 큰 데이터 풋 프린트를 생성하는 기능을 손상 시키므로 백업과 같은 목적으로 개별 데이터 항목이 아닌 백업이나 파일 시스템을 암호화하는 것이 훨씬 더 중요합니다.

응용 프로그램 내에 영구적으로 저장되어 있지 않은 키 (예 : SSL을 통해 제공되는 HTTP 기본 인증 암호)를 사용하더라도 데이터가 손상 될 수있는 위험이 여전히 많이 있으며 공유에 문제가 있습니다 서로 다른 사용자 간의 데이터

현명한 답변을 얻으려면 위협 모델이 무엇인지, PCI-DSS와 같은 외부 제약 조건이 있는지 알아야합니다.

+0

올바른가요? 제가하는 일은 2 단계 키를 유지하는 것입니다. 절반은 데이터베이스에 임의의 값으로 저장되고 나머지 절반은 PHP 스크립트에 저장됩니다. 누군가가 PHP 스크립트와 데이터베이스에 액세스 할 수 있다면 어쨌든 할 수있는 일은 없습니다. – Ben

+0

누군가가 PHP에 액세스 할 수있는 것처럼 데이터베이스에 절반을 저장하는 것은 의미가 없으므로 데이터베이스에도 액세스 할 수 있습니다. – mgutt