2016-11-21 2 views
3

고객이 webhook URL을 등록 할 수있는 서비스를 개발 중이며 등록 된 URL에 대한 업데이트를 보내드립니다. 보안을 위해 클라이언트 (수신자)가 요청을 보내는 사람 (서버)을 식별하게하려고합니다.웹 훅 아이덴티티 보안 방법

FacebookGithub은 모두 페이로드의 해시가 비밀 키로 시작되는 X-Hub-Signature을 보냅니다.

나는 동일한 전략을 따를 수 있습니다. 그러나 단순히 사용하는 경우 jwt :

  1. webhook 등록시 클라이언트와 비밀 키를 공유합니다.
  2. 그런 다음 각 webhook 요청에서 동일한 비밀 키를 사용하여 jwt를 전송합니다.

저는 암호화에 대해 많이 알지 못하지만 서명에서 페이로드를 사용하지 않기 때문에 반복적으로 서명을 계산할 필요가 없으므로 jwt 방식이 더 효율적으로 보입니다.

그러나 그렇다면 왜 페이스 북과 github가 다른 접근 방식을 따르고 있습니까?

답변

1

MAC (Message Authentication Code)을 사용하면 이름이 암시하는대로 메시지를 인증 할 수 있습니다. 모든 메시지에 비밀을 전송하는 것은 현명하지 않습니다. 비밀이 유출 될 가능성이 있기 때문입니다. 공격자는 메시지 중 하나를 가로 채어 스푸핑 된 메시지를 내기 시작할 수 있습니다.

고려해 볼만한 또 다른 사항은 재생 공격입니다. 공격자가 메시지를 가로 채고 나중에 동일한 메시지를 보내는 경우 어떻게됩니까?

편집 : JWT는 MAC를 포함하므로 잘 사용되지만 페이로드가 인증되었는지 (즉 MAC 계산에 포함되어 있는지) 확인해야합니다.

+0

동의! 그러나 모든 메시지에 비밀을 전송하는 것은 현명하지 않습니다. 비밀이 유실 될 가능성이 있기 때문입니다. ' 나는 평범한 비밀을 보내지 않을 것이다. 나는'jwt'를 보낼 것입니다. –

+0

재생 공격을 지적 해 주셔서 감사합니다. –

+1

질문의 일부를 잘못 읽은 것처럼 보입니다. JWT에는 MAC가 포함됩니다. MAC/JWT 계산에 페이로드를 포함해야합니다. 그렇지 않으면 공격자가 다른 페이로드로 MAC을 재사용 할 수 있습니다. –