The reason why your bridge and TAP interface share the same MAC address,is because the bridge does not have a MAC,until its bound to an interface.
If you create a bridge with BRCTL,and do a "brctl show",you will find the bridge has empty ports.(no interface bound to it)
In binding TAP0 to br0,naturally,it will show as the same MAC.
I created a test bridge,to illustrate.
# brctl addbr testbr0
[root@stooge etc]# brctl show testbr0
bridge name bridge id STP enabled interfaces
testbr0 8000.000000000000 no
I created three test TAPS.
The output from "brctl showmacs testbr0".
[root@stooge etc]# brctl showmacs testbr0
port no mac addr is local? ageing timer
1 86:51:b6:95:0e:b6 yes 0.00
2 86:58:63:c6:d4:e7 yes 0.00
3 8a:a7:fa:17:c5:12 yes 0.00
As you can see,each bridge port has a unique MAC address,and the bridge should show its MAC,
as the first interface bound.
If you bridge a physical network interface,the Ethernet bridge will inherit its MAC address,and move all virtual interfaces down.
Example binding eth0,to the test bridge.
[root@stooge etc]# brctl showmacs testbr0
port no mac addr is local? ageing timer
4 AA:BB:CC:DD:EE:FF yes 0.00
1 86:51:b6:95:0e:b6 yes 0.00
2 86:58:63:c6:d4:e7 yes 0.00
3 8a:a7:fa:17:c5:12 yes 0.00
Using "brctl show" again;
[root@stooge etc]# brctl show
bridge name bridge id STP enabled interfaces
testbr0 8000.00aabbccddee no eth0
tap00
tap01
tap02
the TAP interfaces have moved down one,even though eth0,is still at PORT 4.
You still have unique MAC addresses.
If the Ethernet bridge is bound to a source-route interface,you have no choice in using an IP address,or DHCP.
For what its worth,if you bridge a source-route interface,you will show a "non-local" MAC address.
This is the next-hop router MAC address.
I know in RedHat,there is an option in specifying a source IP,using IFCONFIG.
My first option,would be consulting the IP command reference,as I think you can specify a source IP.
I never have tried it.