員外在第一次聽到數(shù)字簽名這個(gè)概念的時(shí)候芥喇,有一種感覺,就是這明明是一種計(jì)算機(jī)領(lǐng)域的加密算法械馆,為什么非要叫他數(shù)字簽名呢武通?如果您也有這種疑問,今天這篇文章一定要看下去尾菇。
數(shù)字簽名一詞從何而來(lái)
且聽員外給您瞎掰扯一段囚枪。早在計(jì)算機(jī)出世之前,人們?cè)诤炇鹨恍┲匾募臅r(shí)候链沼,都是本人簽字,同時(shí)在再一些防偽標(biāo)記忆植。這樣做有兩個(gè)好處:第一你可以制作只屬于你的簽名,同時(shí)其他人可以根據(jù)你的簽名來(lái)驗(yàn)證其真假耀里;第二拾氓,你在這份文件上面簽好的字,只在這份文件上生效咙鞍,跟其他文件沒有任何關(guān)系续滋,別人即使把你的簽名剪下來(lái)貼在其他文件上,也是無(wú)效的疲酌。
后來(lái)在計(jì)算機(jī)的普及下了袁,越來(lái)越多的人們?cè)谟?jì)算機(jī)的世界里也會(huì)有像簽字這樣的需求载绿,同樣油航,不僅要能有效簽名,還必須要滿足上面文字簽名的兩個(gè)特性谊囚,所以在這樣的背景下,數(shù)字簽名誕生了秒啦。
數(shù)字簽名方案
數(shù)字簽名方案由以下三個(gè)算法構(gòu)成:
- (sk, pk) :=generateKeys(keysize)
- generateKeys就是一個(gè)用來(lái)專門生成私鑰和公鑰的一種計(jì)算函數(shù)熬粗,如果您想要生成屬于自己的私鑰和公鑰的話,那么您只需要在這個(gè)函數(shù)中輸入一個(gè) keysize余境,也就是密鑰大小,然后即可得到您想要的私鑰和公鑰灌诅。其中私鑰 sk 需要您來(lái)安全保存芳来,公鑰 pk 是公布給大眾的。如果您用自己的私鑰對(duì)某段信息進(jìn)行加密了猜拾,那么公眾拿到您的公鑰就可以對(duì)加密后的信息進(jìn)行驗(yàn)證即舌,看其是不是屬于你的簽名。
- sig:=sign(sk, message)
- sign()是用來(lái)簽名的計(jì)算函數(shù)挎袜。只要您把自己的私鑰 sk 和 想要加密的信息輸入顽聂,輸出的信息 sig 就是加密后的簽名盯仪。
- isValid:=verify(pk, message, sig)
- verify()是一個(gè)驗(yàn)證函數(shù)紊搪,驗(yàn)證者需要同時(shí)擁有公鑰、加密前的信息以及加密后的信息全景,然后輸入到verify()這個(gè)函數(shù)里面耀石,最后會(huì)輸出一個(gè)結(jié)果,該結(jié)果要么是真(true)爸黄,證明簽名屬實(shí)滞伟,反之是假(false),證明簽名是假的炕贵。
我們要求以下兩個(gè)性質(zhì)有效:
- 有效簽名一定可以通過驗(yàn)證梆奈,即:verify(pk, message, sign(sk, message))==true;
- 簽名不可偽造称开。
不可偽造性
也就是說亩钟,如果有一個(gè)人持有你的公鑰,同時(shí)還有你對(duì)某一個(gè)信息簽名后的結(jié)果和這份信息原始的樣子,他也只能是知道這些信息而已径荔。無(wú)法根據(jù)擁有的信息在其他文件上偽造你的簽名督禽,前提是這個(gè)其他文件你是從來(lái)沒有簽過名而且你的私鑰也沒有泄漏的情況下。這一不可偽造特性類似于我們與對(duì)手之間在進(jìn)行一場(chǎng)游戲总处,游戲的使用在密碼安全證明中很常見狈惫。
真的沒有偽造的可能嗎?
其實(shí)并不是絕對(duì)意義上的不可偽造鹦马,說到底這其實(shí)也是一個(gè)數(shù)量級(jí)的問題胧谈,就像之前我們說過的哈希碰撞的概率一樣,如果攻擊者的嘗試次數(shù)超過了密鑰位數(shù)的 n 個(gè)次方荸频,那就真的會(huì)破解成功獲取到你的簽名菱肖。只不過這樣的機(jī)會(huì)非常非常小,小到我們可以假設(shè)在實(shí)踐中不會(huì)發(fā)生旭从。