2015-06-24 16 views
9

Tôi có một ứng dụng Windows 7, sử dụng Stollmann SDK để liên kết thành công PC với Android. Các hai chiều trao đổi địa chỉ MAC Bluetooth, băm và Randomizer được thực hiện ra khỏi ban nhạc qua NFC:Bluetooth Secure Simple Pairing (SSP) sử dụng mã QR là Out of Band (OOB) kênh

application with qr code

Mã nguồn của ứng dụng Windows tiếc là không thể được chia sẻ tại đây. Ở phía Android không cần ứng dụng và Ghép nối an toàn đơn giản được hệ điều hành thực hiện (theo HandoverManager?) Sau khi nhận được thông báo NDEF với application/vnd.bluetooth.ep.oob.

Bây giờ tôi đang cố gắng tạo an Android app, sử dụng một chiều xác thực để thực hiện ghép nối OOB thông qua mã QR được quét (thay vì NFC).

Mã QR tùy chỉnh sẽ được hiển thị ở màn hình PC (được tạo bởi ZXing.Net) và chứa địa chỉ MAC Bluetooth, băm và trình ngẫu nhiên.

Tuy nhiên OOB liên kết dường như được chưa được thực hiện trong Android -

BluetoothAdapter.java:

/** 
* Read the local Out of Band Pairing Data 
* <p>Requires {@link android.Manifest.permission#BLUETOOTH} 
* 
* @return Pair<byte[], byte[]> of Hash and Randomizer 
* 
* @hide 
*/ 
public Pair<byte[], byte[]> readOutOfBandData() { 
    if (getState() != STATE_ON) return null; 
    //TODO(BT 
    /* 
    try { 
     byte[] hash; 
     byte[] randomizer; 

     byte[] ret = mService.readOutOfBandData(); 

     if (ret == null || ret.length != 32) return null; 

     hash = Arrays.copyOfRange(ret, 0, 16); 
     randomizer = Arrays.copyOfRange(ret, 16, 32); 

     if (DBG) { 
      Log.d(TAG, "readOutOfBandData:" + Arrays.toString(hash) + 
       ":" + Arrays.toString(randomizer)); 
     } 
     return new Pair<byte[], byte[]>(hash, randomizer); 

    } catch (RemoteException e) {Log.e(TAG, "", e);}*/ 
    return null; 
} 

BluetoothDevice.java:

/** 
* Start the bonding (pairing) process with the remote device using the 
* Out Of Band mechanism. 
* 
* <p>This is an asynchronous call, it will return immediately. Register 
* for {@link #ACTION_BOND_STATE_CHANGED} intents to be notified when 
* the bonding process completes, and its result. 
* 
* <p>Android system services will handle the necessary user interactions 
* to confirm and complete the bonding process. 
* 
* <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}. 
* 
* @param hash - Simple Secure pairing hash 
* @param randomizer - The random key obtained using OOB 
* @return false on immediate error, true if bonding will begin 
* 
* @hide 
*/ 
public boolean createBondOutOfBand(byte[] hash, byte[] randomizer) { 
    //TODO(BT) 
    /* 
    try { 
     return sService.createBondOutOfBand(this, hash, randomizer); 
    } catch (RemoteException e) {Log.e(TAG, "", e);}*/ 
    return false; 
} 

/** 
* Set the Out Of Band data for a remote device to be used later 
* in the pairing mechanism. Users can obtain this data through other 
* trusted channels 
* 
* <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}. 
* 
* @param hash Simple Secure pairing hash 
* @param randomizer The random key obtained using OOB 
* @return false on error; true otherwise 
* 
* @hide 
*/ 
public boolean setDeviceOutOfBandData(byte[] hash, byte[] randomizer) { 
    //TODO(BT) 
    /* 
    try { 
    return sService.setDeviceOutOfBandData(this, hash, randomizer); 
    } catch (RemoteException e) {Log.e(TAG, "", e);} */ 
    return false; 
} 

Câu hỏi của tôi:

Kể từ OOB Xanh ghép nối răng hoạt động tốt trên NFC trên Android - bạn có nghĩ rằng có một cách (hackish) để thực hiện tương tự thông qua mã QR không?

Có thể (ý tưởng điên rồ) bằng cách cho ăn HandoverManager bằng thông báo NDEF giả mạo?

+0

Tôi không biết nếu nó có thể, nhưng tôi thích ý tưởng điên rồ của bạn. Đây là một phát bắn trong bóng tối mà tôi không có thời gian để kiểm tra ngay bây giờ, nhưng NFC có gửi một Broadcast khi được kích hoạt không? https://play.google.com/store/apps/details?id=lt.andro.broadcastlogger&hl=vi –

+0

Xin chào @Alexandee Farbar. Bạn có nhận được câu trả lời cho câu hỏi của mình không? – ymerdrengene

Trả lời

1

Bạn không thể giả mạo chương trình phát sóng NFC thực sự được đăng bởi ứng dụng dịch vụ NFC khi phát hiện thẻ NFC. Vì đây là một ứng dụng hệ thống không phát sóng được bảo vệ không thể phát sóng ý định.

+0

Ok có nghĩa là ứng dụng của tôi không thể tiêm một số "sự kiện" hoặc ý định của hệ thống ... nhưng có lẽ tôi chỉ có thể gọi HandoverManager và chuyển nó thông báo NDEF của tôi? Ngoài ra mục đích của câu hỏi của tôi là tìm cách để thực hiện "Ghép nối đơn giản an toàn" qua mã QR (dưới dạng kênh OOB). Điều này không phải là một số tin nhắn giả mạo NFC - có thể có một số cách tốt hơn. –

+1

Xin lỗi vì câu trả lời chưa hoàn chỉnh của tôi. Lớp IMO HandOverManager có thể không truy cập được trực tiếp vì nó nằm trong gói dịch vụ nfc, bạn có thể thử nghiệm bằng cách sử dụng Reflection. – 7383

+1

Kiểm tra điều này có thể hữu ích cho bạn. https://github.com/Mobisocial/EasyNFC/blob/master/src/main/java/mobisocial/nfc/addon/BluetoothConnector.java – 7383

Các vấn đề liên quan