2013-07-10 3 views
1

누가 그것을하고 있는지 알면서 REST 요청을 보호해야합니다. HMAC 방법을 알고 있지만 클라이언트 개인 키를 내 서버에 저장하지 않는 것이 좋습니다. 이것은 나의 접근 방식 : 클라이언트는 개인 키를 저장 공개 키 공유 만 안전합니까?

    1. 서버가 클라이언트 서버가 클라이언트에 개인 키와 클라이언트 ID를 전송
    2. 을위한 개인 및 공개 키를 생성
    3. SERVER는 공용 클라이언트 키만 저장합니다.
    4. 클라이언트는 클라이언트 ID를 개인 키 (ecryptedData)로 암호화하여 RESTful 요청을 만들고 클라이언트 ID : encryptedData 쌍을 SERVER에 보냅니다.
    5. SERVER는 다음과 같습니다. f 또는 지정된 클라이언트 ID의 공개 키를 암호화하고 encryptedData를 암호 해독합니다.
    6. SERVER는 해독 된 데이터에 동일한 클라이언트 ID가 포함되어 있는지 확인합니다. 클라이언트 ID가 같으면 SERVER는 송신자를 신뢰하고 그렇지 않으면 요청을 거부합니다.

    아마도이 방법은 이미 있지만 잘 모르겠습니다.

    이 방법은 안전합니까? (-> 서버 클라이언트) 내가 사용할 수 있습니다, 난 단지 그가 단방향 통신에 보내는 일에 대해 보낸 사람과 아닌 사람을 걱정하는 경우

    :

    편집

    나는 질문을 재구성 RSA는 이런 식으로?

    ONE TIME

    1. 서버는
    2. 서버는 클라이언트의 공개 키 (키가 stolen..it의 공개 내가 만약이 문제가되지 않습니다!)
    3. 를 클라이언트에 대한 RSA 쌍의 키를 생성 서버는 클라이언트 동안 클라이언트

    에 대한 클라이언트 개인 키 전송 -> 서버 통신을

    1. 클라이언트는 자신의 개인 키로 알려진 단어 + 타임 스탬프 (재생 공격을 방지하기 위해)를 암호화합니다. SIGNATURE = 암호화 (RSA, 'FOO : 1234234')
    2. CLIENT는 API KEY와 singular ex를 사용하여 메시지를 전송합니다. 54545345 : 서명
    3. 서버에 대한 주요 주어진 API의 공개 키를 조회
    4. 서버는
    5. 서버가 알려진 단어 FOO의 정확성 및
    6. 서버가 거부 타임 스탬프를 확인하여 발견 된 공개 키를 사용하여 메시지를 해독 이전 단계가 실패한 경우의 메시지

    이 방법이 안전합니까?

    고맙습니다.
    aGO!

  • +1

    잘못된 스키마입니다. 서버가 자신의 Private/Public Keys (RSA 어쩌면)를 생성하고 공개 키를 공유하게하십시오. 당신의 REST 서비스를 누가 호출하고 있는지 알고 싶다면 서명 알고리즘 (El Gamal-RSA Signature)을 시도해보십시오. –

    +0

    왜 나쁜 스키마입니까? HMAC 방법도 클라이언트에 개인 키를 보냅니다. – aGO

    +0

    200 클라이언트, 생성하는 200 가지 HMAC 키를 가정하고 서버가 보낸 사람을 신뢰하기 전에 모든 메시지를 암호 해독해야합니다. 엘 가말 (El Gamal)을 사용하면 서버가 키 커플 만 생성하고 모든 클라이언트는 자체 페어를 생성 할 수 있습니다 (필요한 경우). 따라서 수신자는 발신자 신원이 메시지의 서명 (전체 메시지가 아닌)을 확인해야합니다. POST/GET/PUT verb를 사용하는 경우이 스키마가 필요합니다. 단방향 통신의 경우 RSA로 충분합니다. –

    답변

    1

    "SERVER가 클라이언트 개인 키를 클라이언트에 보냅니다." : 매우 안전하지 않습니다. 악의적 인 클라이언트가이 통신을 가로 챌 경우 클라이언트의 개인 키를 얻을 수 있으며 실제 클라이언트가 보낸 것처럼 메시지를 보낼 수 있습니다. 클라이언트가 비공개 키를 공유하지 않고 두 키를 생성하도록해야합니다.

    +0

    OK입니다.하지만 모든 API 서비스 제공 업체는 클라이언트 (Google, Dropbox, Amazon 등)에게 개인 키를 돌려 보냅니다. 그 너머에 목표가 충분히 안전하다고 생각합니까? – aGO