웹 응용 프로그램이 있으며 Google이 Google 계정에 추가 한 것과 비슷한 보안 강화를 위해 보안 로그온을 추가해야합니다. 사용자가 로그인 할 때컴퓨터에 웹 응용 프로그램에 대한 액세스 권한 부여
는 사용 사례는
기본적으로, 우리는 사용자가 이전에이 컴퓨터를 인증 된 경우 감지합니다. 컴퓨터가 인증되지 않은 경우 사용자는 입력해야하는 일회용 암호 (전자 메일, SMS 또는 전화를 통해)가 전송되며 사용자는이 컴퓨터를 기억하도록 선택할 수 있습니다. 웹 응용 프로그램에서 승인 된 장치를 추적하여 사용자가 해당 장치에서 마지막으로 로그인 한 시간과 위치를 볼 수있게하고, 그렇게 선택한 경우 장치의 인증을 해제합니다.
매우 가벼운 터치 (클라이언트 측 소프트웨어 설치가 필요 없음)를 요구하며 Safari, Chrome, Firefox 및 IE 7+ (불행히도)와 호환되는 솔루션이 필요합니다. 우리는 적절한 보안을 제공하는 x509 보안을 제공 할 예정이지만 x509를 사용할 수 없거나 사용할 수없는 고객을위한 솔루션이 필요합니다.
제 의도는 쿠키를 사용하여 인증 정보를 저장하려는 것입니다 (또는 잠재적으로 로컬 스토리지를 사용하여 플래시 쿠키로 저하 된 다음 일반 쿠키로 저장). 언뜻
트랙 두 개의 값 (로컬 데이터 또는 쿠키) 안전한 사인온 토큰뿐만 아니라 디바이스 토큰을 나타내는 해시. 두 값은 웹 응용 프로그램에 의해 구동되고 기록되며 클라이언트에 지시됩니다. SSO 토큰은 장치 및 시퀀스 번호에 따라 다릅니다. 이는 효과적으로 장치의 인증을 해제하고 (모든 SSO 토큰이 무효화 될 수 있음) 순차 번호를 사용하여 재생을 완화합니다 (실제로이 질문을하는 이유는 아닙니다). 그리고 nonce를 사용합니다. 누군가가 단순히 장치 및 SSO 토큰을 복제 및 다른 요청에 사용하는
이 용액
문제는, 그것이 가능하다. 시퀀스 번호는 이러한 남용을 감지하고 장치의 인증을 해제하는 데 도움이되지만 유효한 장치와 악의적 인 요청이 모두 액세스를 시도한 후에 만 감지 및 응답이 발생할 수 있습니다. 이는 손상이 발생할 충분한 시간입니다.
HMAC를 사용하는 것이 좋을 것이라고 생각합니다. 장치, 시퀀스를 추적하고 비공개 키를 사용하여 nonce, 타임 스탬프 및 해시를 만든 다음 해당 값을 일반 텍스트로 보내십시오. 서버는 장치 및 시퀀스의 유효성 검사 이외에 동일한 작업을 수행하고 비교합니다. 그것은 훨씬 더 쉽고 훨씬 더 안정적입니다. 우리가 안전하게 개인 키를 협상하고, 교환하고 저장할 수 있다고 가정합니다.
질문 그럼
, 어떻게 안전하게 인증 된 장치에 대한 개인 키를 협상 할 수 있습니다, 그리고 안전하게 그 키를 저장? 적어도 로컬 저장소 또는 플래시 쿠키를 사용하여 개인 키를 저장하는 데 동의하고 "충분 함"이라고 말하는 것이 더 가능합니까? 또는 설명하는 취약점을 완화하기 위해 원래 초안에 할 수있는 것이 있습니까?
"인식 할 수없는"기계 또는 소유권 주장에 실패한 기계에 일회용 비밀번호를 사용합니다. 다른 제안에 관해서는, 내가 질문에서 언급했듯이 "가벼운 터치"(추가 소프트웨어가 필요 없음을 의미)를 구현해야합니다. 그렇지 않으면 그 경로를 벗어 났을 것입니다. 저의 원래 솔루션은 당신이 말했듯이 내가 주어진 제약 조건 하에서 클라이언트를 제어 할 수 없다는 사실에 비추어 "최선의 노력"을 제안합니다. 다른 모든 것이 실패 할 경우 우리는 계정에 플래그를 지정하고 1TP 검증을 요구합니다. – HackedByChinese
그러나 시스템이 움직 였을 때 감지하고 있습니다. 지리적 IP API를 사용하여 사용자의 대략적인 도시를 기록하는 방법에 대해 생각해 보았습니다. 이를 확장하면 아마도 클라이언트 IP 주소에 대한 경험적 방법을 사용하여 이상한 동작을 탐지하고 감지 할 수 있습니다. 일종의 불일치가 감지 될 때 1TP 검증으로 되돌아갑니다. 진정한 모바일 고객에게는 x509 인증 또는 클라이언트 소프트웨어 설치 만 필요할 수 있습니다. 어쨌든, 이것에 대해 생각해 볼 시간을 주셔서 감사합니다. – HackedByChinese
도와 드리겠습니다. 난 그냥 당신에게 몇 가지 아이디어를 줄 수있는 다른 관련성이 높은 두 가지 질문을 발견 : [컴퓨터를 고유하게 식별] (http://stackoverflow.com/questions/671876/whats-a-good-way-to-uniquely-identify-a- 컴퓨터/671914 # 671914) 및 [네트워크를 통한 보안 클라이언트 액세스를위한 장치 지문] (http://stackoverflow.com/questions/7649074/device-fingerprint-for-secure-client-access-over-tls-network)을 참조하십시오. –