2014-01-17 2 views
4

사용자 정보를 일반 텍스트로 저장하는 모바일 앱에 대해이 article이 방금 눈치 챘습니다. 나는 SHA-512 해시 함수를 사용하여 서버에 사용자 암호를 저장하는 것에 관심을 기울 였지만 장치 자체에 개인 정보를 저장하는 가장 좋은 방법은 분명하지 않다.iOS 기기에서 개인 사용자 데이터의 안전한 저장

나는 분명히 사용자 이름과 암호에 대해서만 이야기하고있다. 내 앱이 상호 작용하는 데이터는 전혀 민감하지 않으며 데이터에 대해 일종의 대칭 암호화/암호 해독을 구현할 수 있음을 알고 있습니다.

사용자 편의를 위해 사용자가 앱을 사용할 때마다 입력하지 않아도되도록 사용자 이름과 비밀번호를 로컬에 저장하는 옵션을 사용자에게 제공하고 싶습니다. 그러나 나는 사용자가 여러 다른 목적으로 동일한 암호를 재사용하는 경향이 있다는 것을 알고 있습니다. 즉, 사용자의 암호를 안전하게 유지하기 위해 예방 조치를 취해야 함을 의미합니다. 편리함과 보안 사이의 고전적인 긴장감.

이 정보를 로컬에 저장하는 것은 단지 끔찍한 생각입니까? 아니면 이것을 안전하게 암호화하는 비교적 간단한 방법이 있습니까? iOS 및 Android O/S가 이에 대한 도움을 제공합니까?

철저한 답변을 찾는 것은 아니지만 조사, 기사 링크, 책 등의 주제가 정말 감사 할 것입니다. 대단히 감사합니다. 이것이 중복 질문 인 경우, 여전히 현재로 간주되는 답변을 제공하는 게시물로 이동하십시오.

대단히 감사합니다!

답변

2

장치의 모든 데이터는 장치 ID를 키로 사용하여 어느 정도 장치에서 자동으로 암호화됩니다. 이렇게하면 장치 자체 나 장치 ID를 가진 사람이 아닌 다른 사람이 데이터를 쉽게 읽을 수 없습니다.

암호가 입력되지 않으면 데이터를 읽지 못하게하는 데이터 보호라는 암호를 사용하는 다른 수준의 암호화가 있습니다.

NSFileManager를 사용하여 파일에 액세스하고 NSFileProtectionKey 속성을 NSFileProtectionComplete으로 설정하여 앱에서 수동으로 데이터 보호를 활성화 할 수 있습니다. 참조 : Implementing and Testing iOS data protection.

사용자는 암호를 요구하도록 장치를 설정해야하며 암호가 강할수록 데이터의 보안이 강화됩니다.

NSFileProtectionComplete과 함께 NSFileManager 클래스를 사용하지 않아도 응용 프로그램의 프로비저닝 프로파일을 통해 쉽게 데이터 보호를 활성화 할 수 있습니다. 참조 : Data Protection/NSFileProtectionComplete - successfully supported through entitlements.plist?

나는 암호를 저장하지 않습니다. 로그인 할 때 생성되는 무작위로 생성 된 세션 키를 저장하십시오. 적어도 만료시킬 수 있으며 일반 텍스트 암호가 아닙니다.

0

1 년 전부터이 게시물까지 추적합니다. 내가 결정한 것은 무작위 세션 키 (@Marcus Adams 제안과 유사)를 생성하는 것이지만 그 값을 소금으로 사용하는 것입니다. 그런 다음 해당 세션 키를 사용자가 선택한 일반 텍스트 비밀번호와 연결하고이 값을 장치에 저장합니다 (사용자가 비밀번호를 저장하도록 선택한 경우). 나는.전자 장치에 저장이 값 :

device_hash = SHA256 (device_salt || 일반 텍스트)의 값을 해시

는 내가 확인을 위해 서버에 HTTP를 통해 전달하는 문자열이된다. 서버 측에서 다른 소금 값을 저장했습니다. 서버가 장치 해시 값을 받으면 자체 해시 값을 가져 문자열에 연결 한 다음 자체 해시를 수행합니다. 마지막 해시는 서버 데이터베이스에 저장된 암호입니다. 즉, 서버는이 문자열 :

server_hash = SHA256 (server_salt || device_hash))

나는이 난 단지에 노력하고 특히 때문에, 보안과 편의성 사이에 가능한 균형이라고 생각 암호를 보호하고 앱의 정상적인 과정에서 교환되는 실제 데이터를 암호화하려고 시도하지 않습니다. 사용자의 장치가 손상된 경우 공격자는 무지개 테이블이나 그와 비슷한 것을 사용하여 암호가 역전되었으므로 비밀번호를 리버스 엔지니어링 할 수 없습니다. 암호의 긴 길이와 함께 SHA256은 누군가가 진정으로 동기 부여를받은 경우 무차별 공격을 제거해야합니다.

누군가이 접근법에 대한 비판을 갖고 있다면 궁금합니다.

+0

sha256 (device_salt || 일반 텍스트) 대신 PBKDF2를 사용하지 않는 이유는 무엇입니까? 추가적으로 교정 함수'CCCalibratePBKDF'를 사용하여 라운드 수를 얻을 수 있습니다. HMAC는 평문과 해싱과 소금을 연결하는 것보다 나은 선택입니다. – zaph