密码技术(九、二)之数字签名

数字签名

   ——消息到底是谁写的

数字签名的应用实例

安全信息公告

 一些信息安全方面的组织会在其网站上发布一些关系安全漏洞的警告,那么这些警告的信息是否真的是该组织所发布的呢?
 在这样的情况下就可以使用数字签名,即该组织可以对警告的信息的文件施加数字签名,这样一来世界上的所有人就都可以验证警告信息的发布者是否合法。
 一般发布消息都是尽量让人知道,所以一般不对消息进行加密,但也必须排除有人伪装的风险,因此不加密消息,只对消息加上数字签名,一般称为明文签名

软件下载

 我们经常会从网上下载软件进行安装使用,因为下载的软件可能被攻击者篡改过,所以为了防止这样的问题,软件的作者对软件加上数字签名,而我们下载后只要验证数字签名,就可以识别软件是否被攻击过了。

公钥证书

 在验证数字签名时我们需要合法的公钥,那怎么才知道自己得到公钥是否合法呢?我们可以将公钥当作是消息,对它进行数字签名。像这样对公钥施加数字签名所得到的就是公钥证书

SSL/TLS

 SSL/TLS在认证服务器是否合法时会使用证书服务器证书,它就是加上了数字签名的服务器公钥。相对地,服务器为了对客户端(用户)进行认证也会使用客户端证书。

通过RSA实现数字签名

 为了简单,我们不适用单向散列函数,而是直接对消息进行签名。关于将RSA和单向散列函数相结合来进行数字签名的详细说明,请参见RFC 3447(Public-Key Cryptography Standards(PKCS) #1)。

用RSA生成签名

签名 = 消息^D mod N (用RSA生成签名)
这里所使用的D和N就是签名者的私钥。签名就是对消息D次方求mod N的结果,也就是说将消息和自己相乘D次,然后再除以N次余数,最后求得余数就是签名。
生成签名后,发送者就可以将消息和签名发送给接收者了。

用RSA验证签名

由签名求得的消息= 签名^E mod N
这里所使用的E和N就是签名者的公钥。接收者计算签名的E次方并求mod N,得到“由签名求得的消息”,并将其与发送者直接发送过来的消息内容进行对比。如果两者一致则签名验证成功,否则验证失败。

RSA签名生成和验证.png

其他数字签名

EIGamal方式

EIGamal方式是由Taher EIGamal设计公钥算法,利用了在mod N汇总求离散对数的困难度。EIGamal方式可以被用于公钥密码和数字签名。密码软件GnuPG中也曾使用过EIGamal方式,但是由于1.0.2版本中数字签名的实现上存在漏洞,因此在GnuPG中EIGamal也仅被用于公钥密码。

DSA

  DSA(Digital Signature Algorithm)是一种数字签名算法,是由NIST于1991年制定的数字签名规范,DSS是Schnorr算法与EIGammal方式的变体,只能被用于数字签名。

ECDSA

 ECDSA(Elliptic Curve Digital Signature Algorithm)是一种利用椭圆曲线密码来实现的数字签名算法。

Rabin方式

 Rabin方式是由M.O.Rabin设计的公钥算法,利用了mod N中求平方根的困难度。Rabin方式可以被用于公钥密码和数字签名。

对数字签名的攻击

中间人攻击

 对数字签名中间人攻击,具体来说就是主动攻击者Mallory介入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者,从而能够在无需要破译数字签名算法的前提下完成攻击。
 要防止中间人攻击,就需要确认自己所得到的公钥是否真的属于自己通信对象的。比如打个电话确认一下,但是在电话念一遍公钥内容太难了,有一个简单办法就是 分别用单向散列函数计算出散列值,然后电话中可以相互确认,这个散列值其实就是指纹

对单向散列函数攻击

 数字签名中所使用的单向散列函数必须具有抗碰撞性,否则攻击者就可以生成另外一条不同的消息,使其与签名所绑定的消息具有相同散列值。

利用数字签名攻击公钥密码

 在RSA中,生成签名的公司是:
 签名= 消息^D mod N
 这个公式和公钥密码中解密的操作是等同的,也就是说可以将“请对消息签名”这一请求理解为你“请解密消息”。利用这一点,攻击者可以发动一种巧妙的攻击,即利用数字起那么来破译密码。
 我们假设现在Alice 和Bob进行通信,主动攻击者Mallory正在窃听。Alice用Bob的公钥加密消息后发送给Bob,发送的密文是用下面的公式计算出来的。
密文=消息 ^E mod N
Mallory窃听到Alice发送的密文并将其保存袭来,由于Mallory想要破译这段信息,因此他给Bob写了这样一封信。

Mallory发送给Bob的邮件内容.png

Mallory将刚刚窃听到的密文作为上述邮件的附件一起发送给Bob,即
附件数据=密文
 当Bob看到了Mallory的邮件,发现附件数据的确只是随机数据,于是Bob对附件数据进行了签名,具体情形如下:
签名 = 附件数据^D mod N (RSA生成签名)
= 密文^D mod N (附件数据实际上是密文)
= 消息 (进行了解密操作)
 Bob的本意是对随机的附件数据施加数字签名,但结果却无意中解密了密文。如果不小心将上述签名的内容发送给了Mallory,那么Mallory就这么破译了密文了。
 对于这样的攻击,我们应该采取怎样的对策呢?
首先,不要直接对象进行签名,对散列值进行签名比较安全;
其次,公钥密码和数字签名最好分别使用不同的密钥对。
实际上,GnuPG和PGP都可以生成多个密钥对。
 然后,最重要的是就是绝对不要对意思不清楚的消息进行签名,尤其是不要对看起来只是随机数据消息进行签名。

潜在伪造

 如果一个没有私钥的攻击者能够对有意义的消息生成合法的数字签名,那么这个数字签名的算法一定是不安全的,因为这样的签名时可以被伪造的。
 然而,即使签名的对象是无意义的消息,如果攻击者能够生成合法的数字签名,我们也应该讲其当成是对这种签名算法的一种潜在威胁。这种情况称为对数字签名的潜在伪造
 为了应对潜在伪造,人们在改良RSA的基础上开发出一种签名算法,叫作RSA-PSS。其不是对消息本身进行签名,而是对其散列值进行签名。另外,为了提高安全性,在计算散列值的时候还要对消息加盐。

其他攻击

 针对公钥密码的攻击方法大部分都能够用于攻击数字签名,例如用暴力破解来找出私钥,或是尝试对RSA的N进行质因数分解等。

各种密码的比较

对称密码与公钥密码的对比,以及消息认证码与数字签名的对比.png

混合密码系统与对散列值签名

 在混合密码系统中,消息本身是用对称密码加密的,而只有对称密码的免邮是公钥密码加密的,即在这里对称密码的密钥就相当于消息。
 另一方面,数字签名也使用了同样的方法,将消息本身输入单向散列函数求散列值,然后再对散列值进行签名,在这里散列值相当于消息。
 如果将两者的特点总结一下,我们可以说:对称密码的密钥是机密性的精华,单向散列函数的散列值是完整性的精华

数字签名无法解决的问题

 用数字签名既可以识别出篡改和伪装,还可以防止否认。也就是说,我们同时实现了确认消息的完整性、进行认证以及否认防止。
 然而要真正使用数字签名,有一个大前提,那就是用于验证签名的公钥必须属于真正的发送者。即便数字签名算法在强大,如果你得到的公钥是伪造的,那么数字签名也会完全失效。
 为了能够确认自己的公钥是合法的,我们需要使用证书。所谓证书,就是将公钥当作一条消息,由一个科学的第三方对其签名后所得到的公钥。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 前言 《图解密码技术》一书介绍了很多关于密码的知识,通读一遍需要不少时间。为了方便学习,我对书中关键的部分进行了总...
    咖枯阅读 7,137评论 1 25
  • 数字签名    ——消息到底是谁写的 数字签名 从消息认证码到数字签名 消息认证码的局限性 通过前面介绍的消息认证...
    Invincibled阅读 2,194评论 0 3
  • 在深入学习区块链时,不可避免的需要了解密码学。区块链算是对密码学的一次整合运用,虽然并无太多创新的密码算法,但也值...
    Kerwong阅读 44,271评论 4 25
  • 工作或者面试过程中我们总会接触到密码相关的技术和问题,本篇文章是我对近期阅读《图解密码技术》的总结,这本书很值得推...
    乐Coding阅读 1,439评论 0 5
  • 数字签名介绍 碰到的问题 数字通信时我们碰到了几个问题:防篡改、确认发送者、防否认 消息认证码只能解决防篡改和确认...
    JMasche阅读 1,401评论 1 5