82173

Randomize Mac Address Bluetooth LE Broadcast

Question:

As far as I know some android phones today can act as BLE beacon (this feature is usually disabled in most devices ) . When an android device is acting as a beacon and is discoverable , is it's MAC address randomised ? Can we in any way not show the actual MAC id when the device is discoverable ?

Answer1:

Most newer Android devices with 5.0+ have support for Bluetooth LE peripheral mode, meaning they can transmit as beacons. The feature is present in Android 5.0+, but some manufacturers have chosen to disable support on certain models, especially older models. You can see a list of devices known to support and not support this feature here: <a href="http://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html" rel="nofollow">http://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html</a>

<strike>When the feature is enabled, the MAC address is not randomized during transmission, and the transmission includes the device's actual bluetooth MAC address, allowing receiving devices to read this MAC address.</strike>

<strong>EDIT: Subsequent testing has proven to me that the above statement is incorrect.</strong> The MAC address is randomized each time the transmitter is restarted. You can see a <a href="https://stackoverflow.com/a/42139586/1461050" rel="nofollow">proof of this here.</a>

There is no mechanism in Android to change this.

When scanning on Android, the actual MAC address from the transmission is returned. To prove this, I started an iOS beacon transmitter using the Locate app on an iPod Touch 5th Generation with iOS 8.3, and simultaneously scanned for the device on both a Linux device as well as a Nexus 5X with Android 6.0:

Android Locate Beacon App on Nexus 5X with Android 6.0: MAC address: 60:35:48:79:D8:08

Linux Bluez sudo hcitool lescan: MAC address: 60:35:4B:79:D8:0B

As you can see, both devices read the same MAC address, proving that it is not spoofed on scan in either Android or Linux.

Two more notes:

<ul><li>

The Bluetooth MAC address reported by the iPod Touch with iOS 8.3 in Settings -> General -> Bluetooth reports 2C:FF:EE:xx:xx:xx (last three octets blanked out) differs from the address transmitted. This suggests that iOS randomizes the MAC address when transmitting.

</li> <li>

The Bluetooth MAC address detected by Linux and Android does not change when you stop and restart advertising on the iOS device, suggesting iOS retains the same randomized address across restarts. After rebooting the iOS device and restarting transmission, both Linux and Android detected a different MAC address: 46:59:C9:CB:0C:D5. This suggests that the randomized transmitted MAC is changes across restarts on iOS.

</li> </ul>

Recommend

  • Randomize Mac Address Bluetooth LE Broadcast
  • Stuck trying to list associated model
  • Does the Advertisement Rate of a beacon affect battery of a detector application
  • Mixing JavaScript and Razor syntax
  • Working iBeacon/BLE beacon app code example
  • Create a detail view under a parent route
  • How to programmatically set UUID, major ID, … and other properties at 1m in Altbeacon format
  • FirefoxOS update 1.1 to 1.3 in LG D300?
  • Removing namespace from Soap Response Camel CXF
  • How do I get a reference to ConnectivityService object?
  • Android system killed my service when I clear all recent app
  • Meta Query Posts by Sub Field Value ACF
  • Low-pass filter in carrier modulation and demodulation
  • Contiki UDP packet transmission duration with CC2538
  • Setting Up Eclipse for Android SDK?
  • Static build in Qt on Windows Vista
  • sfValidatorDoctrineUnique fails on capital letters
  • stop Parallel.ForEach immediately
  • How to Set Custom DataGridView Headers (with spaces) using LINQ?
  • Raspberry Pi iBeacon Scan Parsing Response
  • ASP.NET MVC - Detect Time Spent on Page
  • Pandas: merge_asof() sum multiple rows / don't duplicate
  • css font-size and line-height not matching the baseline
  • Graceful pod termination
  • insert a picture into database(sqlite) with java code. what should i do?
  • Getting error java.io.FileNotFoundException (log4j log file) at the time of publish project on cloud
  • How to specify input and output paths from cmd.exe for a PowerShell script?
  • How to generate and display a QR Code in ionic 2
  • Shallow update not allowed (git > 1.9)
  • Why winpcap requires both .lib and .dll to run?
  • How do I rollback to a specific git commit
  • bootstrap to use multiple ng-app
  • How to get icons for entities from eclipse?
  • Revoking OAuth Access Token Results in 404 Not Found
  • Turn off referential integrity in Derby? is it possible?
  • JaxB to read class hierarchy
  • reshape alternating columns in less time and using less memory