數位簽章

數位簽章(,又称公鑰數位簽章)是一種功能類似写在纸上的普通签名、但是使用了公钥加密领域的技术,以用于鉴别数字訊息的方法。一套数字签名通常會定义两种互补的运算,一个用于签名,另一个用于验证。法律用語中的電子簽章與數位簽章代表之意義並不相同。電子簽章指的是依附於電子文件並與其相關連,用以辨識及確認電子文件簽署人身分、資格及電子文件真偽者;數位簽章則是以數學演算法或其他方式運算對其加密而形成的電子簽章。意即並非所有的電子簽章都是數位簽章。

数字签名不是指将签名扫描成数字图像,或者用触摸板获取的签名,更不是落款。

数字签名了的文件的完整性是很容易验证的(不需要骑缝章、骑缝签名,也不需要笔迹鑑定),而且数字签名具有不可抵赖性(即不可否認性),不需要笔迹专家来验证。

历史
1976年,Whitfield Diffie和Martin Hellman首次描述了数字签名体系,他们根据陷门单向排列的功能推测了这种体系的存在。不久之后,Ronald Rivest, Adi Shamir和Len Adleman发明了RSA算法,该算法可以用来生成原始的数字签名(因“普通”的RSA签名并不安全,这仅仅为概念验证)。1989年,使用了RSA算法的Lotus Notes 1.0是第一个被广泛推广的提供数字签名的软件包。

在RSA算法之后,其他数字签名方案被很快开发出来——最早的三个分别为Lamport签名、Merkle签名(也被称为“Merkle trees”或“Hash trees”)、和Rabin签名。

1988年,Shafi Goldwasser、Silvio Micali和Ronald Rivest成为第一个严格定义数字签名安全要求的人。他们描述了签名的攻击模型的层次结构,还提出了GMR签名方案——第一种被证明可防止伪造选定信息的数字签名,与现今能被接受的数字签名安全定义一致。

软件的作者可以加上数字签名,以便用户下载后对签名进行验证。

认证机构(CA)也可以为用户的公钥加上数字签名生成证书,以便人们确认用户公钥的合法性。

SSL/TLS使用服务器证书(加上了数字签名的服务器公钥)认证服务器身份是否合法。

可以直接对消息进行签名(即使用私钥加密,此时加密的目的是为了签名,而不是保密),验证者用公钥正确解密消息,如果和原消息一致,则验证签名成功。但通常会对消息的散列值签名,因为通常散列值的长度远小于消息原文,使得签名(非对称加密)的效率大大提高。注意,计算消息的散列值不是数字签名的必要步骤。

在实际使用中,我们既想加密消息,又想签名,所以要对加密和签名组合使用,比如TLS就組合了加密和簽名。

数字签名应用了公钥密码领域使用的单向函数原理。单向函数指的是正向操作非常简单,而逆向操作非常困难的函数,比如大整数乘法。这种函数往往提供一种难解或怀疑难解的数学问题。目前,公钥密码领域具备实用性的三个怀疑难解问题为:质数分解,离散对数和椭圆曲线问题。

操作
数字签名就是将公钥密码反过来使用。签名者将讯息用私鑰加密(這是一種反用,因為通常公鑰密碼中私鑰用於解密),然后公布公钥;验证者使用公钥将加密讯息解密并比对消息(一般签名对象为消息的散列值。本节为了讲解方便,假设数字签名直接将消息而非散列值签名)。

因此,可靠的公钥密码算法均能构建出可靠的数字签名。下面講解為何反用公鑰密碼算法能夠構建出安全的數字簽名。

Alice是簽名者,假設她要對消息A進行簽名。現在, Alice生成了其公私鑰密碼對,公佈該公鑰,然後將消息用私鑰加密後發布。

現在,希望Alice的簽名算法具有如下特性:

完整性:確認消息在傳輸過程中沒有丟位,沒被篡改

認證:確認消息的發送者是發布公鑰的Alice

不可否認性:確認Alice的確發布過該消息

实现
数字签名算法是依靠公钥加密技术来实现的。在公钥加密技术里,每一个使用者有一对密钥:一把公钥和一把私钥。公钥可以自由发布,但私钥则秘密保存;还有一个要求就是要让通过公钥推算出私钥的做法不可能实现。

普通的数字签名算法包括三种算法:

  • 一种密码生成算法
  • 标记算法
  • 验证算法

RSA、ECDSA等算法可以实现数字签名。常用的密碼雜湊函數有SHA家族。

参考文献
外部連結

评论 (0)

  • 还没有评论,来抢沙发吧。