通俗理解數(shù)字簽名挟鸠,數(shù)字證書(shū)和https

前言

最近在開(kāi)發(fā)關(guān)于PDF合同文檔電子簽章的功能,大概意思就是在一份PDF合同上簽名篷扩,蓋章兄猩,使其具有法律效應(yīng)。簽章有法律效應(yīng)必須滿足兩個(gè)條件:

  • 能夠證明簽名鉴未,蓋章者是誰(shuí)枢冤,無(wú)法抵賴(lài)
  • PDF合同在簽章后不能被更改

在紙質(zhì)合同中,由于簽名字跡的不可復(fù)制性铜秆,蓋章的唯一性以及紙質(zhì)合同對(duì)涂改的防范措施(比如金額用大寫(xiě))可以保證上述兩點(diǎn)淹真,從而具備法律效應(yīng),那么PDF合同如何保障呢连茧??jī)蓚€(gè)重要的概念就是數(shù)字簽名和數(shù)字證書(shū)核蘸。這項(xiàng)技術(shù)廣泛運(yùn)用于文件認(rèn)證,數(shù)據(jù)傳輸?shù)取?br> 為了弄懂這些啸驯,我花了2天時(shí)間從加密算法開(kāi)始客扎,到數(shù)字簽名和CA證書(shū),最后再重新認(rèn)識(shí)下https的原理罚斗。

非對(duì)稱(chēng)加密

兩種算法:對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密徙鱼。

  • 對(duì)稱(chēng)加密:加密和解密的密鑰一樣,比如用123加密就是用123解密针姿,但是實(shí)際中密碼都是普通數(shù)據(jù)在互聯(lián)網(wǎng)傳輸?shù)母み海@樣一點(diǎn)密碼被中間人截取并破解,加密直接被攻破距淫。
  • 非對(duì)稱(chēng)加密:把密鑰分為公鑰和私鑰绞绒,公鑰是公開(kāi)的所有人都可以認(rèn)領(lǐng),私鑰是保密的只有一個(gè)人知道榕暇。假設(shè)A要發(fā)送一封Email給B蓬衡,他不想讓任何其他人在傳輸中看到Email的內(nèi)容,做法就是使用B的公鑰對(duì)Email加密彤枢,只有B的私鑰能夠解密(B的私鑰唯一性保證信件不會(huì)泄露)撤蟆。
    某天出意外了,有黑客冒充A給B發(fā)送Email堂污,并且也用B的公鑰加密家肯,導(dǎo)致B無(wú)法區(qū)分這封郵件是否來(lái)自A。怎么辦盟猖?此時(shí)A可以用自己的私鑰加密讨衣,那么B收到郵件后如果用A的公鑰可以解密郵件,那么證明這封信肯定來(lái)自于A式镐。
    OK反镇,通過(guò)這個(gè)例子我想你們基本明白非對(duì)稱(chēng)加密了!我總結(jié)了下面幾點(diǎn):
    公鑰加密:對(duì)內(nèi)容本身加密娘汞,保證不被其他人看到歹茶。
    私鑰加密:證明內(nèi)容的來(lái)源
    公鑰和私鑰是配對(duì)關(guān)系,公鑰加密就用私鑰解密,反之亦然惊豺,用錯(cuò)的密鑰來(lái)嘗試解密會(huì)報(bào)錯(cuò)燎孟。

數(shù)字簽名

接著聊上面發(fā)郵件的例子,假設(shè)A用自己的私鑰對(duì)Email加密發(fā)送尸昧,這存在下面問(wèn)題:

  • 對(duì)文件本身加密可能是個(gè)耗時(shí)過(guò)程揩页,比如這封Email足夠大,那么私鑰加密整個(gè)文件以及拿到文件后的解密無(wú)疑是巨大的開(kāi)銷(xiāo)烹俗。
    數(shù)字簽名可以解決這個(gè)問(wèn)題:
    1.A先對(duì)這封Email執(zhí)行哈希運(yùn)算得到hash值簡(jiǎn)稱(chēng)“摘要”爆侣,取名h1
    2.然后用自己私鑰對(duì)摘要加密,生成的東西叫“數(shù)字簽名”
    3.把數(shù)字簽名加在Email正文后面幢妄,一起發(fā)送給B
    (當(dāng)然兔仰,為了防止郵件被竊聽(tīng)你可以用繼續(xù)公鑰加密,這個(gè)不屬于數(shù)字簽名范疇)
    4.B收到郵件后用A的公鑰對(duì)數(shù)字簽名解密蕉鸳,成功則代表Email確實(shí)來(lái)自A乎赴,失敗說(shuō)明有人冒充
    5.B對(duì)郵件正文執(zhí)行哈希運(yùn)算得到hash值,取名h2
    6.B 會(huì)對(duì)比第4步數(shù)字簽名的hash值h1和自己運(yùn)算得到的h2置吓,一致則說(shuō)明郵件未被篡改无虚。


    圖1.png

其實(shí)就是利用算法(不一定是非對(duì)稱(chēng)算法)對(duì)原文hash值加密,然后附著到原文的一段數(shù)據(jù)衍锚。數(shù)字簽名的作用就是驗(yàn)證數(shù)據(jù)來(lái)源以及數(shù)據(jù)完整性友题!解密過(guò)程則稱(chēng)為數(shù)字簽名驗(yàn)證。
幾點(diǎn)疑惑:

  1. 如果中間人同時(shí)篡改了Email正文和數(shù)字簽名戴质,那B收到郵件無(wú)法察覺(jué)啊度宦。
    答案:數(shù)字簽名的生成需要對(duì)方私鑰,所以數(shù)字簽名很難被偽造告匠。萬(wàn)一私鑰泄漏了呢戈抄,不好意思,你私鑰都能弄丟了那這篇文章當(dāng)我白寫(xiě)后专。(私鑰絕對(duì)保密不參與傳輸)
  2. 公鑰是公開(kāi)的并且可以自行導(dǎo)入到電腦划鸽,如果有人比如C偷偷在B的電腦用自己公鑰替換了A的公鑰,然后用自己的私鑰給B發(fā)送Email戚哎,這時(shí)B收到郵件其實(shí)是被C冒充的但是他無(wú)法察覺(jué)裸诽。
    答案:確實(shí)存在這種情況!解決辦法就是數(shù)字證書(shū)

數(shù)字證書(shū)

上面第2點(diǎn)描述的安全漏洞根源就是A的公鑰很容易被替換型凳!那么數(shù)字證書(shū)是怎么生成的呢丈冬?以及如何配合數(shù)字簽名工作呢?

  1. 首先A去找"證書(shū)中心"(certificate authority甘畅,簡(jiǎn)稱(chēng)CA)埂蕊,為公鑰做認(rèn)證往弓。證書(shū)中心用自己的私鑰,對(duì)A的公鑰和一些相關(guān)信息一起加密蓄氧,生成"數(shù)字證書(shū)"(Digital Certificate):


    圖2.png
  2. A在郵件正文下方除了數(shù)字簽名函似,另外加上這張數(shù)字證書(shū)


    image.png
  3. B收到Email后用CA的公鑰解密這份數(shù)字證書(shū),拿到A的公鑰匀们,然后驗(yàn)證數(shù)字簽名缴淋,后面流程就和圖1的流程一樣了准给,不再贅述泄朴。
    幾點(diǎn)疑惑:

  • 假設(shè)數(shù)字證書(shū)被偽造了呢?
    答案:是的露氮,傳輸中數(shù)字證書(shū)有可能被篡改祖灰。因此數(shù)字證書(shū)也是經(jīng)過(guò)數(shù)字簽名的,上文說(shuō)道數(shù)字簽名的作用就是驗(yàn)證數(shù)據(jù)來(lái)源以及數(shù)據(jù)完整性畔规!B收到郵件后可以先驗(yàn)證這份數(shù)字證書(shū)的可靠性局扶,通過(guò)后再驗(yàn)證數(shù)字簽名。
  • 要是有1萬(wàn)個(gè)人要給B發(fā)郵件叁扫,難道B要保存1萬(wàn)份不同的CA公鑰嗎三妈?
    答案:不需要,CA認(rèn)證中心給可以給B一份“根證書(shū)”莫绣,里面存儲(chǔ)CA公鑰來(lái)驗(yàn)證所有CA分中心頒發(fā)的數(shù)字證書(shū)畴蒲。CA中心是分叉樹(shù)結(jié)構(gòu),類(lèi)似于公安部->省公安廳->市級(jí)派出所对室,不管A從哪個(gè)CA分支機(jī)構(gòu)申請(qǐng)的證書(shū)模燥,B只要預(yù)存根證書(shū)就可以驗(yàn)證下級(jí)證書(shū)可靠性。
  • 如何驗(yàn)證根證書(shū)可靠性掩宜?
    答案:無(wú)法驗(yàn)證蔫骂。根證書(shū)是自驗(yàn)證證書(shū),CA機(jī)構(gòu)是獲得社會(huì)絕對(duì)認(rèn)可和有絕對(duì)權(quán)威的第三方機(jī)構(gòu)牺汤,這一點(diǎn)保證了根證書(shū)的絕對(duì)可靠辽旋。如果根證書(shū)都有問(wèn)題那么整個(gè)加密體系毫無(wú)意義。

舉個(gè)栗子

上面一直在說(shuō)虛擬場(chǎng)景檐迟,下文舉個(gè)實(shí)際例子看看數(shù)字簽名+數(shù)字證書(shū)如何驗(yàn)證文件的來(lái)源补胚,以及文件的完整性。比如下載文件:我們開(kāi)發(fā)中一般是服務(wù)端給文件信息加上md5,客戶端下載完成后校驗(yàn)md5來(lái)判斷文件是否損壞锅减,這個(gè)其實(shí)就是簡(jiǎn)單的校驗(yàn)機(jī)制糖儡,而很多正規(guī)企業(yè)比如google都會(huì)給官方軟件簽署數(shù)字簽名和證書(shū),而windows已經(jīng)預(yù)置了很多CA根證書(shū):


image.png

然后看下我之前從網(wǎng)上下載的Chrome.exe怔匣,右鍵屬性握联,通過(guò)鼠標(biāo)點(diǎn)擊一步驗(yàn)證:


image.png

Google Inc就是google從CA中心申請(qǐng)的數(shù)字證書(shū)桦沉。這樣看來(lái),這個(gè)軟件確實(shí)來(lái)源于google官方金闽,并且文件完整纯露。接下來(lái)我干點(diǎn)壞事,用notepad打開(kāi)這個(gè)exe文件并且篡改里面的內(nèi)容(修改二進(jìn)制數(shù)據(jù)代芜,09 改為33)埠褪,保存:


image.png

再看下數(shù)字簽名還正常嗎?


image.png

文件被篡改導(dǎo)致數(shù)字簽名無(wú)效挤庇,數(shù)字證書(shū)沒(méi)有問(wèn)題钞速。

https簡(jiǎn)單介紹

數(shù)字簽名和數(shù)字證書(shū)可以用于文件,當(dāng)然也能用于html網(wǎng)頁(yè)數(shù)據(jù)嫡秕。本人沒(méi)有https相關(guān)開(kāi)發(fā)經(jīng)驗(yàn)渴语,故不做深入探討只是簡(jiǎn)單介紹下。

  • http的安全缺陷
  1. 無(wú)法驗(yàn)證服務(wù)端的身份
  2. 無(wú)法保證數(shù)據(jù)完整性
  3. 無(wú)法保證數(shù)據(jù)傳輸不被竊聽(tīng)

而https就是專(zhuān)門(mén)解決這三個(gè)問(wèn)題昆咽,https使用數(shù)字簽名+數(shù)字證書(shū)解決了前2個(gè)問(wèn)題驾凶,很多大型網(wǎng)站比如baidu.com都會(huì)采用https協(xié)議,網(wǎng)址左側(cè)會(huì)出現(xiàn)綠色加鎖標(biāo)識(shí):


image.png

點(diǎn)擊可以查看證書(shū)掷酗,另外瀏覽器都會(huì)內(nèi)置CA根證書(shū)调违,來(lái)對(duì)這些網(wǎng)站的服務(wù)器證書(shū)進(jìn)行校驗(yàn)。
然后泻轰,再用SSL協(xié)議對(duì)傳輸通道加密技肩,保證數(shù)據(jù)傳輸不被竊聽(tīng),這個(gè)SSL加密原理分為很多步驟不在本文討論范圍糕殉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亩鬼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阿蝶,更是在濱河造成了極大的恐慌雳锋,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羡洁,死亡現(xiàn)場(chǎng)離奇詭異玷过,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)筑煮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)辛蚊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人真仲,你說(shuō)我怎么就攤上這事袋马。” “怎么了秸应?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵虑凛,是天一觀的道長(zhǎng)碑宴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)桑谍,這世上最難降的妖魔是什么延柠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮锣披,結(jié)果婚禮上贞间,老公的妹妹穿的比我還像新娘。我一直安慰自己雹仿,他們只是感情好增热,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著盅粪,像睡著了一般钓葫。 火紅的嫁衣襯著肌膚如雪悄蕾。 梳的紋絲不亂的頭發(fā)上票顾,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音帆调,去河邊找鬼奠骄。 笑死位他,一個(gè)胖子當(dāng)著我的面吹牛曹傀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播延曙,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芹务,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蝉绷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枣抱,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤熔吗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后佳晶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桅狠,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年轿秧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了中跌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡菇篡,死狀恐怖漩符,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驱还,我是刑警寧澤嗜暴,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布津滞,位于F島的核電站,受9級(jí)特大地震影響灼伤,放射性物質(zhì)發(fā)生泄漏触徐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一狐赡、第九天 我趴在偏房一處隱蔽的房頂上張望撞鹉。 院中可真熱鬧,春花似錦颖侄、人聲如沸鸟雏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)孝鹊。三九已至,卻和暖如春展蒂,著一層夾襖步出監(jiān)牢的瞬間又活,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工锰悼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柳骄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓箕般,卻偏偏與公主長(zhǎng)得像耐薯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子丝里,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容