2009-12-04 2 views
1

클라이언트 (Ruby Sinatra 앱)에 정보를 보내는 서버 (RoR 앱)가 있고 클라이언트가 데이터를 얻는 방법이 필요합니다. 서버, 악의적 인 제 3 자보다는 오히려.Ruby에서 데이터에 올바르게 서명하는 방법 (HMAC?)

클라이언트가 다른 방법으로 다시 전송되기 전에 클라이언트가 서버에 로그인해야합니다. 그러면 서버가 모든 추가 응답에 서명하는 데 사용 된 공유 키를 사용하여 로그인에 응답 할 수 있지만 타사는 해당 응답을 캡처 할 수 있습니다. 악하다.

클라이언트의 코드를 검사하지 않고 확인할 수 있도록 서버의 응답에 서명하기 위해 (크로스 플랫폼 적용 가능성을 고려한 Ruby에서) 어떤 방법을 찾고 싶습니다. 어떤 아이디어?

업데이트 :이 부분을 더 잘 설명 할 수 있습니까?

(나는이 질문을 쓴 이후로 당신이 (당신이 좋아하는 수 있다면, 그래서 내가 github에 코드를 추가 한) 주위에 포크가 있습니다! The 'client'The 'server')

과정은 이것이다 : 조 Bloggs에가 북마크를 사용을 그의 모바일 장치. 그러면 현재 방문한 URL이 sitesender.heroku.com에 게시됩니다. sitesender.heroku.com이 요청을 받으면 DB를 확인하여 누군가가 Target application을 사용하여 같은 계정에 로그인했는지 확인합니다. 그들이 가지고 있다면 IP 주소가 기록되고 sitesender.heroku.com은 해당 IP에서 대상 브라우저 (북마크 된 URL)를 기본 브라우저에 저장하도록 요청하는 대상 앱 (웹 서버)에 대해 GET 요청을합니다.

iPhone을 찾을 때 나중에 볼 수 있도록 기본 컴퓨터에 사이트를 보낼 수 있다는 기본 아이디어는 페이지 (예 : 플래시, 화면 크기)를 처리 할 수 ​​없다는 것입니다.

분명히 중요한 문제는 공개 서버에서 누구나 광범위한 IP에 'seriouslyevilwebsite.com'을 열어 달라는 요청을 보낼 수 있으며 디지털 세계에서 전염병을 겪었습니다. 서버로 heroku.com을 사용하고있는 것을 보면 (믿을 수 없지만 클라우드 기반의 RoR 호스트) 원본 IP를 테스트 할 수는 없습니다.

HTTPS를 이해하는 한,이 설정에서는 의 인증서를 모두target 응용 프로그램으로 분류해야합니다. 나는 어떤 형태의 비대칭 암호가 필요하다는 것에 동의하고, 개인 키 (결코 배포되지 않음)로 sitesender.heroku.com에서 나가는 요청에 서명하고 공개 키를 사용하여 동일한 작업을 수행하고 유사성을 테스트하도록 target을 얻습니다. 내가 HMAC가 어떻게 작동하는지에 관해서는 아직도 우스꽝 스럽다. 어떻게 비대칭입니까? 개인 키와 공개 키를 사용하여 동일한 HMAC 작업을 수행하면 동일한 서명이 생성되도록 공식화됩니까? 어떤 경우에 - HMAC가 승자입니다!

양해 해 주셔서 감사합니다.

답변

1

"자유롭게 검사되었지만 복제되지 않았다"는 것이 정확히 무엇인지 확실하지 않습니다.

일반적으로 보안 통신 채널이 필요한 경우 https는 친구입니다.

아키텍처에 문제가있어 불충분 한 경우 HMAC와 비대칭 암호를 사용하는 것이 좋습니다.

업데이트 : 나는이 문제를 이해하고 있는지 잘 모르겠다. 그래서 나는 당신이 풀려고하는 문제를 설명하려고 노력할 것이다 : 그들이보고있는 응답이 자신감을 가질 필요가있는 고객이있다. 실제로 서버에서 왔습니다.

내가 맞다고 생각하고 이것이 정말로 당신이 풀려고하는 문제 인 경우, HTTPS는 훌륭하게 해결합니다. 서버에 인증서를 설치하면 직접 서명 할 수 있지만 클라이언트는 기본적으로 인증서를 신뢰하지 않습니다. 이를 위해서는 표준 CA (Certificate Authority) 중 하나에서 인증서를 구입하고 클라이언트가 서버에 HTTPS 요청을해야합니다. HTTPS는 제공된 인증서가 발언중인 서버에 대해 발급되었는지 확인합니다. 너 끝났어.

마지막으로 HMAC의 작동 방식에 대한 오해가 있다고 생각합니다. 비대칭 암호의 핵심 원리는 입니다. 결코 개인 키를 배포하지 마십시오. 비대칭 암호화를 사용하면받는 사람의 공개 키로 메시지를 암호화하고 개인 키로 메시지를 해독합니다. 개인 키로 메시지에 서명하고 공개 키를 사용하여 메시지를 확인합니다.

+0

건배 남자, HMAC가 앞으로 나아갈 것 같아 보이지만 클라이언트에게 코드가 자유롭게 사용할 수 있다면 HMAC 대처할 수 있습니까? HTTPS가 이상적이지만 내 '클라이언트'(실제로 웹 서버)가 Joe Public의 컴퓨터에 있기 때문에 SSL은 옵션이 아닙니다. –

+0

HTTPS (일반적으로 구현 됨)는 통신의 서버 측 인증서 만 필요합니다. HMAC는 일반적으로 메시지의 내용이 변경되지 않았 음을 확인하기에 충분하지만 중간에 아무도 메시지를 검사하지 않으려면 서명 된 메시지를 암호화해야합니다. –

+0

검사는 문제가되지 않습니다. 나는 들어오는 메시지가 그들이 있어야하는 사람인지 확인해야합니다. HMAC에 대해 읽어 보겠습니다. –

관련 문제