2013-08-05 7 views
0

저는 PHP로 웹 사이트를 만들고 MySQL 데이터베이스에 사용자의 개인 정보 (이름, 주소, 전화 번호)를 저장해야합니다. 정보가 사용자에게 표시됩니다.개인 정보를 어떤 열쇠로 암호화해야합니까?

AES 암호화를 사용하여 데이터를 암호화 할 계획입니다. 사용자 암호를 사용하는 것은 사용자에게 친숙하지 않은 것 같습니다. 사용자가 데이터를 표시해야 할 때마다 암호를 입력해야하기 때문입니다.

사용자 ID, 해시 된 암호 및 사용자 이름이 추가 된 다음 해시 된 세션에 저장된 문자열을 사용하고 싶습니다. 이것은 안전한 암호 키입니까?

답변

2

아니요, 안전하지 않습니다. 모든 값은 데이터베이스에 있습니다. 결과적으로 데이터베이스에 액세스하는 모든 사용자는 키를 파생시키고 값을 해독하고 데이터를 읽을 수 있습니다.

독창적 인 아이디어가 더 좋습니다. SCRYPT와 같은 키 유도 알고리즘의 출력을 사용하십시오 (너무 약한 암호는 해시하지 말고 암호 키로 사용자의 암호를 사용하십시오). 그런 다음 사용자 세션에 해당 버전을 저장하십시오. 물론 세션 데이터가 안전하게 저장되고 사용자 로그 아웃/유휴 후에 완전히 삭제되었는지 확인해야합니다. 한 가지 안전한 방법은 데이터를 파일에 직접 쓰고 세션에 파일 이름을 저장 한 다음 파일을 안전하게 삭제하는 것입니다 (예 : 분쇄 명령 또는 무작위 데이터로 덮어 쓰기).

+0

알 수 있습니다. 하지만 키가'hash ($ unhashed_password. $ id. $ username)'이면 어떨까요? 열쇠는 여전히 저장됩니까? 사용자가 로그인하면 파생되기 쉽기 때문에이를 사용하는 것이 더 좋지만 공격자가 파생하는 것은 불가능합니다. unhashed 비밀 번호는 데이터베이스에 저장되지 않습니다, 그래서 나는 이것이 안전하다고 가정합니다. – FalconC

+0

@FalconC 그 열쇠도 안전하지 않습니다. 첫째, 해싱은 좋은 키 유도 함수가 아닙니다. 암호를 추측하려는 오프라인 공격을 쉽게 탑재 할 수있는 방법입니다. 계산하기 어려운 키 유도 함수가 필요합니다. Wose, 대부분의 해시 함수에 대해 암호의 해시를 지정하면 언급 한 해시를 계산할 수 있습니다. 이를 길이 확장 공격이라고합니다. http://en.wikipedia.org/wiki/Length_extension_attack – imichaelmiers

+0

나는 모양을 가질 것이다. 고맙습니다. – FalconC