2010-08-23 2 views
1

꽤 많은 수의 클라이언트 장치가 액세스하는 서버 응용 프로그램에서 작업하고 있습니다. 문제는 클라이언트 장치가 항상 서버에 액세스 할 수 있다고 보장 할 수 없다는 것입니다. 장치가 1 주 이상 네트워크 외부에있을 가능성은 완벽합니다. 그 동안 필요한 콘텐츠의 사본 (네트워크에 연결될 때 자동으로 업데이트 됨)을 사용하여 기기가 자율적으로 작동하기를 원합니다.가끔씩 서버에 연결하지 않고 장치에서 보안 인증

물론 사용자 인증과 관련된 몇 가지 보안 문제가 있습니다. 기기에 사용자 목록의 사본을 준비 할 계획입니다. 우리는 장치에 인증을 안전하게하는 방법에 대해 숙고하고 있습니다. 분명히 우리는 업데이트 패키지에서 암호를 일반 텍스트로 보낼 수 없습니다.

주 서버의 암호는 소금으로 처리되고 해시되며 클라이언트 장치에서 사용할 수있는 목록에 대해 일종의 해시 (SHA1?)를 사용하려고합니다.

이렇게함으로써 우리는 장치에 대한 공격 (소금 없음)을 낮추고 있습니다.

가능한 한 클라이언트 장치를 안전하게 유지하는 효과적인 방법에 대한 제안 사항이 있으십니까?

감사합니다.

+0

내 게시물을 업데이트 했으므로 PBKDF2에 대한 마지막 부분을 읽어야합니다. – rook

답변

0

우선, 공격자가 누구인지 분명히해야합니다. 이 경우, 누군가 장치를 훔칠 곳이 있다면? 또 다른 시나리오는 누군가가 서버에 악의적 인 클라이언트와 연결하는 경우 무엇입니까? 누군가 교통을 막을 곳이 있다면?

스니핑을 중지하려면 모든 통신을 ssl (아마도 https)을 통해 수행해야합니다. 악의적 인 클라이언트를 방지하려면 하드 코드 된 SSL 인증서로 각 클라이언트 장치를 식별하고 이러한 자격 증명을 데이터베이스의 서버쪽에 저장할 수 있습니다. 서버는 CA의 일반 인증서를 사용할 수 있습니다. 장치가 도난 당하면 로컬 db에서 인증서를 폐기 할 수 있습니다. 훌륭한 PKI는 필요하지 않지만 좋은 결과를 얻을 수있는 경우입니다.

공격자 (클라이언트)에게 암호 해시를 흘리는 것은 항상 취약점입니다. 모든 암호 해시를 클라이언트로 전송하는 것은 일반적으로 SQL 주입으로 수행됩니다. 이것은 해결책이 아닙니다.

md5는 여러 가지 방법으로 손상되어 실제 공격에 악용됩니다. sha1은보다 안전하며 NIST의 승인을 받았지만 sha256은 매우 좋은 선택입니다. 무작위 값으로 암호 해시를 수행해야합니다.

암호 문제에 대해 생각할 수있는 안전한 솔루션은 네트워크에 연결되어있는 동안 만 인증을 허용하는 것입니다. 해당 사용자는 캐시 될 수 있으며 로그 아웃 한 다음 다시 로그인 할 수 있습니다. 이는 공격 시나리오를 제한하지만이를 부정하지는 않습니다. 장치를 훔칠 사람이 있으면 암호 해시도 생깁니다.이 경우 사용자는 암호를 변경해야합니다 (해커가 암호 해시를 시도 할 수 있기 전에).

덜 안전한 솔루션은 PBKDF2과 같은 무거운 해시 함수를 사용하는 것입니다. 이것은 암호 해시가 항상 공격자가 사용할 수있는 winzip과 같은 응용 프로그램에서 사용됩니다. 단점은 EXTREMELY SLOW이며 일반적인 웹 응용 프로그램에는 사용할 수 없습니다.

+0

문제는 서버에 연결하지 않아도 사용자를 인증 할 수있는 장치가 있어야한다는 것입니다. 소금기가있는 암호의 해시 목록 (예 : sha256의 좋은 1000 라운드)과 장치에 대해 인증 할 해당 소금 (각 사용자별로 다르며 무작위로 생성 된 소금)을 장치에 보내려면 어떻게 생각하십니까? –

+0

@Guillaume Bodi 사람들이 사전 단어를 암호로 사용하면 데스크탑 시스템에서 한 시간도 채 안되어 깨질 것이라고 생각합니다. PBKDF2는 5k 라운드를 사용하며 사람들은 여전히 ​​winzip을 항상 중단합니다. 도움이되지만 그 모든 것이 "안전"하지는 않습니다. 보다 안전한 방법은 공격자에게 넘겨주는 해시 수를 제한하는 것입니다. 또한 혼합 영숫자 기호와 같은 암호 요구 사항을 적용하는 것이 좋습니다. – rook

+0

입력 해 주셔서 감사합니다! 나는 당신의 제안을되도록 많이 포장하려고 노력할 것이다. –

0

클라이언트 장치에서 암호를 약화시킬만한 이유가없는 경우 클라이언트와 서버에서 동일한 인증 스키마를 사용하십시오. 클라이언트 장치는 소금도 처리 할 수 ​​있습니다.

관련 문제