利用密码学解决问题

不同于之前学习的利用密码学解决传统的安全通信与身份验证等问题,本单元将学习密码学的其他方面应用,包括:

  • Anonymous Communication,利用非对称加密链使得网络中的两个用户进行匿名通信。
  • Voting,同样会用到非对称加密链实现匿名投票,但我们还会加一些特性以确保投票统计的正确性。
  • Digital Cash,实现数字现金,主要包括两种方式:
    • centralized(中心化):盲签名(blind signature)

      盲签名在密码学中是指,由大卫·乔姆提出的盲签名是一种数字签名方式,其中消息的内容在签名之前对签名者是不可见的(盲化)。得到的盲签名可以对原始的、非盲消息以常规数字签名的方式公开验证。盲签名可以有效地保护隐私,其中签名者和消息作者是不同,例子包括电子选举和数字现金。
      盲签名的一个经常被用的类比是选民将填妥的匿名选票装入一种带复写纸内衬的信封,信封的外面预先印上了选民的证件。官员首先验证证件然后在信封上签字,签字通过复写纸转移到选票上。一旦选票被签名,信封归还给选民,选民将选票放到一个没有标记的新的普通信封里。因此,签名者没有看过消息内容,但是一个第三方组织能通过基础的签名方案来检查签名是有效的。

    • decentralized(去中心化):比特币(Bitcoin)

      比特币(英语:Bitcoin,缩写:BTC 或 XBT)是一种基于去中心化,采用点对点网络与共识主动性,开放源代码,以区块链作为底层技术的加密货币,比特币由中本聪(网名)(Satoshi Nakamoto)于2008年10月31日发表论文,2009年1月3日,创世区块诞生。在某些国家、央行、政府机关、学术界则将比特币视为虚拟商品,而不认为是货币。货币金融学认为货币具有交易介质、记账单位、价值储藏三种基本职能,但由于其高度波动性因此不具有后两种基本职能从而不是货币。

洋葱路由(Onion Routing)

洋葱路由(Onion routing)为一种在电脑网络上匿名沟通的技术。在洋葱路由的网络中,消息一层一层的加密包装成像洋葱一样的数据包,并经由一系列被称作洋葱路由器的网络节点发送,每经过一个洋葱路由器会将数据包的最外层解密,直至目的地时将最后一层解密,目的地因而能获得原始消息。而因为透过这一系列的加密包装,每一个网络节点(包含目的地)都只能知道上一个节点的位置,但无法知道整个发送路径以及原发送者的地址

img

Mix Networks

Mix networks是一种路由协议,它通过使用称为 mix 的代理服务器链来创建难以追踪的通信,这些代理服务器从多个发件人接收消息,将它们打乱,然后以随机顺序将它们发送回下一个目的地(可能是另一个 mix 节点)。 这打破了请求源和目的地之间的联系,使窃听者难以追踪端到端通信。 此外,mix 节点只知道它立即从哪个节点接收消息,以及将打乱顺序的消息发送到下一直接目的地,从而使该网络能够抵抗恶意 mix 节点。

img

基于RSA的盲签名(Blind RSA signatures)

盲签名与一般的数字签名不同,一般的数字签名思想是产生一串仅发送者能够产生的别人无法伪造的数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。不同的是,盲签名的签名者是不知道其所签名消息的具体内容,仅在未来某一时刻(以公证人的身份)证明签名的真实性。

具备以下性质:

  • 签名者对其签名的消息是不可见的(这就是“盲”的含义),即签名者不知道他所签名消息的具体内容。
  • 签名消息不可追踪,即当签名消息被公布后,签名者无法知道这是他何时/哪次的签署的。
  • 注意这里省略了一般签名的性质(不可伪造性和不可抵赖性)。

一般签名过程的角色只有一个签名者,但是盲签名中不能是同一个角色,因为原始消息必须由另外一个提供者进行盲化处理,称为签名消息的接收者。总体过程:

  1. 接收者首先将待签数据进行盲变换,把变换后的盲数据发给签名者。
  2. 经签名者签名后再发给接收者。
  3. 接收者对签名再作去盲变换,得出的便是签名者对原数据的盲签名。

img

c
假设A是接收者,B是签名者,私钥d, 并公开RSA公钥(n,e), A让B盲签消息m,流程:

  1. A选取盲因子 \(r\),计算

    \[m’\equiv mr^{e}\ ({\mathrm {mod}}\ N) \]

  2. B对 \(m’\) 进行盲签名

    \[s’\equiv (m’)^{d}\ ({\mathrm {mod}}\ N) \]

  3. A去盲得到原始签名

    \[s\equiv s’\cdot r^{{-1}}\ ({\mathrm {mod}}\ N) \]

From Wiki:

One of the simplest blind signature schemes is based on RSA signing. A traditional RSA signature is computed by raising the message \(m\) to the secret exponent \(d\) modulo the public modulus \(N\). The blind version uses a random value \(r\), such that \(r\) is relatively prime to \(N\) (i.e. \(gcd(r, N) = 1\) ). \(r\) is raised to the public exponent \(e\) modulo \(N\) , and the resulting value \(r^{e} \bmod N\) is used as a blinding factor. The author of the message computes the product of the message and blinding factor, i.e.:

\[m’\equiv mr^{e}\ ({\mathrm {mod}}\ N) \]

and sends the resulting value \(m’\) to the signing authority. Because \(r\) is a random value and the mapping \(r\mapsto r^{e}{\bmod N}\) is a permutation it follows that \(r^{e}{\bmod N}\) is random too. This implies that \(m’\) does not leak any information about \(m\). The signing authority then calculates the blinded signature \(s’\) as:

\[s’\equiv (m’)^{d}\ ({\mathrm {mod}}\ N) \]

\(s’\) is sent back to the author of the message, who can then remove the blinding factor to reveal \(s\), the valid RSA signature of \(m\):

\[s\equiv s’\cdot r^{{-1}}\ ({\mathrm {mod}}\ N) \]

This works because RSA keys satisfy the equation \(r^{{ed}}\equiv r{\pmod {N}}\) and thus

\[s\equiv s’\cdot r^{{-1}}\equiv (m’)^{d}r^{{-1}}\equiv m^{d}r^{{ed}}r^{{-1}}\equiv m^{d}rr^{{-1}}\equiv m^{d}{\pmod {N}}, \]

hence \(s\) is indeed the signature of \(m\).

In practice, the property that signing one blinded message produces at most one valid signed messages is usually desired. This means one vote per signed ballot in elections, for example. This property does not hold for the simple scheme described above: the original message and the unblinded signature is valid, but so is the blinded message and the blind signature, and possibly other combinations given a clever attacker. A solution to this is to blind sign a cryptographic hash of the message, not the message itself.

原文地址:http://www.cnblogs.com/I-am-Sino/p/16921090.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性