欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      數(shù)字簽名及安全電子郵件

      時(shí)間:2019-05-12 02:13:05下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《數(shù)字簽名及安全電子郵件》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《數(shù)字簽名及安全電子郵件》。

      第一篇:數(shù)字簽名及安全電子郵件

      數(shù)字簽名及安全電子郵件

      一、背景知識(shí)

      使用個(gè)人證書,在電子郵件中至少有以下功能。

      保密性:你可以使用收件人的數(shù)字證書對(duì)電子郵件進(jìn)行加密。這樣,只有收件人的私鑰才能解密這封郵件,即使第三方截獲郵件,由于沒有收件人的私鑰,也無(wú)法閱讀該郵件。當(dāng)然,要發(fā)送加密電子郵件,必須先擁有對(duì)方的數(shù)字證書。

      認(rèn)證身份:你可以使用你本人的數(shù)字證書對(duì)電子郵件進(jìn)行數(shù)字簽名,這樣,收件人通過驗(yàn)證簽名就可以確定你的身份,而不是他人冒充的。

      完整性:如果驗(yàn)證數(shù)字簽名有效,收件人不僅可以認(rèn)證你的身份,還可以確信收到的郵件在傳遞的過程中沒有被篡改。

      不可否認(rèn)性:數(shù)字簽名要使用你本人數(shù)字證書中的私鑰,而私鑰僅你個(gè)人所有,所以,你不能對(duì)發(fā)送過的簽名郵件進(jìn)行否認(rèn)。

      1、電子郵件的重要性

      由于越來(lái)越多的人通過電子郵件發(fā)送機(jī)密信息,因此確保電子郵件中發(fā)送的文檔不是偽造的變得日趨重要。同時(shí)保證所發(fā)送的郵件不被除收件人以外的其他人截取和偷閱也同樣重要。

      通過使用 Outlook Express 和 Foxmail,可以在電子事務(wù)中證明身份,就象兌付支票時(shí)要出示有效證件一樣。也可以使用數(shù)字證書來(lái)加密郵件以保護(hù)郵件的保密性。數(shù)字證書結(jié)合了 S/MIME 規(guī)范來(lái)確保電子郵件的安全。

      2、對(duì)電子郵件進(jìn)行數(shù)字簽名 對(duì)電子郵件進(jìn)行數(shù)字簽名,能夠確保電子郵件中發(fā)送的文檔不是偽造的,即收件人能夠確信該郵件來(lái)自于其聲稱的發(fā)件人,同時(shí)郵件從發(fā)件人的機(jī)器傳達(dá)到接收人的機(jī)器沒有經(jīng)過任何改動(dòng)。

      當(dāng)發(fā)件人在待發(fā)郵件中添加數(shù)字簽名時(shí),發(fā)件人就在郵件中加入了數(shù)字簽名和自己的數(shù)字證書。郵件的接收方接收到該郵件后,首先判斷發(fā)件人的證書是否有效(該證書是否是可信任的CA簽發(fā)的,該證書是否在有效期內(nèi),該證書是否已經(jīng)被撤銷),如果證書有效,從發(fā)件人的證書中提取公鑰信息,來(lái)驗(yàn)證郵件的數(shù)字簽名是否有效。

      3、對(duì)電子郵件進(jìn)行加密 對(duì)電子郵件進(jìn)行加密(使用接收人的數(shù)字證書中的公鑰進(jìn)行加密)可以保證所發(fā)送的郵件不被除收件人以外的其他人截取和偷閱。

      當(dāng)發(fā)件人對(duì)郵件進(jìn)行加密時(shí),使用接收人的數(shù)字證書中的公鑰對(duì)郵件進(jìn)行加密。郵件的接收方接收到該郵件后,使用自己的私鑰對(duì)郵件進(jìn)行解密,可以得到郵件的明文。因?yàn)槭褂霉€加密的數(shù)據(jù),只有對(duì)應(yīng)的私鑰才可以解密,而對(duì)一封加密郵件來(lái)說,只有接收人才具有對(duì)應(yīng)的私鑰,也就是只有接收人才可以對(duì)郵件解密得到郵件的明文。其他任何人截獲了該郵件都是無(wú)法識(shí)別的亂碼。有效的保證了郵件內(nèi)容的保密性。

      4、電子郵件證書使用的簡(jiǎn)易性 如果接收到有問題的安全郵件,例如郵件已被篡改或發(fā)件人的數(shù)字證書已過期,則在被允許閱讀郵件內(nèi)容前,會(huì)看到一條安全警告,它詳細(xì)說明了問題所在。根據(jù)警告中的信息,接收人可以決定是否查看郵件。

      以上所述的簽名和加密郵件的過程都是由郵件客戶端程序(如Microsoft Outlook,F(xiàn)oxmail、Netscape Messager等)來(lái)完成。對(duì)于郵件的發(fā)送人來(lái)說,就是在郵件發(fā)送之前,簡(jiǎn)單的點(diǎn)擊“簽名”和“加密”按鈕就可以了;對(duì)于郵件的接收人來(lái)說,郵件接收到后,郵件客戶端程序更能夠自動(dòng)對(duì)簽名郵件進(jìn)行驗(yàn)證,對(duì)加密郵件進(jìn)行解密,并將驗(yàn)證和解密結(jié)果顯示給郵件的接收人,不需要任何人工操作,非常方便。

      5、安全電子郵件的工作方式

      安全電子郵件的工作方式有兩種:

      第一種情況是采用個(gè)人或單位證書發(fā)送安全電子郵件。如吉林省數(shù)字證書認(rèn)證中心、廣東省數(shù)字證書認(rèn)證中心等就頒發(fā)個(gè)人證書或單位證書,然后你可以選擇用這兩種證書發(fā)送安全的電子郵件。

      第二種方式是直接給電子信箱的所有人或單位的電子信箱地址頒發(fā)數(shù)字證書,如江西省數(shù)字證書認(rèn)證中心、安徽省數(shù)字認(rèn)證中心等就頒發(fā)專門的郵件證書。

      由于以上兩種方式的原理基本一樣,考慮到網(wǎng)上的免費(fèi)資源,我們以第一種方式為主加以說明。

      當(dāng)然,在第一種方式中使用單位證書發(fā)送安全郵件的原理基本一樣,由于網(wǎng)上單位證書的免費(fèi)資源很少,因此,我們重點(diǎn)以個(gè)人證書為例。另外,要發(fā)送安全電子郵件,必須使用一些電子郵件客戶端軟件,如Outlook Express、Foxmail等,打開網(wǎng)頁(yè)收發(fā)郵件是不能進(jìn)行數(shù)字簽名的,我們這里以O(shè)utlook Express 5.0為例,說明安全電子郵件的發(fā)送過程。

      二、實(shí)驗(yàn)?zāi)康募耙?/p>

      1、掌握用Outlook Express發(fā)送數(shù)字簽名電子郵件的方法。

      2、掌握用Outlook Express發(fā)送加密電子郵件的方法。

      三、實(shí)驗(yàn)準(zhǔn)備

      1、上網(wǎng)計(jì)算機(jī),IE5.0以上,Outlook Express 5.0以上。

      2、已經(jīng)申請(qǐng)好個(gè)人數(shù)字證書(本實(shí)驗(yàn)以在廣東省數(shù)字證書認(rèn)證中心申請(qǐng)的個(gè)人免費(fèi)證書為例)。

      四、實(shí)驗(yàn)過程

      1、修改電子郵件帳號(hào)屬性,綁定證書

      (1)在Outlook Express5.0單擊“工具”菜單中的“帳號(hào)”,選取郵件選項(xiàng)卡中的用于發(fā)送安全電子郵件的郵件帳號(hào),然后單擊“屬性”,選擇安全標(biāo)簽,在簽名證書標(biāo)識(shí)項(xiàng)后,點(diǎn)擊選擇按鈕,如圖9.1所示。

      圖9.1 安全屬性

      (2)選擇數(shù)字證書,如圖9.2、圖9.3所示。

      圖9.2 選擇簽名證書

      圖9.3 已經(jīng)設(shè)置好簽名證書

      3)如果希望對(duì)方能給你發(fā)送加密電子郵件,則點(diǎn)擊加密首選項(xiàng),再選擇你的證書及算法,如圖9.4所示。

      圖9.4 已經(jīng)設(shè)置好簽名和加密數(shù)字證書

      2、發(fā)送數(shù)字簽名電子郵件

      (1)打開Outlook Express,點(diǎn)擊新郵件,輸入對(duì)方的郵件地址,并點(diǎn)擊“簽名”按鈕,然后點(diǎn)擊發(fā)送,如圖9.5所示。

      圖9.5 撰寫數(shù)字簽名郵件

      (2)對(duì)方用Outlook Express收到你的郵件后,首先顯示圖9.6所示提示。

      圖9.6 收到數(shù)字簽名郵件

      (3)點(diǎn)擊繼續(xù),打開郵件,如圖9.7所示。

      圖9.7 打開簽名郵件

      3、發(fā)送加密電子郵件

      (1)當(dāng)用戶擁有了對(duì)方的數(shù)字證書,并添加到通訊薄中就可以向?qū)Ψ桨l(fā)送加密的電子郵件了,如圖9.8所示。

      圖9.8 通訊簿中查看對(duì)方數(shù)字證書

      (2)打開Outlook Express,點(diǎn)擊新郵件,輸入對(duì)方的郵件地址,并點(diǎn)擊“加密”按鈕,如圖9.9所示。

      圖9.9 發(fā)送加密電子郵件

      (3)對(duì)方用Outlook Express收到郵件后首先顯示圖9.10所示的提示。

      圖9.10收到加密電子郵件

      (4)點(diǎn)擊繼續(xù),打開郵件,如圖9.11所示。

      圖9.11 打開加密電子郵件

      (5)如果你沒有對(duì)方的數(shù)字證書,是不能發(fā)送加密郵件的,如圖9.11、圖9.12所示。

      圖9.11 無(wú)對(duì)方證書發(fā)送加密郵件

      圖9.12 系統(tǒng)提示出錯(cuò)

      (6)當(dāng)然,也可以發(fā)送同時(shí)加密和簽名的電子郵件,如圖9.13、圖9.14、圖9.15所示。

      圖9.13 同時(shí)發(fā)送簽名和加密郵件

      圖9.14 收到簽名和加密郵件

      圖9.15 打開簽名和加密郵件

      至此,我們已經(jīng)完成了安全電子郵件的全部操作,即如何發(fā)送加密的和簽名的電子郵件,需要指出的是,有許多免費(fèi)郵箱是在網(wǎng)頁(yè)下收發(fā)郵件的,在此情況下一般不能使用數(shù)字證書。

      五、練習(xí)與思考

      1、加密郵件與簽名郵件有什么區(qū)別?

      2、隨著中華人民共和國(guó)電子簽名法的頒布實(shí)施,你認(rèn)為簽名電子郵件具有法律效力嗎?

      3、為什么發(fā)送加密郵件需要對(duì)方的數(shù)字證書?其加密原理是什么?

      4、能用他人的證書發(fā)送簽名郵件嗎?為什么?

      5、請(qǐng)用FOXMAIL設(shè)置簽名及加密郵件,比較與Outlook express的異同。

      第二篇:PDF數(shù)字簽名

      制做PDF文件電子簽名的方法

      1、在一張白紙上寫一個(gè)您最得意的簽名,并掃描或用數(shù)碼像機(jī)將簽名轉(zhuǎn)為圖片文件;

      2、用photoshop打開上面做好的簽名圖片文件,裁切成剛好能容納您簽名的大小,并 去掉圖片的背景顏色(方法詳見后附),將處理好的圖片另存為.GIF 圖片格式文件待用;

      3、打開Adobe Acrobat 9 Pro(本制做方法適用于Adobe Acrobat 9 Pro 版本,其它 版本請(qǐng)做相應(yīng)調(diào)整),任意新建一個(gè)PDF文件;

      4、點(diǎn)擊Adobe Acrobat 9 Pro 工具欄中的“簽名”—“放置簽名”,并用鼠標(biāo)在新建的 那個(gè)PDF文件中畫一個(gè)長(zhǎng)方形的簽名區(qū)(名字相簽多大就畫多大);

      5、在隨后彈出的窗口中選擇“我要立即創(chuàng)建新的數(shù)字簽名”,并點(diǎn)“下一步”;

      6、在下一個(gè)窗口選擇“新建PKCS#12數(shù)字身份證文件”,并點(diǎn)“下一步”;

      7、在彈出的新窗口中輸入“姓名”、“部門”,“單位名稱”,“電子郵件地址”(以上這些 都只能輸英文或拼音,不支持漢字);然后選擇國(guó)家并點(diǎn)“下一步”;

      8、在接下來(lái)彈出的窗口中選擇電子簽名文件制做好后要存放的文件夾,輸入并確認(rèn)您 以后簽名時(shí)驗(yàn)證身份要用的密碼;最后點(diǎn)擊“完成”

      9、在“簽名文檔”窗口中的“簽名為:”檔中選擇“新建ID”,在“外觀(A):”欄選擇 “創(chuàng)建新外觀?”;

      10、彈出的“配置簽名外觀”窗口中的標(biāo)題欄輸入這類簽名的標(biāo)識(shí),例:“無(wú)日期簽名” 等等;在“配置圖形”--“顯示:”中選擇“導(dǎo)入的圖形(I)”并點(diǎn)擊“文件(F)?”;從“選擇圖片”窗口的“瀏覽(B)?”中找到第2步制做好的圖片文件并點(diǎn)“確定”返回;這時(shí)您就可以“配置簽名外觀”窗口的“預(yù)覽”欄中看見您手寫的簽名了;您也會(huì)看到,除了您的簽名外,它后面還跟著一些其它信息;這些信息是通過“配置文本”-“顯示:”后面的選擇項(xiàng)來(lái)控制的,您可以根據(jù)您的簽名需要選擇;

      11、至此,點(diǎn)“確定”后,您的電子簽名就算制做完成了,以后在簽名時(shí),只需重復(fù)第 4步并輸入密碼就OK了!

      12、如果需要在簽名時(shí)同時(shí)輸入簽名“原因”,就需要在“配置簽名外觀”窗口的“配 置文本”選項(xiàng)中勾選上“原因”,點(diǎn)擊“確定”完成電子簽名制做后,再在“編輯”菜單欄選擇“首選項(xiàng)”—“種類”—“安全性”—“高級(jí)首選項(xiàng)”—“創(chuàng)建”標(biāo)簽中勾選“簽名時(shí)顯示原因”。這樣,以后簽名時(shí)就可以輸入您的簽名“意見”(原因)了;

      13、如果您對(duì)剛才制做的這個(gè)簽名不滿意,可以在Adobe Acrobat 9 Pro 工具欄中的“高 級(jí)”—“安全性設(shè)置”,中刪除這個(gè)數(shù)字身份證;如果你想對(duì)制做好的簽名做一個(gè)備份,以后電腦系統(tǒng)重裝后可以直接導(dǎo)入使用,您也可以在這個(gè)窗口中將您制做好的“數(shù)字身份證”導(dǎo)出保存。

      14、對(duì)于您不滿意的簽名外觀,可以在“編輯”菜單欄選擇“首選項(xiàng)”—“種類”—“安 全性”—“外觀”欄中進(jìn)行“編緝”或“刪除”;也可以在此處應(yīng)用“新建”按鈕直

      名人堂:眾名人帶你感受他們的驅(qū)動(dòng)人生馬云任志強(qiáng)李嘉誠(chéng)柳傳志史玉柱

      接創(chuàng)建一個(gè)新的簽名外觀。

      15、修改簽名密碼:運(yùn)行Adobe Acrobat 9 Pro,依次點(diǎn)擊菜單欄中的“高級(jí)”—“安 全性設(shè)置”—“數(shù)字身份證文件”,再點(diǎn)擊右側(cè)最上面一行中的“更改口令”就可更改您簽名時(shí)要輸入的密碼了!

      第三篇:白話數(shù)字簽名

      白話數(shù)字簽名

      由于數(shù)字簽名基于非對(duì)稱加密技術(shù),所以我們需要先啰嗦一下對(duì)稱加密和非對(duì)稱加密技術(shù)。

      對(duì)稱加密

      何謂加密?加密是一種“把數(shù)據(jù)搞亂掉”的技術(shù)。加密技術(shù)涉及到4種東東:

      明文:可以被人或程序識(shí)別的數(shù)據(jù)。例如一個(gè)文本文件、一段歌詞、一個(gè)Word文檔、一首MP3、一個(gè)圖片文件、一段視頻等等。

      加密算法:將數(shù)據(jù)搞亂掉的方法。

      密鑰(密碼):一個(gè)你在進(jìn)行加密操作時(shí)給出的字符串,讓加密算法不但把明文“搞亂掉”,而且要亂得“與眾不同”。這樣即使別人搞到了解密算法,如果沒有當(dāng)初加密時(shí)所使用的密碼,一樣無(wú)法進(jìn)行解密操作。

      密文:明文被加密算法和密鑰加密后的結(jié)果。它看上去就是一堆亂碼,沒有人或程序能知道它到底表示什么信息。

      作為加密的一個(gè)實(shí)例,我將使用由我杜撰的“景氏替換加密算法”演示一下加密過程。明文:good good study, day day up.密鑰:google

      景氏替換加密算法:將明文中的所有的字母“d”替換成密鑰。

      密文:將“good good study, day day up.”中的所有字母“d”替換成“google”,就得到密文“googoogle googoogle stugoogley,googleay googleay up.”。這個(gè)密文亂得還可以吧?一般人看了肯定不知道它是什么意思。

      那么什么是解密呢?解密就是把密文再變回明文的過程。

      例如“景氏替換解密算法”就是:將密文中所有與密鑰相同的字符串替換成“d”。密文:googoogle googoogle stugoogley,googleay googleay up.密鑰:google

      景氏替換解密算法:將密文中所有與密鑰相同的字符串替換成“d”。

      明文:將“googoogle googoogle stugoogley,googleay googleay up.”中的所有“google”替換成“d”,就得到了明文“good good study, day day up.”。

      您肯定已經(jīng)注意到了,我們?cè)谶M(jìn)行加密和解密時(shí)使用的密鑰必須是相同的,例如在上例中,加密和解密都必須使用相同的密鑰“google”。所以像“景氏替換加密算法”這種就被稱為對(duì)稱加密算法。目前最為流行的對(duì)稱加密算法是DES和AES,此外,對(duì)稱加密算法還有IDEA、FEAL、LOKI、Lucifer、RC2、RC4、RC5、Blow fish、GOST、CAST、SAFER、SEAL等。WinRAR的文件加密功能就是使用的AES加密算法。

      非對(duì)稱加密

      非對(duì)稱加密算法是一類與眾不同的加密算法,它的密鑰不是1個(gè),而是2個(gè)(一對(duì)),我們先姑且稱它們?yōu)槊荑€K1和密鑰K2。非對(duì)稱加密算法的特點(diǎn)是,如果用密鑰K1進(jìn)行加密,則有且僅有密鑰K2能進(jìn)行解密;反之,如果使用密鑰K2進(jìn)行了加密,則有且僅有密鑰K1能進(jìn)行解密。注意“有且僅有”的意思——如果用密鑰K1進(jìn)行了加密,是不能用密鑰K1

      進(jìn)行解密的;同樣,如果用密鑰K2進(jìn)行了加密,也無(wú)法用密鑰K2進(jìn)行解密。這是一個(gè)非常重要的特性,至于如何在實(shí)際中運(yùn)用這個(gè)特性,請(qǐng)看下文。

      我想給Clark傳送一個(gè)AV小電影,又怕被他的老婆發(fā)現(xiàn)......話說俺得了一個(gè)很不錯(cuò)的AV小電影,想通過網(wǎng)絡(luò)傳送給Clark,可是又怕被他的老婆發(fā)現(xiàn)(因?yàn)镃lark的老婆是一個(gè)超級(jí)黑客,她可以使用sniffer技術(shù)截獲任何通過網(wǎng)線傳送給Clark的數(shù)據(jù)。別跟我說用VPN,它超出了本文討論的范圍),怎么辦呢?對(duì)了,我們需要一個(gè)“將數(shù)據(jù)搞亂掉”的技術(shù)——加密技術(shù)。我先使用WinRAR對(duì)小電影進(jìn)行壓縮,然后加上密碼“TswcbyyqjsjhfL”(還記得么?WinRAR的文件加密功能使用的是叫作AES的對(duì)稱加密算法)。接著,將這個(gè)加密后的文件通過QQ傳送給Clark。然后,興沖沖地?fù)艽駽lark的手機(jī): “喂?Clark么?好久不見,呵呵......我給你發(fā)了個(gè)好東東呦,在QQ上,收到?jīng)]?......密碼是TswcbyyqjsjhfL,對(duì),就是天生我才必有用,千金散盡還復(fù)來(lái)的首字母,第一個(gè)和最后一個(gè)字母要大寫呦......”

      可是,Clark,我是真的不知道你的老婆大人剛剛就在你的身邊呀!而且你也知道,我打電話從來(lái)都是喜歡很大聲的......嗚嗚嗚......在Clark跪了一夜的搓衣板之后,我們都明白:如果是已經(jīng)保存在自己硬盤上的文件,使用對(duì)稱加密技術(shù)進(jìn)行加密是沒有問題的;如果是兩個(gè)人通過網(wǎng)絡(luò)傳輸文件,使用對(duì)稱加密就很危險(xiǎn)——因?yàn)樵趥魉兔芪牡耐瑫r(shí),還必須傳送解密密鑰。我們需要一個(gè)與眾不同的加密算法,一個(gè)不需要傳遞解密密鑰的加密算法。非對(duì)稱加密正好可以滿足我們的需要?;舅悸肥沁@樣的:首先,生成一對(duì)滿足非對(duì)稱加密要求的密鑰對(duì)(密鑰K1和密鑰K2)。然后,將密鑰K1公布在網(wǎng)上,任何人都可以下載它,我們稱這個(gè)已經(jīng)公開的密鑰K1為公鑰;密鑰K2自己留著,不讓任何人知道,我們稱這個(gè)只有自己知道的密鑰K2為私鑰。當(dāng)我想給Clark傳送小電影時(shí),我可以用Clark的公鑰對(duì)小電影進(jìn)行加密,之后這個(gè)密文就連我也無(wú)法解密了。這個(gè)世界上只有一個(gè)人能將密文解密,這個(gè)人就是擁有私鑰的Clark。

      后來(lái)......后來(lái),Clark痛定思痛,決定申請(qǐng)一個(gè)數(shù)字證書。流程是這樣的:首先,登錄當(dāng)?shù)氐臄?shù)字證書認(rèn)證中心網(wǎng)站,填表->出示個(gè)人有效證件原件和復(fù)印件->繳費(fèi)->等待數(shù)字證書認(rèn)證中心制作數(shù)字證書->領(lǐng)取數(shù)字證書。如果您的公司需要申請(qǐng)大量的數(shù)字證書,還可以與認(rèn)證中心的銷售人員商量,先領(lǐng)取免費(fèi)的試用版的數(shù)字證書供技術(shù)人員試用。

      后來(lái)的后來(lái),我又得到了一本電子版的不良漫畫,當(dāng)然,我又想到了Clark。我先在數(shù)字證書認(rèn)證中心下載了Clark的公鑰證書(就是一個(gè)含有公鑰信息的文件),使用非對(duì)稱加密算法對(duì)不良漫畫進(jìn)行加密,再將密文通過QQ傳送給Clark。然后,我興沖沖地?fù)艽駽lark的手機(jī): “喂?Clark么?好久不見,呵呵......我給你發(fā)了個(gè)好東東呦,在QQ上,收到?jīng)]?......已經(jīng)用你的公鑰加密了。用你的私鑰解密就行了^_^”

      Clark興沖沖地插入他的私鑰(忘了說了,私鑰并不是一個(gè)文件,而是一個(gè)USB設(shè)備,外形就跟U盤一樣,至于為什么要這樣,下一篇再說),解密,然后開始看漫畫,完全沒察覺他的老婆大人就在身后......Clark,俺這個(gè)月手頭有點(diǎn)緊......唉,這個(gè)月買了太多的書,到月底揭不開鍋了。正巧在QQ上遇到了Clark:

      1-2-3:“Clark,我需要200兩紋銀,能否借給我?”

      Clark:“沒問題。我這就給你轉(zhuǎn)賬。請(qǐng)給我一張借條?!?/p>

      1-2-3:“太謝謝了,我這就用Word寫一個(gè)借條給你?!?/p>

      然后,我新建一個(gè)Word文檔,寫好借條,存盤。然后,然后怎么辦呢?我不能直接把借條發(fā)送給Clark,原因有:

      1.我無(wú)法保證Clark不會(huì)在收到借條后將“紋銀200兩”改為“紋銀2000兩”。

      2.如果我賴賬,Clark無(wú)法證明這個(gè)借條就是我寫的。

      3.普通的Word文檔不能作為打官司的證據(jù)。

      好在我早就申請(qǐng)了數(shù)字證書。我先用我的私鑰對(duì)借條進(jìn)行加密,然后將加密后的密文用QQ發(fā)送給Clark。Clark收到了借條的密文后,在數(shù)字證書認(rèn)證中心的網(wǎng)站上下載我的公鑰,然后使用我的公鑰將密文解密,發(fā)現(xiàn)確實(shí)寫的是“借紋銀200兩”,Clark就可以把銀子放心的借給我了,我也不會(huì)擔(dān)心Clark會(huì)篡改我的借條,原因是:

      1.由于我發(fā)給Clark的是密文,Clark無(wú)法進(jìn)行修改。Clark倒是可以修改解密后的借條,但是Clark沒有我的私鑰,沒法模仿我對(duì)借條進(jìn)行加密。這就叫防篡改。

      2.由于用我的私鑰進(jìn)行加密的借條,有且只有我的公鑰可以解密。反過來(lái)講,能用我的公鑰解密的借條,一定是使用我的私鑰加密的,而只有我才擁有我的私鑰,這樣Clark就可以證明這個(gè)借條就是我寫的。這就叫防抵賴。

      3.如果我一直賴著不還錢,Clark把我告上了法庭,這個(gè)用我的私鑰加密過的Word文檔就可以當(dāng)作程堂證供。因?yàn)槲覈?guó)已經(jīng)出臺(tái)了《中華人民共和國(guó)電子簽名法》,使數(shù)字簽名具有了法律效力。

      您一定已經(jīng)注意到了,這個(gè)使用我的私鑰進(jìn)行了加密的借條,具有了防篡改、防抵賴的特性,并且可以作為程堂證供,就跟我對(duì)這個(gè)借條進(jìn)行了“簽名”的效果是一樣的。對(duì)了,“使用我的私鑰對(duì)借條進(jìn)行加密”的過程就叫做數(shù)字簽名。(由于數(shù)字簽名算法的速度比較慢,所以在實(shí)際對(duì)文件簽名的過程比上面提到的方法稍稍復(fù)雜一些,這個(gè)在下一篇再講)。

      我是1-2-3,我真的是1-2-3,我是真的1-2-

      3正如您已經(jīng)知道的,Clark的老婆是一名超級(jí)黑客——就是傳說中能用計(jì)算機(jī)作任何事的人。這不,不久前她就輕松入侵了QQ數(shù)據(jù)庫(kù),下載了Clark的所有好友的ID和密碼以及聊天記錄。然后,時(shí)不時(shí)地偽裝成Clark的好友跟Clark聊天,搞得Clark最近總是神經(jīng)兮兮、疑神疑鬼的。這不,昨天我在QQ上遇到了Clark:

      1-2-3:“Clark,最近還好吧?我又搞到一個(gè)好東東呦,要不要?”

      Clark:“48475bbt556”

      Clark并不是瘋掉了,那個(gè)“48475bbt556”也不是我跟Clark之間的什么通關(guān)暗語(yǔ)。這個(gè)“48475bbt556”就是Clark在鍵盤上胡亂敲上去的,不過,我卻知道Clark是什么意思。我立刻把“48475bbt556”粘貼到Word里,然后用我的私鑰對(duì)這個(gè)Word文檔加密,再將這個(gè)Word文檔發(fā)送給Clark。Clark在那邊用我的公鑰將Word文檔解密,打開,發(fā)現(xiàn)里面寫的就是“48475bbt556”,就知道QQ這邊的確就是真正的我本人了。因?yàn)閾碛形业乃借€的人在這個(gè)世界上就只有我一人而已,Clark的老婆大人就是再神通廣大也模仿不了,這就是數(shù)字簽名的驗(yàn)證功能。

      順便提一句,不但人可以申請(qǐng)數(shù)字證書,設(shè)備(例如Web服務(wù)器)也可以申請(qǐng)數(shù)字證書(叫作設(shè)備證書)。利用數(shù)字簽名的驗(yàn)證功能,就可以驗(yàn)證服務(wù)器的身份了,這可是防釣魚的終極解決方案呦。

      第四篇:數(shù)字簽名課程設(shè)計(jì)

      數(shù)字簽名的目的和意義

      RSA公開密鑰加密算法自20世紀(jì)70年代提出以來(lái),已經(jīng)得到了廣泛認(rèn)可和應(yīng)用。發(fā)展至今,電子安全領(lǐng)域的各方面已經(jīng)形成了較為完備的國(guó)際規(guī)范。RSA作為最重要的公開密鑰算法,在各領(lǐng)域的應(yīng)用數(shù)不勝數(shù)。RSA在硬件方面,以技術(shù)成熟的IC應(yīng)用于各種消費(fèi)類電子產(chǎn)品。

      RSA在軟件方面的應(yīng)用,主要集中在Internet上。加密連接、數(shù)字簽名和數(shù)字證書的核心算法廣泛使用RSA。日常應(yīng)用中,有比較著名的工具包Open SSL(SSL,Security Socket Layer,是一個(gè)安全傳輸協(xié)議,在Internet上進(jìn)行數(shù)據(jù)保護(hù)和身份確認(rèn)。Open SSL是一個(gè)開放源代碼的實(shí)現(xiàn)了SSL及相關(guān)加密技術(shù)的軟件包,由加拿大的Eric Yang等發(fā)起編寫的。Open SSL應(yīng)用RSA實(shí)現(xiàn)簽名和密鑰交換,已經(jīng)在各種操作系統(tǒng)得到非常廣泛的應(yīng)用。另外,家喻戶曉的IE瀏覽器,自然也實(shí)現(xiàn)了SSL協(xié)議,集成了使用RSA技術(shù)的加密功能,結(jié)合MD5和SHA1,主要用于數(shù)字證書和數(shù)字簽名,對(duì)于習(xí)慣于使用網(wǎng)上購(gòu)物和網(wǎng)上銀行的用戶來(lái)說,幾乎天天都在使用RSA技術(shù)。

      RSA更出現(xiàn)在要求高度安全穩(wěn)定的企業(yè)級(jí)商務(wù)應(yīng)用中。在當(dāng)今的企業(yè)級(jí)商務(wù)應(yīng)用中,不得不提及使用最廣泛的平臺(tái)j2ee。事實(shí)上,在j2se的標(biāo)準(zhǔn)庫(kù)中,就為安全和加密服務(wù)提供了兩組API:JCA和JCE。JCA(Java Cryptography Architecture)提供基本的加密框架,如證書、數(shù)字簽名、報(bào)文摘要和密鑰對(duì)產(chǎn)生器; JCA由幾個(gè)實(shí)現(xiàn)了基本的加密技術(shù)功能的類和接口組成,其中最主要的是java.security包,此軟件包包含的是一組核心的類和接口,Java中數(shù)字簽名的方法就集中在此軟件包中。JCE(Java Cryptography Extension)在JCA的基礎(chǔ)上作了擴(kuò)展,JCE也是由幾個(gè)軟件包組成,其中最主要的是javax.crypto包,此軟件包提供了JCE加密技術(shù)操作API。javax.crypto中的Cipher類用于具體的加密和解密。在上述軟件包的實(shí)現(xiàn)中,集成了應(yīng)用RSA算法的各種數(shù)據(jù)加密規(guī)范(RSA算法應(yīng)用規(guī)范介紹參見: http://004km.cn/rsalabs/node.asp?id=2146,這些API內(nèi)部支持的算法不僅僅只有RSA,但是RSA是數(shù)字簽名和證書中最常用的),用戶程序可以直接使用java標(biāo)準(zhǔn)庫(kù)中提供的API進(jìn)行數(shù)字簽名和證書的各種操作。

      2.?dāng)?shù)字簽名算法的基本框架 1.密鑰的產(chǎn)生

      ①選擇兩個(gè)保密的大素?cái)?shù)P和q。②計(jì)算N=p q,≯(N)=(p-1)(g-1),其中≯(N)是N的歐拉函數(shù)值。③選擇一個(gè)整數(shù)e,滿足l

      ⑤以(e, n)為公鑰,(d ,N)為密鑰,銷毀p,q,≯(N)。2.加密

      加密時(shí)首先將明文比特串進(jìn)行分組,使得每個(gè)分組對(duì)應(yīng)得串在數(shù)值上小于N,即分組的二進(jìn)制長(zhǎng)度小于l092N。然后,對(duì)每個(gè)明文分組M,作加密運(yùn)算:

      C=E k(M)=M e mod N 3.解密

      對(duì)密文分組的解密運(yùn)算為: M=D k(C)=C d mod N

      由定理1和定理2可以證明解密運(yùn)算能恢復(fù)明文M

      并非所有的公開密鑰系統(tǒng),均可同時(shí)達(dá)到秘密性與數(shù)字簽名功能。一般而言,一公開密鑰系統(tǒng)若作為密碼系統(tǒng),則無(wú)法作為數(shù)字簽名,反之亦然。只有很少數(shù) 的系統(tǒng)可同時(shí)作為密碼系統(tǒng)和數(shù)字簽名,如本文討論的RSA系統(tǒng)。RSA簽名算 法如下:

      設(shè)N=p q,且p和q是兩個(gè)大素?cái)?shù),e和d滿足e d≡l(mod ≯(N))。公開密鑰:N,e 私有密鑰:d

      簽名過程:發(fā)送方使用自己的私鑰d對(duì)明文m進(jìn)行數(shù)字簽名變換: y=x d mod N:并將加密后的消息和簽名y發(fā)送給接收方;

      驗(yàn)證過程:接收方使用發(fā)送方的公鑰e對(duì)收到的消息y進(jìn)行數(shù)字簽名驗(yàn)證變換x’=ye mod N,并使用發(fā)送方的密鑰解密恢復(fù)消息x,比較x’與x,如果x’=x則證實(shí)發(fā)送方的身份合法。

      這樣,用戶A若想用RSA簽名方案對(duì)消息x簽名,他只需公開他的公鑰N和e,由于簽名算法是保密的,因此A是唯一能產(chǎn)生簽名的人,任何要驗(yàn)證用戶A 簽名的用戶只需查到A的公鑰即可驗(yàn)證簽名。對(duì)于實(shí)現(xiàn)簽名和公鑰加密的組合,常用方法是:假定通信雙方為A和B。對(duì)于明文x,A計(jì)算他的簽名y=x d mod N,然后利用B的公開加密函數(shù)EB對(duì)信息對(duì)(x, y)加密得到Z,將密文Z傳送給B,當(dāng)B收到密文Z后,他首先用他的解密函數(shù)DB來(lái)解密得到(x,y)=DB(Z)= DB(EB(x,y)),然后利用A的驗(yàn)證算法來(lái)檢查x’=x=y e mod N是否成立。

      3.主要模塊的算法以及關(guān)鍵代碼

      ①.文件選擇模塊的主要算法及關(guān)鍵代碼 CfileDialog dlg(TRUE,NULL,“.簽名的文件”,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,NULL,NULL);if(dlg.DoModal()==IDOK){

      m_file_sign=dlg.GetPathName();} else m_file_sign=“";UpdateData(FALSE);②.保存公鑰的文件路徑的主要算法及關(guān)鍵代碼 CFileDialog dlg(FALSE,NULL,”.公鑰“,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,NULL,NULL);if(dlg.DoModal()==IDOK){

      m_pkey_sign=dlg.GetPathName();} else m_pkey_sign=”“;UpdateData(FALSE);③.保存簽名后的文件的路徑主要算法及關(guān)鍵代碼

      CFileDialog dlg(FALSE,NULL,”.簽名后的文件“,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,NULL,NULL);if(dlg.DoModal()==IDOK){

      m_signed_sign=dlg.GetPathName();} else m_signed_sign=”“;UpdateData(FALSE);④.?dāng)?shù)字簽名的主要算法及關(guān)鍵代碼 HCRYPTPROV hProv;//秘鑰容器句柄

      BYTE *pbBuffer;//被簽名的數(shù)據(jù)

      HCRYPTHASH hHash;HCRYPTKEY hKey;BYTE *pbKeyBlob;

      //簽名者得公鑰數(shù)據(jù)

      BYTE *pbSignature;

      //數(shù)字簽名

      DWORD dwSigLen;DWORD dwBlobLen;DWORD dwBufferLen;LPTSTR szDescription = ”“;

      CFile m_pubkey_file,m_sign_file,m_signdatafile;if(m_pkey_sign==”“||!m_pubkey_file.Open(m_pkey_sign,CFile::modeCreate|CFile::modeReadWrite)){

      MessageBox(”請(qǐng)選擇正確的保存公鑰的文件路徑“);return;} if(m_file_sign==”“||!m_signdatafile.Open(m_file_sign,CFile::modeReadWrite)){

      MessageBox(”請(qǐng)選擇正確的文件路徑“);return;} if(m_signed_sign==”“||!m_sign_file.Open(m_signed_sign,CFile::modeCreate|CFile::modeReadWrite)){

      MessageBox(”請(qǐng)選擇正確保存數(shù)字簽名的文件路徑“);return;} UpdateData(TRUE);m_state_sign=”“;//獲取缺省的秘鑰容器

      if(CryptAcquireContext(&hProv,NULL,NULL,m_prov_sign,0)){

      m_state_sign+=”已獲取CSP上下文,秘鑰生成算法:“+GetProvType(m_prov_sign)+”n“;} else

      //密鑰容器不存在創(chuàng)建之

      {

      if(CryptAcquireContext(&hProv,NULL,NULL,m_prov_sign,CRYPT_NEWKEYSET))

      m_state_sign+=”已創(chuàng)建一個(gè)新的密鑰容器,秘鑰生成算法:“+GetProvType(m_prov_sign)+”n“;

      else

      { m_state_sign+=MyHandleError(”在獲取CSP時(shí)發(fā)生錯(cuò)誤,程序停止.“);UpdateData(FALSE);return;} } // 從密鑰容器中取數(shù)字簽名用的密鑰

      if(CryptGetUserKey(hProv,AT_SIGNATURE,&hKey))

      m_state_sign+=”簽名密鑰已經(jīng)獲取.n“;else {

      if(GetLastError()== NTE_NO_KEY)//密鑰容器里不存在signature key pair創(chuàng)建之

      {

      if(CryptGenKey(hProv,//CSP句柄

      AT_SIGNATURE, //創(chuàng)建的密鑰對(duì)類型為signature key pair

      0, //key類型,這里用默認(rèn)值

      &hKey))

      //創(chuàng)建成功返回新創(chuàng)建的密鑰對(duì)的句柄

      m_state_sign+=”創(chuàng)建一個(gè)秘鑰對(duì)n“;

      else

      { m_state_sign+=MyHandleError(”在創(chuàng)建簽名密鑰對(duì)時(shí)發(fā)生錯(cuò)誤,程序停止.n“);UpdateData(FALSE);return;}

      }

      else

      {

      m_state_sign+=MyHandleError(”在獲取簽名密鑰時(shí)發(fā)生錯(cuò)誤,程序停止.“);UpdateData(FALSE);return;

      } } // 因?yàn)榻邮障⒄咭?yàn)證數(shù)字簽名,所以要導(dǎo)出公鑰給接收者。

      if(CryptExportKey(hKey,NULL,PUBLICKEYBLOB,0,NULL,&dwBlobLen))//得到公鑰的大小

      m_state_sign+=”已獲取公鑰的大小,“;else { m_state_sign+=MyHandleError(”計(jì)算公鑰大小時(shí)發(fā)生錯(cuò)誤,程序停止.“);UpdateData(FALSE);return;} // 為存儲(chǔ)公鑰的緩沖區(qū)分配內(nèi)存。

      if((pbKeyBlob =(BYTE*)malloc(dwBlobLen)))

      m_state_sign+=”已為公鑰分配內(nèi)存n“;else { m_state_sign+=MyHandleError(”為公鑰分配內(nèi)存時(shí)出現(xiàn)異常,退出.n“);UpdateData(FALSE);return;} // 真正導(dǎo)出公鑰數(shù)據(jù)

      if(CryptExportKey(hKey,NULL,PUBLICKEYBLOB,0,pbKeyBlob,//公鑰

      這個(gè)數(shù)據(jù)可以存入文件,發(fā)送給接收者。一般被存入數(shù)字證書

      &dwBlobLen)){

      m_pubkey_file.Write(pbKeyBlob,dwBlobLen);

      m_state_sign+=”已導(dǎo)出公鑰,存儲(chǔ)在“+m_pubkey_file.GetFilePath()+”n“;} else {

      m_state_sign+=MyHandleError(”導(dǎo)出公鑰時(shí)發(fā)生錯(cuò)誤,退出“);UpdateData(FALSE);return;} // 創(chuàng)建hash對(duì)象

      if(CryptCreateHash(hProv,m_hash_sign,//CALG_MD5,0,0,&hHash)){

      m_state_sign+=”已創(chuàng)建hash對(duì)象,加密算法“+GetHashType(m_hash_sign)+”nn“;} else { m_state_sign+=MyHandleError(”在創(chuàng)建hash對(duì)象時(shí)發(fā)生錯(cuò)誤,退出“);UpdateData(FALSE);return;}

      //把簽名的數(shù)據(jù)讀入內(nèi)存

      //分配空間

      if((pbBuffer=(BYTE *)malloc(m_signdatafile.GetLength())))

      m_state_sign+=”已經(jīng)為數(shù)據(jù)“+m_signdatafile.GetFilePath()+”分配空間nn“;else {

      m_state_sign+=MyHandleError(”為數(shù)據(jù)分配內(nèi)存時(shí)發(fā)生異常,退出“);UpdateData(FALSE);return;} if(m_signdatafile.Read(pbBuffer,m_signdatafile.GetLength()))//把數(shù)據(jù)讀入內(nèi)存

      m_state_sign+=”數(shù)據(jù)已經(jīng)讀入內(nèi)存!“;else {m_state_sign+=MyHandleError(”數(shù)據(jù)讀入內(nèi)存發(fā)生錯(cuò)誤,退出“);UpdateData(FALSE);return;} dwBufferLen = m_signdatafile.GetLength();// 對(duì)數(shù)據(jù)進(jìn)行hash運(yùn)算

      if(CryptHashData(hHash,pbBuffer,dwBufferLen,0))

      m_state_sign+=”已對(duì)數(shù)據(jù)進(jìn)行hash運(yùn)算n“;else { m_state_sign+=MyHandleError(”在對(duì)數(shù)據(jù)進(jìn)行hash運(yùn)算時(shí)發(fā)生錯(cuò)誤,退出.“);UpdateData(FALSE);return;} // 使用signature key pair的私鑰對(duì)hash數(shù)據(jù)簽名

      dwSigLen= 0;if(CryptSignHash(hHash,AT_SIGNATURE,szDescription,0,NULL,&dwSigLen))//得到數(shù)字簽名大小

      m_state_sign+=”已獲取數(shù)字簽名的大小,“;else { m_state_sign+=MyHandleError(”計(jì)算數(shù)字簽名大小時(shí)發(fā)生錯(cuò)誤,退出.“);UpdateData(FALSE);return;} // 為數(shù)字簽名緩沖區(qū)分配內(nèi)存

      if((pbSignature =(BYTE *)malloc(dwSigLen)))

      m_state_sign+=”已為數(shù)字簽名分配緩沖n“;else { m_state_sign+=MyHandleError(”為數(shù)字簽名分配內(nèi)存時(shí)異常,退出.“);UpdateData(FALSE);return;} // 得到數(shù)字簽名

      if(CryptSignHash(hHash,AT_SIGNATURE,szDescription,0,pbSignature, //這里將返回?cái)?shù)字簽名,同被簽名的數(shù)據(jù)一起發(fā)送給接收方

      &dwSigLen))

      {

      m_sign_file.Write(pbSignature,dwSigLen);

      m_state_sign+=”已導(dǎo)出數(shù)字簽名,存儲(chǔ)在“+m_sign_file.GetFilePath()+”nn“;} else {

      m_state_sign+=MyHandleError(”導(dǎo)出數(shù)字簽名時(shí)發(fā)生異常,退出.“);UpdateData(FALSE);return;} // 銷毀hash對(duì)象.if(hHash){

      CryptDestroyHash(hHash);

      m_state_sign+=”銷毀hash對(duì)象nn“;} m_state_sign+=”數(shù)字簽名成功nn“;//關(guān)閉文件

      m_pubkey_file.Close(),m_sign_file.Close(),m_signdatafile.Close(MessageBox(”數(shù)字簽名成功!“,”“,MB_OK);UpdateData(FALSE);⑤.?dāng)?shù)字簽名認(rèn)證的主要算法及關(guān)鍵代碼

      HCRYPTPROV hProv;HCRYPTKEY hPubKey;BYTE *pbKeyBlob;DWORD dwBlobLen;HCRYPTHASH hHash;BYTE *pbSignature;

      //數(shù)字簽名

      DWORD dwSigLen;LPTSTR szDescription = ”“;UpdateData(TRUE);m_state_veri=”“;// 獲得CSP句柄,密鑰容器名為登陸用戶名

      if(CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0)){

      m_state_veri+=”已獲取CSP,秘鑰生成算法:);“+GetProvType(m_prov_veri)+”n“;} else

      //密鑰容器不存在創(chuàng)建之

      {

      if(CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_NEWKEYSET))

      m_state_veri+=”已創(chuàng)建一個(gè)新的密鑰容器秘鑰生成算法:“+GetProvType(m_prov_veri)+”n“;

      else

      { m_state_veri+=MyHandleError2(”在獲取密鑰容器時(shí)發(fā)生錯(cuò)誤,退出n“);UpdateData(FALSE);return;} } CFile signdatafile,yuanwenfile,pubkeyfile;if(m_pkey_veri==”“||!pubkeyfile.Open(m_pkey_veri,CFile::modeReadWrite)){

      MessageBox(”請(qǐng)選擇正確的公鑰文件!“);return;} if(m_file_veri==”“||!yuanwenfile.Open(m_file_veri,CFile::modeReadWrite)){

      MessageBox(”請(qǐng)選擇正確的原文件!“);return;}

      if(m_signed_veri==”“||!signdatafile.Open(m_signed_veri,CFile::modeReadWrite)){

      MessageBox(”請(qǐng)選擇正確的簽名文件!“);return;} dwBlobLen=pubkeyfile.GetLength();pbKeyBlob=(BYTE *)malloc(dwBlobLen);pubkeyfile.Read(pbKeyBlob,dwBlobLen);if(CryptImportKey(hProv,pbKeyBlob,dwBlobLen,0,0,&hPubKey))

      m_state_veri+=”公鑰已經(jīng)成功導(dǎo)入!nn“;else {

      m_state_veri+=MyHandleError2(”公鑰導(dǎo)出出錯(cuò).n“);UpdateData(FALSE);return;} // 創(chuàng)建哈希對(duì)象

      if(CryptCreateHash(hProv,m_hash_veri,//CALG_MD5,0,0,&hHash))

      m_state_veri+=”已經(jīng)獲取hash對(duì)象,hash算法“+GetHashType(m_hash_veri)+”nn“;else {

      m_state_veri+=MyHandleError2(”創(chuàng)建hash對(duì)象時(shí)出錯(cuò),退出“);UpdateData(FALSE);return;} // 跟生成時(shí)一樣對(duì)數(shù)據(jù)進(jìn)行hash運(yùn)算

      BYTE *pbBuffer;pbBuffer=(BYTE *)malloc(yuanwenfile.GetLength());yuanwenfile.Read(pbBuffer,yuanwenfile.GetLength());DWORD dwBufferLen = yuanwenfile.GetLength();pbSignature=(BYTE *)malloc(signdatafile.GetLength());signdatafile.Read(pbSignature,signdatafile.GetLength());dwSigLen = signdatafile.GetLength();if(CryptHashData(hHash,pbBuffer,dwBufferLen,0))

      m_state_veri+=”對(duì)數(shù)據(jù)hash運(yùn)算成功!nn“;else {

      m_state_veri+=MyHandleError2(”對(duì)數(shù)據(jù)進(jìn)行hash運(yùn)算出錯(cuò),退出“);UpdateData(FALSE);return;} // 驗(yàn)證數(shù)字簽名

      if(CryptVerifySignature(hHash,pbSignature, //數(shù)字簽名數(shù)據(jù)

      dwSigLen,hPubKey, //簽名者的公鑰

      szDescription,0))

      {

      MessageBox(”恭喜:是正確的數(shù)字簽名!“);

      m_state_veri+=”恭喜:是正確的數(shù)字簽名!“;} else {

      MessageBox(”錯(cuò)誤:簽名是錯(cuò)誤的n“);

      m_state_veri+=”錯(cuò)誤:簽名是錯(cuò)誤的n請(qǐng)檢查參數(shù)是否設(shè)置正確,若正確則請(qǐng)聯(lián)系發(fā)送方";} UpdateData(FALSE);//------

      // Free memory to be used to store signature.if(pbSignature)free(pbSignature);if(pbKeyBlob)free(pbKeyBlob);// Destroy the hash object.if(hHash)

      CryptDestroyHash(hHash);// Release the provider handle.if(hProv)

      CryptReleaseContext(hProv, 0);signdatafile.Close(),yuanwenfile.Close(),pubkeyfile.Close();4.RSA數(shù)字簽名算法運(yùn)行情況:

      4.1 主界面初始化

      4.2 簽名界面

      4.3 設(shè)置密鑰

      4.4 選擇簽名文件

      4.5 選擇保存公鑰位置

      4.6 選擇選擇簽名后保存位置

      4.6 進(jìn)行數(shù)字簽名結(jié)果

      4.7 進(jìn)行數(shù)字簽名認(rèn)證

      4.8 進(jìn)行數(shù)字簽名認(rèn)證結(jié)果

      5.總結(jié)與展望:

      通過本次對(duì)RSA算法的學(xué)習(xí),明白了該算法加密解密的原理,以及他的安全性問題和缺點(diǎn),通過這幾周的實(shí)驗(yàn),在學(xué)習(xí)中累計(jì)經(jīng)驗(yàn)解決問題,讓我對(duì)RSA算法有了較通透的理解,受益匪淺。隨著Internet的發(fā)展,實(shí)現(xiàn)電子商務(wù)是未來(lái)的潮流和趨勢(shì),基于Internet開放環(huán)境下的信息安全將越來(lái)越受到重視,而RSA算法在身份認(rèn)證,數(shù)字簽名,信息加密等方面得到非常廣泛的應(yīng)用,對(duì)它作深入的了解是很有必要的。雖然RSA算法可靠性較高,但是還是有一些缺陷,就是運(yùn)算量太大,速度太慢,適合加密比較短的明文。RSA方法既可用于保密,也可用于簽名和認(rèn)證,目前已經(jīng)廣泛應(yīng)用與各種產(chǎn)品,平臺(tái)等軟件上。許多流行的操作系統(tǒng)上如微軟,Apple,Sun和Novell都是在其產(chǎn)品上融入RSA。在硬件上,如安全電話,以太網(wǎng)和智能卡都使用了RSA技術(shù)。而且?guī)缀跛蠭nternet安全協(xié)議如S/MIME,SSL和S/WAN都引入了RSA加密方法。ISO9796標(biāo)準(zhǔn)把RSA列為一種兼容的加密算法??梢灶A(yù)見,在不遠(yuǎn)的幾年內(nèi),RSA的 應(yīng)用將來(lái)會(huì)越來(lái)越廣泛。

      第五篇:數(shù)字簽名及哈希函數(shù)

      數(shù)字簽名與哈希函數(shù)

      懂得一點(diǎn)公鑰密碼基礎(chǔ)知識(shí)的人都知道,發(fā)信息的人用自己的私鑰對(duì)所發(fā)信息進(jìn)行加密(Encryption),接收信息者用發(fā)信者的公鑰來(lái)解密(Decryption),就可以保證信息的真實(shí)性、完整性與不可否認(rèn)性。(注:這里提到的加密、解密是指密碼運(yùn)算,其目的并非信息保密。)那么,我們也可以籠統(tǒng)地說,以上方法就已經(jīng)達(dá)到了數(shù)字簽名的目的。因?yàn)槭紫龋借€是發(fā)信者唯一持有的,別的任何人不可能制造出這份密文來(lái),所以可以相信這份密文以及對(duì)應(yīng)的明文不是偽造的(當(dāng)然,發(fā)信者身份的確定還要通過數(shù)字證書來(lái)保證);出于同樣原因,發(fā)信者也不能抵賴、否認(rèn)自己曾經(jīng)發(fā)過這份信息;另外,信息在傳輸當(dāng)中不可能被篡改,因?yàn)槿绻腥嗽噲D篡改,密文就解不出來(lái)。這樣,用私鑰加密,公鑰解密的技術(shù)方法就可以代替?zhèn)鹘y(tǒng)簽名、蓋章,保證了信息的真實(shí)性、完整性與不可否認(rèn)性。

      但是,這樣做在實(shí)際使用中卻存在一個(gè)問題:要發(fā)的信息可能很長(zhǎng),非對(duì)稱密碼又比較復(fù)雜,運(yùn)算量大,而為了保證安全,私鑰通常保存在USB Key或IC卡中,加密運(yùn)算也是在Key或卡中進(jìn)行。一般來(lái)說,小小的USB Key或IC卡中的微處理器都做得比較簡(jiǎn)單而處理能力較弱,這樣,加密所用的時(shí)間就會(huì)很長(zhǎng)而導(dǎo)致無(wú)法實(shí)用。

      另外,即使對(duì)于網(wǎng)站服務(wù)器而言,雖然它的處理能力很強(qiáng),但服務(wù)器要同時(shí)處理許許多多簽名加密的事情,也同樣存在著加密耗時(shí)長(zhǎng)系統(tǒng)效率低的問題。

      有沒有解決這個(gè)問題的辦法呢?有的,常用的方法是使用哈希函數(shù)。

      什么是哈希函數(shù)

      哈希(Hash)函數(shù)在中文中有很多譯名,有些人根據(jù)Hash的英文原意譯為“散列函數(shù)”或“雜湊函數(shù)”,有些人干脆把它音譯為“哈希函數(shù)”,還有些人根據(jù)Hash函數(shù)的功能譯為“壓縮函數(shù)”、“消息摘要函數(shù)”、“指紋函數(shù)”、“單向散列函數(shù)”等等。

      1、Hash算法是把任意長(zhǎng)度的輸入數(shù)據(jù)經(jīng)過算法壓縮,輸出一個(gè)尺寸小了很多的固定長(zhǎng)度的數(shù)據(jù),即哈希值。哈希值也稱為輸入數(shù)據(jù)的數(shù)字指紋(Digital Fingerprint)或消息摘要(Message Digest)等。Hash函數(shù)具備以下的性質(zhì):

      2、給定輸入數(shù)據(jù),很容易計(jì)算出它的哈希值;

      3、反過來(lái),給定哈希值,倒推出輸入數(shù)據(jù)則很難,計(jì)算上不可行。這就是哈希函數(shù)的單向性,在技術(shù)上稱為抗原像攻擊性;

      4、給定哈希值,想要找出能夠產(chǎn)生同樣的哈希值的兩個(gè)不同的輸入數(shù)據(jù),(這種情況稱為碰撞,Collision),這很難,計(jì)算上不可行,在技術(shù)上稱為抗碰撞攻擊性;

      5、哈希值不表達(dá)任何關(guān)于輸入數(shù)據(jù)的信息。

      哈希函數(shù)在實(shí)際中有多種應(yīng)用,在信息安全領(lǐng)域中更受到重視。從哈希函數(shù)的特性,我們不難想象,我們可以在某些場(chǎng)合下,讓哈希值來(lái)“代表”信息本身。例如,檢驗(yàn)哈希值是否發(fā)生改變,借以判斷信息本身是否發(fā)生了改變。`

      怎樣構(gòu)建數(shù)字簽名

      好了,有了Hash函數(shù),我們可以來(lái)構(gòu)建真正實(shí)用的數(shù)字簽名了。

      發(fā)信者在發(fā)信前使用哈希算法求出待發(fā)信息的數(shù)字摘要,然后用私鑰對(duì)這個(gè)數(shù)字摘要,而不是待發(fā)信息本身,進(jìn)行加密而形成一段信息,這段信息稱為數(shù)字簽名。發(fā)信時(shí)將這個(gè)數(shù)字簽名信息附在待發(fā)信息后面,一起發(fā)送過去。收信者收到信息后,一方面用發(fā)信者的公鑰對(duì)數(shù)字簽名解密,得到一個(gè)摘要H;另一方面把收到的信息本身用哈希算法求出另一個(gè)摘要H’,再把H與H’相比較,看看兩者是否相同。根據(jù)哈希函數(shù)的特性,我們可以讓簡(jiǎn)短的摘要來(lái)“代表”信息本身,如果兩個(gè)摘要H與H’完全符合,證明信息是完整的;如果不符合,就說明信息被人篡改了。

      數(shù)字簽名也可以用在非通信,即離線的場(chǎng)合,同樣具有以上功能與特性。

      由于摘要一般只有128位或160位比特,比信息本身要短許多倍,USB Key或IC卡中的微處理器對(duì)摘要進(jìn)行加密就變得很容易,數(shù)字簽名的過程一般在一秒鐘內(nèi)即可完成。

      哈希函數(shù)的安全性

      哈希函數(shù)的安全性直接關(guān)系到數(shù)字簽名的安全性,如果哈希函數(shù)被攻破,數(shù)字簽名的有效性就會(huì)受到質(zhì)疑。

      目前,已經(jīng)發(fā)明的Hash函數(shù)有多種,如Snefru、N-Hash、LOKI、AR、GOST、MD、SHA等。它們?cè)跀?shù)學(xué)上實(shí)現(xiàn)的方法各有不同,安全性也各有不同。目前比較常用的Hash函數(shù)是MD5與SHA-1。MD5哈希函數(shù)以512位來(lái)處理輸入數(shù)據(jù),每一分組又劃分為16個(gè)32位的子分組。算法的輸出由4個(gè)32位分組組成,將它們級(jí)聯(lián)起來(lái),形成一個(gè)128位的固定長(zhǎng)度的哈希值,即輸入數(shù)據(jù)的摘要。SHA-1哈希函數(shù)在MD4的基礎(chǔ)上增加了數(shù)學(xué)運(yùn)算的復(fù)雜程度,即SHA=MD4+擴(kuò)展轉(zhuǎn)換+附加輪+更好的雪崩效應(yīng)(哈希值中,為0的比特與為1的比特,其總數(shù)應(yīng)該大致相等;輸入數(shù)據(jù)中一個(gè)比特的變化,將導(dǎo)致哈希值中一半以上的比特變化,這就叫做雪崩效應(yīng))。SHA能夠產(chǎn)生160位的哈希值。對(duì)SHA還沒有已知的密碼攻擊,并且由于它產(chǎn)生的哈希值位數(shù)長(zhǎng)于MD5,所以它能更有效地抵抗窮舉攻擊(包括生日攻擊)。

      但是,任何一種算法都有其漏洞與局限性。任何一個(gè)哈希函數(shù)都會(huì)存在碰撞——即在一些特定情況下,兩個(gè)不同的文件或信息會(huì)指向同一個(gè)數(shù)字摘要。在一般情況下,類似碰撞只能盡可能地減少,而不能完全避免。從理論上講,沒有攻不破的密碼。隨著密碼科學(xué)的發(fā)展,也許會(huì)找到攻破某一種密碼算法的途徑。

      評(píng)價(jià)Hash算法的一個(gè)最好方法是看敵手找到一對(duì)碰撞消息所花的代價(jià)有多高。一般地,假設(shè)攻擊者知道Hash算法,攻擊者的主要攻擊目標(biāo)是找到一對(duì)或更多對(duì)碰撞消息。目前已有一些攻擊Hash算法與計(jì)算碰撞消息的方法。在這些方法中,有些是一般的方法,可用于攻擊任何類型的Hash算法,比如“生日攻擊”;而另一些是特殊的方法,只能用于攻擊某些特殊的Hash算法,比如適合于攻擊具有分組鏈結(jié)構(gòu)Hash算法的“中間相遇攻擊”,適用于攻擊基于模運(yùn)算的Hash函數(shù)的“修正分組攻擊”。堅(jiān)固的哈希函數(shù)可通過設(shè)計(jì)有效的碰撞處理機(jī)制,或增加數(shù)字摘要的位數(shù)來(lái)增加復(fù)雜度,以減少碰撞出現(xiàn)的概率,2004年8月17日,在美國(guó)召開的國(guó)際密碼學(xué)會(huì)議(Crypto’ 2004)上,一些國(guó)家的密碼學(xué)者作了破譯Hash函數(shù)的新進(jìn)展的報(bào)告,其中我國(guó)山東大學(xué)的王小云教授做了破譯MD5、HAVAL-128、MD4、與RIPE MD算法的報(bào)告。

      到2005年2月,據(jù)王小云教授的研究報(bào)告,他們已經(jīng)研究出了搜索SHA-1碰撞的一系列新技術(shù)。他們的分析表明,SHA-1的碰撞能在小于2^69次Hash操作中找到。對(duì)完整的80輪SHA-1的攻擊,這是第一次在小于2^80次Hash操作這個(gè)理論界限的情況下找到碰撞。根據(jù)他們的估計(jì),對(duì)于縮減到70輪的SHA-1能夠用現(xiàn)在的超級(jí)計(jì)算機(jī)找出“實(shí)碰撞”。他們的研究方法,能自然地運(yùn)用到SHA-0與縮減輪數(shù)的SHA-1的破譯分析上。

      2005年3月6日,Arjen Lenstra,王小云,Benne de Weger 宣布,他們構(gòu)造出一對(duì)基于MD5 Hash函數(shù)的X.509證書,產(chǎn)生了相同的簽名。他們提出了一種構(gòu)造X.509證書的方法,在他們所構(gòu)造出的證書對(duì)中,由于使用了MD5算法,簽名部分產(chǎn)生了碰撞。因此,當(dāng)證書發(fā)布者使用MD5作為Hash函數(shù)時(shí),發(fā)布者就會(huì)在證書中產(chǎn)生相同的簽名,導(dǎo)致PKI的基礎(chǔ)原理遭到可信性破壞。這意味著,從單獨(dú)某個(gè)證書無(wú)法確定是否存在另一個(gè)不同證書有著相同的簽名。由于第二個(gè)相同簽名證書存在的可能性,證書發(fā)布機(jī)構(gòu)無(wú)法驗(yàn)證私鑰的“擁有證明”,即無(wú)法驗(yàn)證證書中的簽名。因此,使用“基于MD5函數(shù)”公鑰證書的任何一方都無(wú)法確保所謂的證書擁有者是否真實(shí)擁有相應(yīng)的私鑰。

      他們也想構(gòu)造一對(duì)基于SHA-1的X.509證書,產(chǎn)生相同的簽名。然而,他們還做不到這一點(diǎn)。因?yàn)楫a(chǎn)生SHA-1碰撞還需要相當(dāng)長(zhǎng)一段時(shí)間的研究。

      專家指出:A.Lenstra與王小云等人聲稱已經(jīng)成功地構(gòu)造了兩張符合X.509證書數(shù)據(jù)結(jié)構(gòu),擁有同樣簽名而內(nèi)容卻不同的證書,但該構(gòu)造方法對(duì)證書的部分域要有特殊安排,簽名算法RSA的密鑰也是按照特殊規(guī)律生成的,要用來(lái)攻擊某個(gè)實(shí)際應(yīng)用的電子簽名系統(tǒng)仍需時(shí)日。而對(duì)于SHA-1算法,說其從理論上被破解都還為時(shí)過早,只能說其破解工作取得了重大突破,破解所需要運(yùn)算次數(shù)已從原來(lái)設(shè)計(jì)時(shí)估算的2^80次降低為2^69次,這比窮舉法快了2048倍,但2^69次運(yùn)算需要6000年左右的時(shí)間,在實(shí)際計(jì)算上仍然是不可行的。

      除了運(yùn)算方面的瓶頸外,哈希函數(shù)的不可逆性決定了攻擊者無(wú)法輕易得手,沒有人可以保證通過這個(gè)發(fā)現(xiàn)的每個(gè)碰撞都是“可用”的碰撞。在漫長(zhǎng)的運(yùn)算后,你得到的也許包含一些有價(jià)值的信息,也許就是理論上存在的單純碰撞,運(yùn)算瓶頸與信息匱乏都會(huì)使黑客們的種種努力成為徒勞……據(jù)業(yè)內(nèi)人士估計(jì),在當(dāng)前的技術(shù)條件下,2^50或2^ 60次運(yùn)算量的范圍內(nèi)的攻擊方法才會(huì)為我們帶來(lái)麻煩,即引發(fā)實(shí)際意義上的攻擊行為。在新研究成果發(fā)布前的一段時(shí)間內(nèi),SHA-1 算法只能被稱作不完美,但還是安全的。基于PKI技術(shù)進(jìn)行電子簽名的最終用戶,目前還不用擔(dān)心自己的簽名被偽造或遭遇簽名人抵賴。

      另外,安全專家強(qiáng)調(diào):一種算法被破譯,與整個(gè)企業(yè)的安全系統(tǒng)被攻破,是兩個(gè)不同的概念。因?yàn)殡S著攻擊技術(shù)與能力的提高,算法也會(huì)“水漲船高”,向前發(fā)展進(jìn)步。王教授所取得的成就提醒密碼學(xué)家研究新的算法,提醒有關(guān)標(biāo)準(zhǔn)化機(jī)構(gòu)要提前修改算法標(biāo)準(zhǔn),也提醒有關(guān)CA與電子簽名產(chǎn)品開發(fā)商支持新的算法。當(dāng)然,有些完全基于摘要算法的密押系統(tǒng)與電子貨幣系統(tǒng),還需要盡早考慮替換方案。

      美國(guó)國(guó)家技術(shù)與標(biāo)準(zhǔn)局(NIST)曾經(jīng)發(fā)表如下評(píng)論:“研究結(jié)果說明SHA-1的安全性暫時(shí)沒有問題,但隨著技術(shù)的發(fā)展,技術(shù)與標(biāo)準(zhǔn)局計(jì)劃在2010年之前逐步淘汰SHA-1,換用其他更長(zhǎng)更安全的算法(如:SHA-224, SHA-256, SHA-384與SHA-512)來(lái)代替?!?/p>

      下載數(shù)字簽名及安全電子郵件word格式文檔
      下載數(shù)字簽名及安全電子郵件.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        關(guān)于電子郵件格式

        商務(wù)電子郵件格式 一、關(guān)于主題 1. 一定不要空白標(biāo)題。 2. 標(biāo)題要簡(jiǎn)短,不要讓outlook用….才能顯示完標(biāo)題。 3. 最好寫上來(lái)自**公司的郵件,以便對(duì)方一目了然,又便于留存。時(shí)間......

        數(shù)字簽名是什么--圖文示意說明

        數(shù)字簽名是什么? 原文網(wǎng)址: http://004km.cn/blog/2011/08/what_is_a_digital_signature.html http://004km.cn/signature.html 以圖片通俗易懂解釋:"數(shù)字......

        數(shù)字簽名方案的實(shí)現(xiàn)

        數(shù)字簽名方案的實(shí)現(xiàn) 歐家權(quán)、應(yīng)用數(shù)學(xué)、2111011451 一:數(shù)字簽名的背景 隨著信息、電子技術(shù)的迅速發(fā)展,全球己步入信息社會(huì)。由于整個(gè)社會(huì)將形成一個(gè)巨大的計(jì)算機(jī)網(wǎng)絡(luò),任何部門......

        電子郵件管理

        廣州XXX電子科技有限公司 電子郵件管理規(guī)定 第一章 總綱 第1條 為了規(guī)范員工對(duì)電子郵件的收發(fā)和使用,特制定本規(guī)定。 第2條 本規(guī)定適用于公司所有對(duì)內(nèi)對(duì)外的公務(wù)電子郵件的收......

        英文電子郵件

        Subject: Some employment information related to my major. Dear Mr. Wang, My name is Li Ming and I would like to express my interest in the position of a Networ......

        英文電子郵件格式及

        英文電子郵件的基本要素是主題、稱謂、正文、結(jié)尾用語(yǔ)及署名。 電子郵件最重要的部分是主題,假設(shè)我們都是很忙的人,在打開郵箱閱讀郵件時(shí),第一眼看到的就是郵件的主題。所以,主......

        電子郵件簡(jiǎn)介

        電子郵件簡(jiǎn)介電子郵件發(fā)展簡(jiǎn)史電子郵件(Electronic Mail,E-Mail),是應(yīng)用于Internet上的最廣泛使用、最受歡迎的網(wǎng)絡(luò)功能。電子郵件來(lái)源于專有電子郵件系統(tǒng)。早在Internet流行以......

        英文電子郵件格式

        英文電子郵件格式 Dear Mary, This is Tom..... Look forward to seeing you soon. Best regards, Tom Yu (以上每一行,或者每個(gè)段落,都是左對(duì)齊的)例子: 一、主題 主題(Subje......