Skip to content

Secure Shuffling

Note

We're sorry, this article hasn't been completed or updated yet. We're working on finishing it as soon as possible. In case of any questions, please reach out to our Support Team.

In order to prevent spoofing or cloning Beacons can rotate (shuffle) their iBeacon and Eddystone identifiers. Rotations take place in a constant time interval set to 24 hours of beacon operation.

This mechanism is based on the fact that both Kontakt.io Cloud and Beacons share the same algorithm that, when provided with the the same configuration keys (unique for each Beacon) will generate the same values. Once a beacon is configured as shuffled it broadcasts iBeacon an/or Eddystone identifiers generated by this particular algorithm, changing the values every shuffling interval.

Turning Secure Shuffling on and off

To enable Secure Shuffling, a config with the shuffled parameter set to true must be created and applied to a Beacon. Similarly, turning it off requires the shuffled parameter set to false.

Warning

It is highly recommended to configure Beacons before shuffling them.

Resolving shuffled identifier

Info

When using Kontakt.io SDK for iOS or Android resolving happens mostly automatically. Information below will help to understand what happens under the hood.

Resolving a Beacon identifier is done by simply requesting a Device by either Proximity UUID, Major & Minor (bid parameter) or by Namespace & Instance ID (euid parameter), depending on whether the Device is advertising in iBeacon or Eddystone mode. The response will contain the deshuffled Device information.

Additionally, next 7 shuffled values (for both iBeacon and Eddystone) for the requested Beacons are included in the response, specifically in the futureId attribute. However, please keep in mind that our backend assumes constant, uninterrupted operation of a shuffled beacon and it has no way to know when a Beacon e.g. had its battery removed. In a situation like this or when the device battery dies and is replaced after some time, shuffling will be resumed with last advertised identifier. The Kontakt.io Cloud will still keep track of that beacon, since resolving is algorithm-based and not time-based. Nevertheless the futureId array may return incorrect values until fixed. To do that, shuffling must be turned off and then on again.

Implementation details

TBD