斯坦福Dan Boneh密码学——03 匿名路由
这篇笔记的篇幅相对少一些,内容也比较好理解一些。实在不知道为什么Markdown语法写希腊字母本来格式好好的,转移到这边就变了。。
匿名路由
假如Alice想给Bob发一条消息m,但她不想让Bob或其他任何人知道消息m来自Alice。首先我们考虑设置一个中间代理Carol,Alice给Carol发送m,并让Carol将消息转发给Bob。这显然不能为Alice提供匿名,因为任何观看网络的人都会看到m是从Alice发送给Carol,然后从Carol发送给Bob的。
带有共享密钥的代理
Alice与Carol建立共享密钥k,并将 c = E(k,m)发送给Carol,其中 ϵ \epsilon ϵ =(E,D)是语义安全的密码。Carol解密c并将m转发给Bob。尽管如此,这种方法仍然不能确保Alice的匿名性:如果在某一天,Carol收到的唯一消息是Alice发来的,而她发送给Bob的唯一消息,那么观察者可以将两者链接起来,仍然可以了解到发布的消息来自Alice。
混合服务
让Carol提供混合服务来解决这个问题,也就是说,混合来自多个不同方A1…An的传入消息的服务。对于i=1…n,Carol与每一方都建立一个密钥ki,并且每方给Carol发送一条加密消息c。Carol收集所有n个传入的密文,使用正确的密钥对每个密文进行解密,并将生成的明文以某种随机顺序转发到它们的目的地。现在,一个观察者在检查Carol的流量时,看到n条消息传入,n条消息传出,但无法判断哪条消息被发送到了哪里。我们说Alice的匿名集大小为n。剩下的问题是,Carol仍然可以告诉大家,Alice是在论坛上发布具体信息的人。为了消除这一最终风险,Alice使用了多种混合服务,例如Carol和David。她与Carol建立了一个密钥kc,与David建立了密钥kd。为了向Bob发送消息,她构造了以下嵌套密文c2:
为了完整起见,Alice可能希望在密文中嵌入路由信息,所以c2实际上构造为:
接下来,Alice发送c2给Carol。Carol解密c2并获得明文{David,c1},这意味着她得将c1发送给David。David解密c1并获得明文{Bob,m},这意味着他得将m发送给Bob。解密嵌套密文的过程,类似于一次剥一层洋葱。因此,这种路由过程通常称为洋葱路由。
这样的话,在Carol和David没有串通的情况下,他们都不知道消息来源于何处,消息要发往何处。为了更稳妥一些,Alice可能想通过两次以上的混音传递信息。只要其中一个混音不与其他混音串通,Alice的匿名性就会被保留。此外,还有一个小问题,当Alice与David建立共享密钥kd时,她必须在不向David透露身份的情况下这样做。否则,David会知道c1来自Alice,这是我们不想要的。这个问题会在后续讨论中解决。
洋葱路由中的语义安全
现在的问题是,在嵌套密文的传输中,我们不想让中间代理的任何一方知道有关明文m的任何信息。假设Carol可以从c2学习m的前几个字符,然后发现Bob的论坛上只有一篇帖子以这些字符开头。那么Carol就可以将整个帖子链接到Alice,David也是如此,最好是知道kd的David无法从密文c2中了解关于m的信息。因此,语义安全这个概念需要再次被强调。
更一般地,对于定义在(K,M,C)上的密码
ϵ
\epsilon
ϵ =(E,D),让我们将n路嵌套密码
ϵ
\epsilon
ϵn=(En,Dn)定义为:
我们的目标是表明,如果
ϵ
\epsilon
ϵ 在语义上是安全的,那么即使对手只得到了k0,…,kn中的一个之外的所有键,
ϵ
\epsilon
ϵn在语义上也是安全的。为了精确,我们定义了两个实验,实验0和实验1,其中对于b=0,1,实验b是:
(1)对手给挑战者(m0,m1,d),其中m0,m1∈ M,且是等长消息,0≤ d<n。
(2)挑战者选择n个键k0,…,kn−1 并计算 c ← En((k0,…,kn−1),mb),它向对手发送c和所有密钥k0,…,kn−1,但不包括密钥kd。
(3)对手输出位 ˆb ∈ {0, 1}.
这个游戏捕获了这样一个事实,即对手可以看到所有键k0,…,kn−1,kd除外,并试图破坏语义安全。我们将对手的优势NE(n)adv[A,
ϵ
\epsilon
ϵ]定义为语义安全:
其中Wb是A在实验b中输出1的事件,对于b=0,1。如果NE(n)adv[A,
ϵ
\epsilon
ϵ]可以忽略不计,我们说E对于n路嵌套在语义上是安全的。
定理:
对于每个常数n>0,如果
ϵ
\epsilon
ϵ =(E,D)在语义上是安全的,那么
ϵ
\epsilon
ϵ在语义上对于n向嵌套是安全的。