Broadcast
广播是保护接收者匿名性的方法,通过广播所有参与者都能收到消息,即使发送者也不知道接收者的身份。
性能
通常广播相比点到点通信会需要更高的吞吐量。
寻址
-
显式地址(explicit address):并不总是必要的,例如IP协议的广播地址。用于减小广播的代价,但是难以提供匿名性。
-
隐式地址(implicit address):接收者(addressee)站的属性,用于进一步处理。
- 不可见地址(invisible address):即使同一个地址发送两次,也没有观察者能发现,即地址的重用看起来就像使用了另一个地址。
实现方法:发送方和接收方协商密钥(公钥或私钥),解密后如果消息有意义,则就是发给自己的。
- 可见地址(visible address):与不可见地址相反,观察者可以发现某些信息的地址相同。
实现方法:发送方和接受方协商一个随机数添加在明文消息里,其他人就不知道消息是发送给谁的。
一些要注意的问题:
-
使用不可见的隐式地址,如何判断解密后的消息有意义?
-
加tag,使用长度足够的tag就可以抗碰撞(生日悖论)
-
使用哈希或消息认证码,计算
enc(random_num, msg, hash(random_num, msg))
或
enc(key, msg, MAC(key, msg))
-
-
使用可见的隐式地址,随机数的生成?
- 需要注意每个随机数只能用一次,否则会导致linkable的问题
- 因此通信双方可以协商使用同一个seed生成随机数
-
不可见地址的代价比可见地址高很多,因为前者涉及到对每一条消息的解密,而后者只需要对比随机数。
地址分发(address distribution):根据地址与身份的关联性公开与否,可以将地址分为公开地址(public address)和私有地址(private address)。
public address | private address | |
---|---|---|
implicit invisible address | 使用公钥加密,开销非常大。但是可以用于第一次通信时双方交换对称密钥或随机数seed。 | 私钥加密。开销大(但是当然比公钥加密小一点)。 |
implicit visible address | 地址可见,且地址与身份之间的关联性是公开的,会暴露信息。不应该被使用。 | 获得对称密钥或随机数生成seed后可以使用。使用后需要更换随机数。 |
不可见公开地址的最高效的实现方法就是采用公钥加密系统。
不可见私有地址的实现方法是私钥加密,因为私钥只有通信双发持有(private),且通信的地址是明文经过私钥加密生成的(invisible)。
可见私有地址的实现方法就是使用同一个seed生成伪随机数,每次通信使用不同的随机数。