2012-04-03 3 views
0

입니다. 사용자 이름과 암호가 필요한 시스템이없는 곳에 앱을 구현하고 있습니다. 내가 원하는 것은 이름과 전화 번호입니다.모바일 장치에 대한이 서명 기반 인증의 안전성은

시나리오는 다음과 같이이다 :

1) 사용자가 지금부터 독특한 UserKey

3)

2) 응용 프로그램 내 서버에 요청을 처음으로 응용 프로그램을 열고 얻는다 앱이 내 REST 서비스에 요청한 요청에도 서명이 있습니다. 서명은 실제로 SHA (UserKey : 요청 Base64Encoded에서 제공하는 데이터)입니다 :

    4) 서버도 서명

    를 확인하기 위해 동일한 해시를 수행 내가 SSH를 사용하지 않는 이유

  • 내가 암호와 같은 민감한 데이터를 보낼 필요가 없습니다 인증서에 대해 지불 할 수없는, 그래서 그것을 사용하는 혜택을 볼 수 없습니다
  • 난 그냥 내 자신의 WCF REST를 호출하는 간단한 방법이 필요합니다 자체 앱의 서비스

2 단계에서 UserKey가 일반 텍스트로 표시 될 때 보안 흐름이 있지만 앱이 처음 열릴 때 한 번만 발생한다는 것을 알고 있습니다. 이게 얼마나 위험하다고 생각하니?

무엇을 권하고 싶습니까? 저를 도울 수있는 .NET 라이브러리가 있습니까?

답변

1

실제로 이러한 접근에는 몇 가지 문제가 있습니다. 서버에 요청할 때마다 중간자가 있다고 가정 해보십시오. 예를 들어 100 개의 전송 된 패킷을 분석함으로써 요청시 서명과 비슷한 패턴을 인식합니다. 그런 다음 자신의 요청을 위조하고 서명을 추가합니다. 서버가 해시를 확인합니다. 괜찮습니다. 사용자와 고유 한 사용자 키입니다. 그러나 그렇지 않습니다.

암호화에 비대칭 키라는 개념이 있으며, 현재 널리 사용되며 강력한 보안 서비스를 제공합니다. 주요 개념은 다음과 같습니다. 서버는 공개 키와 개인 키의 두 가지 키를 생성합니다. 공개 키는 텍스트를 인코딩하는 데 사용됩니다. 서버가 안전한 위치에 보관하는 개인 키의 사용으로 만 디코딩 할 수 있습니다. 따라서 서버는 클라이언트에게 공개 키를 제공하여 메시지를 인코딩합니다. 그것은 두 배가 될 수 있습니다. 클라이언트는 공개 키를 생성하여 서버에 제공합니다. 그런 다음 서버는 키를 생성하고 클라이언트의 공용 키로 자신의 공개 키로 인코딩합니다. 이런 식으로 중간자가 공격을하는 것은 거의 불가능합니다.

문제가 실제로 발생하기 때문에 OAuth를 사용하여 웹 사이트의 사용자를 인증 할 수 있습니다. 그것은 안전하고 널리 사용되며 (facebook, g +, twitter, 당신은 그것들을 지칭합니다) 이미 다양한 언어로 구현되어 있습니다.

1

응용 프로그램 자체와 웹 서비스를 모두 제어 할 수 있으므로 아무 것도 지불하지 않고 SSL을 사용하면 현재 접근 방식의 문제점을 해결할 수 있습니다. 자체 서명 된 인증서를 만들어 웹 서버에 설치할 수 있습니다. 하나의 인증서 만 신뢰하도록 클라이언트 응용 프로그램의 SSL 컨텍스트를 구성하십시오. 그런 다음 클라이언트 측 자체 서명 인증서를 작성하고이를 애플리케이션 내에 설치하십시오. 상호 인증 된 SSL이 필요하도록 서버를 설정하고 자체 서명 된 인증서 만 액세스 할 수있게하십시오.

완료.클라이언트는 합법적 인 서버에만 말을 씁니다 (아무도 서버를 스푸핑하고 클라이언트와 대화하여 속임수를 쓰지 않도록 할 수 있습니다). 그러면 서버가 합법적 인 클라이언트와 대화하므로 아무도 정보, ID 등을 도용 할 수 없습니다. 또한 SSL 내에서 사용되는 강력한 암호화로 보호됩니다.

관련 문제