bdaddr - Changing your Bluetooth USB Dongle's MAC Address "[...] MAC addresses are most often assigned by the manufacturer of a network interface controller and are stored in its hardware, such as the card's read-only memory or some other firmware mechanism. If assigned by the manufacturer, a MAC address usually encodes the manufacturer's registered identification number [...]"

So does that mean we can't change the public MAC of Bluetooth Dongles? Depends.
I my tests I was able to set MACs of most Bluetooth Dongles with different side-effects.

Since setting a MAC is not a standard operation, you will have to use vendor-specific Bluetooth HCI command to set it. Luckily there is a tool for that.
It supports some (but not all) chips from those manufacturers: Ericsson, CSR, Texas Instruments, Broadcom, Zeevo and ST.

Make sure to install BlueZ on your system first.

  1. Download from here: bdaddr (not the latest version, but works fine)
  2. Extract it
  3. Rename bdaddrtar in bdaddr.tar
  4. Extract it
  5. Run make in the directory.
Here is the man for bdaddr:

bdaddr - Utility for changing the Bluetooth device address 
    Usage: bdaddr [-i <dev>] [-r] [-t] [new bdaddr] 

Run it with: sudo ./bdaddr -i hci0 -r 00:de:ad:be:ef:00

Where hci0 is your HC-Interface (if you have multiple it might be hci1, hci2.. run hciconfig to check). The -r flag forces a vendor-specific reset. Some modules might need an additional reset via hciconfig reset before working properly. Tested CSR modules needed to be plugged in and out before properly working as BLE Peripherals.