2014-04-08 13 views
4

나는 블루투스 장치에 일부 암호화 된 데이터를 전송하는 모바일 애플리케이션을 개발하고를 사용하지 않고 재생 공격을 피하기 위해이 블루투스 장치는 서버로 데이터를 전송합니다. 내 질문은이 경우 재생 공격을 막을 수있는 방법입니다. 누군가가 가짜 Bluetooth 장치를 사용하여 신호를 가져 와서 서버로 보낼 수 있습니다.방법 타임 스탬프

  • 모바일 응용 프로그램은 오프라인 모드에서 작동하며 서버에 연결되어 있지 않습니다. 따라서 번 nonce 또는 카운터를 동기화하면 도움이되지 않습니다.

  • 휴대 전화의 시간이 올바르지 않을 수 있으므로 (타임 서버와 동기화 됨) 공격 기록의 범위를 좁히기 위해 타임 스탬프를 사용할 수도 없습니다.

  • 내 모바일 응용 프로그램과 블루투스 장치 간의 통신은 단방향이며 모바일 응용 프로그램은 장치로만 데이터를 보낼 수 있습니다.

+0

블루투스 기기와 서버 간의 재생 공격을 중지하고 기기와 서버 간의 블루투스 연결을 이미 신뢰하고 있습니까? –

+0

@Marcus 블루투스 연결을 신뢰할 수 없습니다. 누군가가 가짜 장치를 사용하여 사용자로부터 데이터를 가져올 수 있으며 (카드 데이터를 도용하기 위해 위조 된 POS ** 터미널을 사용하는 것처럼) 데이터를 캡처 한 후에 트랜잭션이 실패했음을 사용자에게 알리지 만 나중에 캡처 된 데이터를 보냅니다. 나는 재연/man-in-the-middle 공격을 피하고 싶다. 사용자의 데이터는 잘 암호화되어 있으며 변조 할 수 없지만 캡처 할 수는 있습니다. – hkazemi

답변

2

이렇게하는 한 가지 방법은 카운터를 사용하는 것이지만 많은 단계를 건너 뛸 수 있습니다. 예를 들어, 전화 A에서 본 마지막 카운터 값이 123이고 카운터 값이 156 인 항목이 있으면 받아 들일 수 있지만 [124, 1000123] 범위를 벗어나는 항목은 무시합니다 (1000000은 완전 임의적이며 사용 사례에 따라 다름).

이렇게하면 재생 공격을 막을 수는 있지만 전송은 malleable이 아니거나 카운터 번호를 위조하는 것이 중요합니다. 이것은 장치 MAC 키 (서버와 전화가 미리 통신하는 경우에만 가능)를 통해 비밀을 유지함으로써 수행 할 수 있습니다.

트랜잭션을 인증하는 것이 좋을 것입니다 (전화 A만이 전화기 A의 메시지임을 나타내는 메시지를 생성 할 수 있음) 또는 공격자가 카운터를 매우 빨리 올리고 전화 A.에 대한 서비스. 그러나 당신이 이미 질문 한 것처럼 말하면, 그것은 당신이 이미 다뤘던 것처럼 들립니다.

+0

누군가가 트랜잭션 123을 가져 와서 서버로 보내지 않으면 어떻게됩니까? 이 경우 내 모바일 애플리케이션은 트랜잭션이 실패했다고 가정하고 사용 된 카운터를 무효화하라는 서버에 알릴 수 없습니다 (123). 이 방법을 사용하면 공격자가 캡처 한 메시지를 나중에 보낼 수 있습니다. – hkazemi

+0

@hkazemi 알겠습니다. 나는 (그냥 지연 대신에) 엄격한 재연을 생각하고 있었기 때문에 오해했다. 불행히도이 경우이 문제를 피할 수있는 방법은 없습니다. 휴대 전화의 시계를 신뢰할 수 없다면 서버에 단방향 대기 시간을 두지 않는 것이 좋습니다 (근본적으로 묻는 것입니다). – cobbal