Использование шифрования с помощью маяков Bluetooth очень сложно по ряду причин:
- Маяки Bluetooth имеют небольшую полезную нагрузку - около 22 используемых байтов, что слишком мало для полностью зашифрованного сообщения. В результате маяки обычно используют однонаправленный хэш, который сокращается до меньшего количества байтов после применения определенного алгоритма шифрования.
- Стандартные форматы маяка, такие как iBeacon, AltBeacon и Eddystone-UID, разделяют этот ограниченныйполезная нагрузка в поля, которые должны быть открытыми (незашифрованными) идентификаторами.
- Форматы, такие как Eddystone-EID, которые используют шифрование, требуют сложных систем для конфигурирования каждого передатчика маяка с хешем, специфичным для часов, и затем декодируют этоиспользуя алгоритм сопоставления на принимающей стороне. Затем они сокращают зашифрованную полезную нагрузку до нескольких байтов.
Если вы хотите создать хэш с алгоритмом шифрования, а затем сократить результат до 8-байтовой полезной нагрузки, вы можете передать еев кадре Eddystone-EID, как показано ниже. Просто замените 8 байтов в "0x0001020304050607" вашими хэшированными данными.
Beacon beacon = new Beacon.Builder()
.setId1("0x0001020304050607") // Encrypted Identifier
company code
.setTxPower(-59)
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout(BeaconParser.EDDYSTONE_EID_LAYOUT);
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {
@Override
public void onStartFailure(int errorCode) {
Log.e(TAG, "Advertisement start failed with code: "+errorCode);
}
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
Log.i(TAG, "Advertisement start succeeded.");
}
});
Для того, чтобы это было совместимо со спецификацией Eddystone-EID, существуют очень специфические требования, которые необходимо принять при создании ваших хэшированных байтов. Если вас не интересует соответствие спецификации, вы можете генерировать эти байты любым способом, каким пожелаете, при условии, что они соответствуют вашему собственному сценарию использования.