2011-11-08 2 views
0

저희 팀과 저는 보안을 위해 공개 키와 개인 키를 사용하여 요청에 서명하도록 미들웨어 계층에 대한 모든 요청을 요구하는 API/미들웨어 시스템을 개발 중입니다. 대부분의 요청은 미들웨어에서 직접 데이터를 쿼리하는 iPhone 및 Android 앱과 같은 모바일 애플리케이션을 제외하고 서버 대 서버로 이루어질 예정입니다.인증 된 통신 - 요청 무결성 검사

우리는 정렬 된 쿼리 문자열을 사용하여 Amazon Market API가 작동하는 방식을 매우 밀접하게 반영하고 동일한 알고리즘을 사용하여 수신시 비교되는 서명을 생성하기 위해 공개 키와 개인 키로 HMAC 256 해싱을 수행했습니다.

유감스럽게도 앱 스토어를 통해 iPhone 앱을 출시하려면 암호화 라이브러리를 구현하기 위해 특정 정부 기준을 충족해야합니다 (수출 제한이라고 읽음). 이제는 쿼리 문자열에 개인 키를 추가하는 것과 SHA1()이 비교를 위해 해싱하는 것과 같이 훨씬 간단한 방법을 사용하기 위해 서명 알고리즘을 다시 작성해야하는지 결정해야합니다.

매우 안전한 방법을 사용하여 개인 키 해시로 축소하는 것을 싫어하지만 HMAC 256을 삭제하여 내가 잃어버린 것을 알기에 보안 및 암호가 익숙하지 않습니다. : 쿼리 문자열 이미) 공개 키를 포함

는 서명을 예를 들어, 우리는 현재 우리의 쿼리 문자열을 주문하고 다음과 같은 작업을 수행 :

$signature = base64_encode(hash_hmac('sha256', $querystring, $private_key, TRUE)); 

우리가 강제로하는 경우 암호화 클래스를 사용하지 우리의 응용 프로그램에서 우리의 서명은 다음과 같습니다 :

$signature = base64_encode(sha1($querystring . $private_key)); 

기술적으로 우리 앱에서 라이브러리를 사용하기위한 기준을 충족시킬 수는 있지만, 미국 정부가 우리가하는 일이 정확히 충족되지 않는다고 판단 할 경우 법적 파급 효과를보고 싶습니다. '인증'에 대한 법적 설명

보안 전문가의 조언은 모두 높이 평가됩니다! 두 번째 코드 예제를 사용하면 무엇이 손실됩니까? 미들웨어를 해킹하는 것이 더 쉬워 집니까?

+0

hmac 256은 암호화 방법이 아닙니다. 또한 메시지 다이제스트 기능은 암호화 기능이 아닙니다. 그들은 더 다를 수 없습니다. – rook

+0

감사합니다. 용어의 오용을 용서하고, 나는 보안 용어에 정통하지는 않습니다. (이것이 제가이 질문을하는 이유입니다.) 달성하려는 목표의 정신을 생각해 보면 최종 목표는 수신 측의 데이터 무결성 검사라는 점에서 두 구현에서 큰 차이가 있음을 알 수 있습니까? – Shane

+0

나는 첫 번째 매개 변수로 'sha1'을 전달하기 만하면 hash_hmac 함수를 사용합니다. hmac은 단순한 연결이 아니며, 이것은 밑줄 친 해시 함수가 취약 할지라도 충돌에 면역적인 것과 같은 흥미로운 특성을 hmacs에 제공합니다. 이 경우 sha1은 충돌로 인해 지속될 수 있지만 영향을 미치지는 않습니다. 또한이 질문은 암호화 스택 교환에 중점을 둡니다. – rook

답변

0

다른 모든 사람이 유사한 상황에 처한 경우 적어도 우리 환경에서 사용하는 암호화 방법 (위 설명 참조)은 법적 요구 사항에 적합하며 Apple ToS와 작동합니다. 우리는 기본적으로 아마존 AWS 스타일의 인증을 구현했지만, OAuth 1.0은 미리 빌드 된 라이브러리를 사용하여 조금 더 강력한 방법이었을 것입니다.

오늘 앱에서이 유형의 인증을 수행하려는 경우 OAuth를 찾아 보시기 바랍니다.