2016-07-24 2 views
0

저는 블루투스를 밑줄 통신 채널로 사용하는 Android 및 Windows 기기간에 P2P 통신 앱을 작성하고 있습니다. 나는 각 보안 (2.x, 4.0, 4.1, 4.2 등)에 사용되는 블루투스 프로토콜의 버전을 확인하여 그에 맞는 보안 결정을 내리고 싶다. (2.x는 안전하지 않으며 4.0은 더 안전하다. 보안, 4.1 보안 등).특정 세션에 대한 블루투스 버전 확인

어떻게하면 Windows 또는 Android에서 API를 사용하여이를 달성 할 수 있습니까? 필자는 각 세션과 세션에서 블루투스 버전이 양 당사자의 최소 기능으로 결정 되었기 때문에이를 확인해야 할 것입니다.

답변

0

2.1 SSP 예컨대 후에이

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
Set<BluetoothDevice> Devices = mBluetoothAdapter.getBondedDevices(); 

List<String> s = new ArrayList<String>(); 
for(BluetoothDevice bt : pairedDevices) 
    s.add(bt.getVersion()); 
+1

BluetoothDevice 클래스의 getVersion() 메소드가 표시되지 않고 AOSP 코드의 최신 언급이 Android Donut (1.6)에있는 것 같습니다. – greenmind

1

첫째, 블루투스 버전을 사용해 2.1.3.0,4.x는 기본적으로 안전합니다 (단, LE 보안에 대해 다른 이야기로 이야기하는 경우), LMP 버전을 실제로 판단 할 필요가 없습니다.

안타깝게도 Android는 원격 버전을 앱, 저수준 (Bluedroid) "BTM_ReadRemoteVersion"으로 내 보내지 않습니다.이 기능은 원격 LMP 버전을 가져올 수 있습니다.

귀하의 이해가 부분적으로 "블루투스 버전이 양 당사자의 최소 기능으로 결정되었습니다."호스트와 컨트롤러의 기능은 최소 버전으로 정의되었습니다.

+0

고마워요! LE는 제쳐두고 떠났으 며 블루투스 2.x는 안전하지 않은 것으로 판명 된 E0 암호화를 사용하고 블루투스 4.1은 안전한 것으로 간주되는 AES-CCM을 사용합니다. 그게 4.1을 2.x보다 더 안전하게 만들어주지 않습니까? – greenmind

+1

나는 보안 전문가가 아니지만 AES-CCM 암호화가 더 안전하다는 것을 의미한다. E0는 E0가 안전하지 않다는 것을 의미하지 않는다. LE 보안 연결 만이 AES-CCM 방법을 사용하기 때문에 여전히 BET을 선택해야하며 LE에 AES-CCM을 도입하는 한 가지 이유는 LE가 BT4.0에서 안전하지 않다는 것입니다. 즉 LTK를 공중에서 전송합니다. 그래서 우리가해야 할 일은 보안 모드를 가능한 높게 (예를 들어 4) 설정하는 것이 낫습니다. –

0

Android logcat을 사용하여 버전을 확인하는 방법을 찾았습니다.

bt_btif_dm : 원격 버전 정보 [AA : BB : CC : DD : EE : FF] 8,2 100

제 자리 (BT 연결하는 동안,이 라인을 찾아 8)은 코어 블루투스 버전에 해당하는 LMP 버전입니다. (이 경우 8은 블루투스 4.2를 의미합니다.)

Android JB에서 시작하면 앱이 logcat을 더 이상 읽을 수 없으므로 (자체 로그 제외) 내 문제가 완전히 해결되지 않습니다. 그러나, 이것은 좋은 시작입니다 ... 내가 다른 것을 찾으면 업데이트 할 것입니다.