2011-08-17 2 views
3

내 앱 & HTML 페이지간에 공유 암호를 사용할 수있는 프로토콜/알고리즘을 찾고 있습니다.내 공유 비밀 알고리즘/방법론 개선 및 암호화 프로토콜 제안

공유 비밀은 앱을 보유한 사용자 만 웹 페이지에 액세스 할 수 있도록 설계되었습니다.

내 문제

: 나는이 무엇 암호화 프로토콜을 사용한다 & (내 방법은 HTML 페이지에 유효한 액세스의 유효성을 검사하는) 어떤 알고리즘 모른다.

내가 HMAC SHAXXX 또는 DES 또는 AES를 사용한다는 사람들이 나에게 제안했는데, 나는 사용해야한다고 확신하지 못합니다. 당신은 어떤 제안이 있습니까?

내 알고리즘과 같이이다 :

  • 내가 앱 &의 HTML 페이지 알고가 ("MySecret"를 호출 할 수 있습니다)하는 공유 암호를 만들 수 있습니다. 공유 비밀이 항상 고유한지 확인하려면 비밀의 끝 부분에 현재 날짜 & 분을 추가 한 다음 XXX 알고리즘/프로토콜 (HMAC/AES/DES)을 사용하여 해시합니다. http://mysite.com/comp.py?sharedSecret=xyz
  • comp.py 스크립트 : 그래서 암호화되지 않은 비밀은 "MySecret08는/17/2011-11-11"&은의 해시 내가 다음 URL의 CGI이 해시를 추가 할 것입니다 "XYZ"
  • 말할 수있을 것입니다 그런 다음 동일한 공유 암호 & 날짜 조합을 사용하여 해시 한 다음 결과 해시가 sharedSecret ("xyz") CGI 변수와 동일한 지 확인합니다. 그 때 나는 유효한 사용자가 웹 페이지에 접근하고 있다는 것을 알고있다.

당신이 내 웹 페이지에 액세스 할 수 있습니다 유효 명에 보장하기 위해 더 나은 방법을 생각할 수있다 (웹 페이지는 사용자가 경쟁을 입력 할 수 있습니다)?

은 내가 사용하여 올바른 궤도에 나는 생각 공유 비밀 해시 알고리즘 넣어 모든 시간에 같은 동일한 결과를 생성하지 않는 경우 비밀을 검증하기위한 나의 방법론은 특히 결함이 보이지만.

+0

"app"는 데스크톱 소프트웨어를 의미합니까? – shesek

+0

아니, 애플 리케이션에 의해 미안 해요, 안드로이드 애플 리케이션 – Bouszeer11

+1

가능한 중복 [알고리즘 : 파이썬 스크립트에서 경쟁으로 잘못된 항목을 중지] (http://stackoverflow.com/questions/7034870/algorithm-stop-invalid-entries-into- a-competition-in-python-script) – geoffspear

답변

3

특히 해시 알고리즘이 항상 동일한 결과를 생성하지 않는 경우.

그러면 해시가 손상됩니다. 왜 그럴까?

간단한 경우 HMAC를 원합니다. 공유 암호를 사용하여 요청에 "서명"하고 서명은 서버에 의해 확인됩니다. HMAC는 재생 공격을 막기 위해 더 많은 데이터를 포함해야합니다. 실제로는 도청자가 동일한 메시지를 재생하지 못하도록 일련 번호와 함께 모든 쿼리 매개 변수 (지정된 순서대로)를 포함해야합니다. 공유 보안을 확인하는 모든 사람이 메시지를 엿 듣는 사람은 만료 될 때까지이 공유 된 암호를 계속 사용할 수 있습니다. 일련 번호 또는 짧은 유효 범위를 포함하여 서버에 플래그를 지정하도록 구성 할 수 있습니다.

여전히 불완전하다는 점에 유의하십시오. TLS는 클라이언트 및 서버 측 인증서 지원을 지원합니다. 왜 사용하지 않습니까?

+0

+1 전체 URL 포함. OAuth와 매우 흡사합니다. – Thilo

+0

답장을 보내 주셔서 감사합니다. 일련 번호를 어떻게 사용할 수 있습니까? App & python 스크립트는 일련 번호를 알아야합니까? – Bouszeer11

+0

@ Bouszeer11 : 요청의 일부로 안전하게 보낼 수 있습니다. 일련 번호가 HMAC 된 데이터의 일부인 경우 인증 할 수 있습니다. –

0

마치 작동하는 것처럼 보입니다. 시계 드리프트가 문제가 될 수 있습니다. 정확한 시간 동안 실패하면 +/- 3 분의 범위를 검증해야합니다. 해시 알고리즘은 같은 입력에 대한 모든 시간

음을 동일한 결과를 생성하지 않는 경우, 특히 결함이

, 즉 다음 깨진 해시 알고리즘이 될 것입니다. 신뢰할 수있는 해시는 매번 동일한 입력에 대해 동일한 출력을 생성합니다 (그리고 거의 항상 다른 입력에 대해 다른 출력을 생성합니다).

+0

(시나리오에 따라) 리플레이 공격을 피하기 위해 비밀과 타임 스탬프를 보는 것보다 더 많은 정보를 포함해야 할 수도 있습니다 (@ 얀의 대답 참조). – Thilo

0

네트워크 암호화를 사용해보세요. 웹 서버는 자동으로 해당 유형의 인증을 처리 할 수 ​​있어야합니다. 남아있는 것은 앱에 쓰는 것뿐입니다 (어쨌든해야합니다). 앱 플랫폼에 따라 자동으로 수행 할 수도 있습니다.

Google Kerberos, SPNEGO 및 HTTP 401 인증 필요. 간단한 하드 코딩 된 사용자 이름 및 암호 HTTP 헤더를 사용하지 않고 HTTPS를 통해 연결을 실행할 수 있습니다. 그렇게하면 서버에 사용자 정의 코드가 적어지고 서버가 요청을 인증합니다. HTTP의 몇 가지 추가 기능을 활용하는 것은 물론입니다.

관련 문제