как зашифровать данные altbeacon в формате aes-ecb - PullRequest
0 голосов
/ 17 октября 2019

Как зашифровать altbeacon в формате aes-ecb.
Я использовал флаттер, но на флаттере. Я предполагаю, что это не может быть зашифровано, поскольку данные, передаваемые в библиотеку altbeacon, имеют формат данных маяка.

 beaconTransmitter?.startAdvertising(beacon, object : AdvertiseCallback() {
      override fun onStartSuccess(settingsInEffect: AdvertiseSettings?) {
        super.onStartSuccess(settingsInEffect)
        advertiseCallback(true)
      }

1 Ответ

1 голос
/ 19 октября 2019

Использование шифрования с помощью маяков 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, существуют очень специфические требования, которые необходимо принять при создании ваших хэшированных байтов. Если вас не интересует соответствие спецификации, вы можете генерировать эти байты любым способом, каким пожелаете, при условии, что они соответствуют вашему собственному сценарию использования.

...