信息與計算科學-對新型離散對數(shù)數(shù)字簽名方案的仿真與實現(xiàn)論文_第1頁
信息與計算科學-對新型離散對數(shù)數(shù)字簽名方案的仿真與實現(xiàn)論文_第2頁
信息與計算科學-對新型離散對數(shù)數(shù)字簽名方案的仿真與實現(xiàn)論文_第3頁
信息與計算科學-對新型離散對數(shù)數(shù)字簽名方案的仿真與實現(xiàn)論文_第4頁
信息與計算科學-對新型離散對數(shù)數(shù)字簽名方案的仿真與實現(xiàn)論文_第5頁
免費預覽已結束,剩余21頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、對新型離散對數(shù)數(shù)字簽名的仿真和實現(xiàn)摘要 數(shù)字簽名技術是現(xiàn)代電子商務中重要的認證工具,不僅可以提供防偽功能,更能代替一切的簽名、蓋章、證書等,形成了巨大的商機。 ElGanmal數(shù)字簽名方案是一種基于離散對數(shù)問題的簽名方案,數(shù)字簽名分為兩個研究方向,即使用Hash函數(shù)和不使用Hash函數(shù)。王小云等提出了MD5和SHA-1算法的雜湊碰撞,使得使用了Hash函數(shù)的簽名方案的安全性降低,所以本文研究的主要方向是不使用Hash函數(shù)的數(shù)字簽名。首先介紹了原始的ElGamal數(shù)字簽名方案,對原始的ElGamal數(shù)字簽名方案進行了安全性分析,可以被偽造簽名攻擊,在其他的相似研究方案中,無Hash函數(shù)離散對數(shù)簽

2、名方案都可被偽造簽名攻擊,其中周克元方案是無法進行偽造簽名攻擊,安全性可以得到保證,本文詳細研究了這一方案的安全性,數(shù)字簽名方案的應用,以及對這一方案進行了編程的實現(xiàn)。關鍵詞 離散對數(shù) ElGamal數(shù)字簽名 Hash函數(shù) 簽名攻擊 Simulation and implementation of a new type of discrete logarithm digital signatureAbstrac The digital signature technology is an important authentication tool in modern e-commerce. I

3、t can not only provide anti-counterfeiting function, but also replace all signatures, seals, certificates and so on, forming huge business opportunities.ElGanmaldigitalsignatureschemeisasignatureschemebasedondiscretelogarithmproblem.Digitalsignatureisdividedintotworesearchdirections,namelyusingHashf

4、unctionandnotusingHashfunction.WposedtheHashcollisionbetweenMD5andsha-1algorithm,whichreducedthesecurityofthesignatureschemeusingHashfunction.Therefore,themainresearchdirectionofthispaperisnottousethedigitalsignatureofHashfunction.FirstintroducestheprimitiveElGamaldigitalsignatures

5、cheme,theoriginalElGamaldigitalsignatureschemeareanalyzedinsecurity,canbeforgedsignatureattack,inothersimilarresearchscheme,discretelogarithmsignatureschemewithoutaHashfunctioncanbeforgedsignatureattack,includingke-yuanzhouschemeistoforgethesignatureattack,safetycanbeguaranteed,thesecurityoftheschem

6、e,thispaperstudiedtheapplicationofdigitalsignaturescheme,andtheschemefortherealizationoftheprogramming.Key words Discretelogarithm ElGamal digitalsignature Hash function signatureattack目錄引言11原始無Hash函數(shù)的ElGamal數(shù)字簽名方案41.1 參數(shù)初始化41.2 簽名過程41.3 驗證過程41.4對方案的偽造簽名攻擊42改進的ElGamal數(shù)字簽名方案(周克元方案)52.1參數(shù)初始化52.2簽名過程52

7、.3驗證過程52.4方案正確性證明52.5安全性分析62.6實例驗證63數(shù)字簽名方案的應用64最新的簽名方案的編程實現(xiàn)74.1構思74.2界面設計74.3簽名并驗證8結論12參考文獻13致謝14附錄1523引言1.數(shù)字簽名的簡介數(shù)字簽名保證了數(shù)字通信中電子文檔的真實性,它也叫電子簽名,是附加在電子文檔文檔中的一組特定的或代碼,它使用數(shù)學上的方法對此電子文檔進行了消息的提取且和擁有私密消息的用戶進行運算而得來的,可以用來識別簽發(fā)者的身份和對該文檔的認同,并且可以被接收者檢查該文檔是否被人從中途獲取或者惡意改變。2.研究背景及意義越來越多的人對數(shù)字簽名有著濃厚的興趣,這也使得數(shù)字簽名的發(fā)展得到了進

8、一步的提高,數(shù)字簽名這項技術的發(fā)展不僅對網(wǎng)絡身份驗證方面和數(shù)據(jù)全面的保護外,還是電子商政服務方面的重要工具,是密碼學研究的熱點之一。3.計算機安全及信息保密自從第一臺計算機發(fā)展到今天已經(jīng)有幾十年的歷史了,計算機在各個行業(yè)被廣泛應用,讓我們的生活變得更加美好并且取得了更大的經(jīng)濟效益,但是,隨著計算機的發(fā)展,計算機在安全方面的問題也逐漸成為一個難題。所以在人們繼續(xù)享受信息時代的便利的時候,如何將需要保密的信息安全的傳輸給對方且不被偷聽和篡改就是信息保密的核心內(nèi)容了。4.信息的加密與解密設通信的雙方A和B,那么他們之間要解決兩個問題:(1) A如何確信她的消息不會被第三方偷?。?) B如何確信他收到

9、的消息是A所發(fā)而不是別人冒充A發(fā)給他的采用下面這個模型,如圖1信道加密 圖 1“明文”指的是沒有加密的文字(或者字符串)一般人都能看懂的意思,為了將明文隱蔽起來,用某種不好領略的方法轉變成“密文”,加密的過程也就完成了。同理可得,反過來的轉變過程就是解密的過程。在方法過程中,X經(jīng)過加密過程將“明文”變換成“密文”后,并且發(fā)給Y,Y是擁有合理接收消息的人且Y享有解密的方法。由此可以解密從而獲取X所要傳達的信息。在這個過程中,如果第三方不知道密文變換便無法從密文得到明文,因此第一個問題被解決。對Y來說,他只相信X知道如何將明文按約定的方式加密,其他人插入的假消息會讓消息變得毫無意義,因此,凡按照X

10、,Y約定方式解密的有明確意義的明文,就是由X發(fā)來沒有經(jīng)過第三方篡改,第二個問題就解決了。5.Hash函數(shù)(1) Hash函數(shù)的概念Hash函數(shù)也可以稱作做散列函數(shù)、哈希函數(shù)、雜湊函數(shù)等,它是可以把任意長度的輸入轉換成一個固定長度的字符串-散列值(哈希值)。散列值生成過程可表示為其中,是一個變長消息,是Hash函數(shù),是固定長度的哈希值。散列函數(shù)有消息的認證和數(shù)字簽名兩個方面,所以它具備了以下的幾點性質。1 可應用于“任意”長度的消息。2 產(chǎn)生定長的輸出。3 對“任意”給定的消息,計算容易一些,硬件和軟件都可以對其進行實現(xiàn)。4 單向性:又稱為抗原像性,對任意給定的散列值,找到滿足的消息在計算上是行

11、不通的。5 抗弱碰撞性:又稱為抗原像性,對任何給定的消息,找到滿足且的消息在計算上是不可行的。6 抗強碰撞性:找到任何滿足的偶對在計算上是不可行的。(2)密碼Hash函數(shù)的代表MD5,bcrypt,Whirlpool,SHA-1,SHA-2,SHA-3和BLAKE2。(3)密碼Hash函數(shù)的安全屬1 無沖突(Collsion-free):意思就是兩個不同的數(shù)據(jù)它不會生成重復的Hash值就算這兩個數(shù)據(jù)它只有一個標點符號是不一樣的這兩份數(shù)據(jù)分別生成的Hash值也是大不相同。從理論來講,沖突是存在的,也沒有任何一個密碼Hash函數(shù)是被百分百證明沒有沖突的,但是找到?jīng)_突的概率非常非常的小,所以我們可以

12、選擇相信它是沒有沖突的,每一份數(shù)據(jù)生成的Hash值都是獨一無二的。2 隱藏(hiding):密碼Hash函數(shù)是單向函數(shù),是不可逆的。Hash值是不能轉換成原來的數(shù)據(jù)。但是要達到隱藏原數(shù)據(jù)的目的,原數(shù)據(jù)需選自范圍特別廣的集。3 puzzle-friendly:一個字節(jié)的改變就能導致生成完全不同點Hash值,且Hash值的生成沒有任何規(guī)律可循。在知道和在的條件下,是不可能找到的。(4)密碼Hash函數(shù)的應用1 信息摘要(message digest):通過記住Hash值來識別之前見過的數(shù)據(jù),簡單來說我們可以把Hash值作為識別數(shù)據(jù)的id。如果兩份數(shù)據(jù)的Hash值是一樣的,那么可以確定這兩份數(shù)據(jù)是一

13、模一樣的。因為Hash值很小,所以很方便。2 commitment:電子版的把信息放在信封里封起來,然后在某個特定時間打開。只公布Hash值,再后期公布Hash前的原數(shù)據(jù)。后期任何人都可以通過對比Hash值來驗證是否是“信封”里的內(nèi)容。3 Search puzzle:本質是窮舉,就是說我們可以拿來構建一類數(shù)學問題,從一大堆可能是解決方案的選項里一個一個去試,直到成功。因為Hash值的生成是沒有規(guī)律的,所以可以保證在整個窮舉的過程中,只能一個一個去試,沒有捷徑直到成功。6.使用無Hash函數(shù)的ElGamal數(shù)字簽名的原因ElGamal數(shù)字簽名方案分為了兩個研究的點,其中一個為沒有使用函數(shù)的,另一

14、個則是使用了函數(shù)的。函數(shù)的算法有和系列,王小云提出的這兩種算法的雜湊碰撞,使得這類的算法安全性不再有保障。碰撞的定義:簡單來講將不同的輸入映射成唯一的、固定長度的值(哈希值)。倘若輸入了兩個不同的而得到了相同的值,“”碰撞也就發(fā)生了。1原始無Hash函數(shù)的ElGamal數(shù)字簽名方案1.1 參數(shù)初始化取大的素數(shù),取階生成元,隨機取一個數(shù),且滿足,計算。公鑰 為,私鑰為,待簽名消息明文為。1.2 簽名過程隨機取一個數(shù)且,計算;計算,則為的簽名。1.3 驗證過程通過檢驗,正確則接受簽名,錯誤則不接受簽名。原始的數(shù)字簽名方案特點主要是隨機性。不同時刻選的k不同,這樣的話即使是對同樣的消息進行待簽名消息

15、,得到的簽名也不一樣,這種隨機性的特點保證了簽名方案的安全性。1.4對方案的偽造簽名攻擊任取整數(shù),設,則是的有效簽名。其中可以由歐幾里德擴展算法從中計算得出。證明:驗證方程右邊 左邊驗證方程成立,所以是的有效簽名。在其他的相似的研究生中,白荷芳方案7驗證方程為,蘆殿軍方案8中驗證方程為,(等價于),李曉峰方案9的驗證方程為,顯然均可被參考文獻10中偽造簽名攻擊方法攻擊,具體過程省略。2改進的ElGamal數(shù)字簽名方案(周克元方案)2.1參數(shù)初始化取大的素數(shù),取階生成元,隨機取一個數(shù),且滿足,計算。公鑰 為,私鑰為,待簽名消息明文為。2.2簽名過程(1) 隨機選擇兩個不同的整數(shù),并計算,隨機整數(shù)

16、為臨時密鑰,不能泄露,否則真的密鑰將會被暴露。對不同的消息簽名,可以選擇相同的或者,但是不能同時選擇相同的和對不同消息簽名。(2) 通過計算出,則為簽名元組。2.3驗證過程通過計算是否成立,成立則簽名有效,否則簽名無效。2.4方案正確性證明2.5安全性分析用1.4中的偽造簽名攻擊方法時,對抗從公鑰中揭露私鑰的攻擊,倘若攻擊者想要從中求出x是一個非常艱難的事情,因此用1.4中的偽造簽名攻擊方法是不可行的,且攻擊過程復雜且有難度,無法攻擊。在改進的方案中,對于相同消息的,如果選用了不同的隨機數(shù),可以得到完全不同的簽名。但是,它們也可以用上面所說的方法進行驗證,與原始的簽名方案相同,改進后的周克元方

17、案也是取隨機的數(shù)字,并且隨機生成數(shù)字簽名,但現(xiàn)方案在指定消息的簽名空間方面得到了增加,而且簽名的復雜難度和攻擊難度也被提高了。2.6實例驗證取一個素數(shù),的生成元,私鑰,根據(jù)公式得到公鑰,公鑰為,待簽名的明文為。取隨機數(shù),根據(jù), ,因為,求得,簽名值。驗證方程:方程左邊 方程右邊方程兩邊相等,所以這個簽名是有效的。3數(shù)字簽名方案的應用數(shù)字簽名在手寫方面應用的一般比較常見,但是信息化的時代,人們在支付方面越來越現(xiàn)代化,如在網(wǎng)絡上購買商品,在某些應用中存儲相關的數(shù)據(jù),比如因為消費者可以從各種方式來下載軟件,軟件公司就需要用數(shù)字簽名來證明這個文檔是否授權給用戶下載,哪種途徑可以獲取軟件,如何從正確的途

18、徑獲得軟件,此外還有就是數(shù)字存儲的效率。隨著現(xiàn)在技術的日益發(fā)展,簽名越來越容易被攻擊和偽造,于是人們開始想象是否可以用數(shù)字簽名取代數(shù)字簽名或者對其進行一個優(yōu)化。都現(xiàn)如今,ElGamal簽名的方案已經(jīng)有各種各樣的方案了,那么它所應用的范圍更是可想而知有多么的廣泛。在計算機網(wǎng)絡通信領域,如何更準確地解決身份認證問題是計算機數(shù)據(jù)安全方面要解決的首要問題。到目前為止,大多數(shù)的計算機系統(tǒng)對用戶的識別還是以口令的方式進行,隨著ElGamal方案簽名的提出及在認證加密中的應用,計算機數(shù)據(jù)安全方面的問題變得更加的安全且有效。4最新的簽名方案的編程實現(xiàn)4.1構思通過查閱資料,利用JAVA.MATH里的BIGIN

19、TEGER類可以實現(xiàn)任意精度的整數(shù)運算,這里根據(jù)現(xiàn)在時間生成了一個BITLENGTH是2048的大素數(shù)p,因為小于的數(shù)都是的生成元,這里選用一個BITLENGTH是利用1024的大素數(shù),生成一個BITLENGTH是512的大素數(shù),作為私鑰,利用私鑰與大素數(shù)生成公鑰,生成,利用密鑰生成的逆元,若私鑰與的最大公約數(shù)不是1,則程序返回,創(chuàng)建隨機的臨時密鑰和隨機的臨時密鑰,用,得出,用,得出,得到,計算的值,計算的值,計算的值,計算方程兩邊是否相等,這樣最新的簽名方案就實現(xiàn)了。 4.2界面設計演示界面的設計(圖2)圖 24.3簽名并驗證隨機輸入一個數(shù)字簽名,然后進行加密得到結果(如圖3) 圖 3輸入需

20、要簽名的消息:abcd1234隨機輸入臨時密鑰k:12369874隨即輸入臨時密鑰t:14789632隨機生成公鑰p:2187923376697311978031365289425054201896426425155825249989068855829783524906347727174126675148312513983959299787397568428306903709494767253570182284487772199101103445999365785391398218870561970325724642908026459674531786851102899238342577978

21、311277657581564340325760054166581251524595174114711619378593955186632755835207057798649092591848499237951614699839221999841493699246563213726694748961101957942329752906509540227627367090348466569668298518340273112431291133226660626077464367558435942631306961277509082405186255773612624632551019599345

22、6406345073129048520845654251810337013826499229955588766443402571735708003373 隨機生成公鑰q:92897851201179820436851864523092660429704688274217827423371092042353571935588932080070182423822515432376148090248381249809003830464080752982416934633326674645401159186934480685708187105774968447707082328439552048753

23、575457479283356235140247290876214370143615058859404269686342330521127623768540184215231022059 計算公鑰g:17507773385267531817777442199560354381136084631424476022102667478700420925633468550050253130399315386309525835458568870333983014162734085615393760226083119405888122346187775634455266714592214465495187

24、130016434649547719844534465136265563618626543252859572862286287634180990917513975121935797212896587925910392465590446086756971307526134569754368738403901714907574988169806713804199974021740468977150260579450326142024793673571798989420690863268938732753501119493277052835335429245917112491283227513862

25、704181104723018848544446870402131840394524566897910436040487995054447799151958943179493036385094853097221311328686247計算簽名值:405312198186316470956463473592298890498862977926011155537839664035390879839608089163014863982436531447714948896289596847507428272632904198774375022734373697746249764995246555893

26、236753086168777824766620905026102543875930634116343556369362946753888300747755433760028921703210647739576044588290394894321613328663164281462722676063080914282713326908293917403618350074979351422733383668382990279450253609916246570960920034074027645759180851707296076716111206218248636334775828600636

27、5747038042441994884925211215354340622343893848425549474098167011954153969067931966429815607267808036009602785757423173248301629523360719787 計算簽名值:8916879452457003696950080769901227312246642788631886683551088512672993352898210207177747512353630524375293142819848448755249777878364909600544294111640736

28、794487558061096046680139185617179943833890129602437649005230173247332002239414859608261177615879091011883436892198112378391577797084969871246331338516942088996295647208322089604738009508136607712176529106312415251400621396413695715619842697141904681757443152476882875130292926216370007043936362004840

29、435565117600531566869574911696189522384091447918667552342503027869203538856488006208854912279078030263097702303907244428648224322547104752110897864385089561113055 計算簽名值:88841958629500515489641053638997362766066781408906260973254322316093023819864127574312845365694635674975307408680272359958402627211

30、837922837982361578444448570642470927119245148432249588449111464780502090648437545445865420632696781638180167190670294124629693717068334003450690226184337577638970904981311471326443148518703726159605291575513214505236714535900296867864593245947569757696061935798720267131560473917110184809900364226510

31、08919450652547293449082772248750295949221463881541365960771836576052019354500031574282837825141417748648246718043002091728622887019128139334278148448223471326842234726922985499996753442 方程左邊:計算的值:80788722731932672580758818000018726465125061832027792312875720484082322869944481507672794133621267723207

32、958268037749040428030189529782543882122577891653441147747485469399250844844364495708828562247383221923605757149567095941914444988714900569915059996683297663215364186271057907743433082699417246632353784146615761691636203178380271075152152279208807946931588056752861311588586632548235134221949666968988

33、85240763003351294446319944345078252388584173703010523755458941205243748982986100065038318367706871317089744072940463080562328947291891810338647149205666118079590493805250298257150174115582197179757585811134377392 方程右邊:計算的值:80788722731932672580758818000018726465125061832027792312875720484082322869944

34、481507672794133621267723207958268037749040428030189529782543882122577891653441147747485469399250844844364495708828562247383221923605757149567095941914444988714900569915059996683297663215364186271057907743433082699417246632353784146615761691636203178380271075152152279208807946931588056752861311588586

35、63254823513422194966696898885240763003351294446319944345078252388584173703010523755458941205243748982986100065038318367706871317089744072940463080562328947291891810338647149205666118079590493805250298257150174115582197179757585811134377392結 論本文首先分析了原始的無函數(shù)的數(shù)字簽名方案,并且對該方案進行了研究,安全方面的分析可以得到此方案可以被欸偽造簽名攻擊,

36、安全性不高,且在相同的相似方案中也出現(xiàn)同樣的問題,而改進后的方案(周克元方案)則是避免了這一問題,文中介紹了改進后的方案并對其進行安全性分析,并舉了一個實例介紹了改進后的方案,然后簡單介紹了數(shù)字簽名的應用,最后本文的主要內(nèi)容是對最新的簽名方案的仿真實現(xiàn),使用了Java語言進行了代碼的編寫,并對最新的簽名驗證。參考文獻1 谷利澤 鄭世慧 楊義先.現(xiàn)在密碼學教程M.北京:北京郵電大學出版社,第三版2 曲娜,杜洪軍,顏達等. ElGamal數(shù)字簽名算法的一種變形J. 吉林大學(信息科學版),2009,27(6):590-594.3 張會影,張軍. 一種改進的ElGamal數(shù)字簽名方案的研究與設計J.

37、 計算機工程與科學,2009,31(12):35-37.4 周克元. 對兩個離散對數(shù)數(shù)字簽名算法的攻擊與改進J. 科學技術與工程,2013,13(32):269-273.5 李麗娟,郭亞杰. 一種改進的ElGamal數(shù)字簽名方案J. 計算機工程與科學,2016,38(6):1097-1102.6 金晨輝,胡斌,張少武等 密碼學M 北京高等教育出版社 2009年7 王相生,序列密碼設計與實現(xiàn)的研究 J 中國科學院上海冶金研究所 2001年8 李繼中 密碼算法識別與分析關鍵技術研究 J 解放軍信息工程大學 2014年9 RUEPPEL R A Stream Ciphers MNew York IE

38、EE Press.1992年10 謝少華 基于擬群的序列密碼算法研究與軟件開發(fā) D寧波大學 2017年11 邵祖華. 基于因數(shù)分解和離散對數(shù)的數(shù)字簽名協(xié)議J.通信保密,1998第4期:36-41.12 周克元. 一個新的基于離散對數(shù)和因子分解的數(shù)字簽名J. 科學技術與工程,2013,13(26):7862-7864.13 陳魯生,沈世鎰 現(xiàn)代密碼學M 北京科學出版社,20014 周克元. 一個新的基于離散對數(shù)和因子分解的數(shù)字簽名J. 科學技術與工程,2013,13(26):7862-7864.15 ElGamal T. A public key cryptosystem and a signa

39、ture scheme based on discrete logarithmsJ. IEEE Trans on info Thery,1985,31(4):469472.致 謝畢業(yè)即將來臨,在論文完成之際,感謝在本論文的寫作過程中,給予我?guī)兔Φ膶熀蛯W長學姐以及父母。感謝我的導師周克元老師,無論是在教學和相處的過程中都給人一種和藹可親的感覺,讓我覺得在面對困難的時候不會覺得感到焦躁,是我的良師益友。在工作任務的繁重任務下還給予我無微不至的關心,主動關心我的論文選題、資料的查找、框架結構和論文完善,給予我悉心的指導,是我順利完成畢業(yè)論文。感謝我的各位同學,因為你們,我的大學生活才能如此精彩,也

40、是你們的陪伴讓我得學習不再枯燥,感謝你們在學習中給予我的幫助,讓我更進一步,幫助我獨立解決問題,遇到問題陪伴我努力面對。很慶幸大學的時光能與你們一起度過。最后,我想感謝我的學校,感謝你的良好環(huán)境,讓我感受大學生活的美好,感謝學校讓我進一步交到了更多的朋友和老師,感謝學校給我們提供一次又一次的機會去參加各項活動提高自身能力,感謝你的無私奉獻造就了一批又一批的優(yōu)秀學生,衷心祝愿母校越來越好。時光荏苒,大學四年的生活轉眼即逝,心中也不禁感慨萬千。對大學生活的依依不舍,對大學四年光陰的遺憾和惋惜,都將成為我即將畢業(yè)的美好回憶。附錄package withoutHash;import java.awt.

41、event.MouseEvent;import java.awt.event.MouseListener;import java.math.BigInteger;/大數(shù)import java.util.Random;/隨機import java.util.Date;/時間import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;public class Test extend

42、s JFrame JLabel jl1,jl2,jl3,jl5,jl7,jl8,jl9,jl10,jl11,jl16,jl17;JButton jb1,jb2;JTextField jtf1,jtf2,jtf3,jtf5,jtf7,jtf8,jtf9,jtf10,jtf11,jtf16,jtf17;/測試窗口public Test()jl1=new JLabel(請輸入需要簽名的消息:);jl1.setBounds(30,30,150,32);jtf1=new JTextField(100);jtf1.setBounds(170, 30, 600, 32);jl2=new JLabel(公鑰p

43、:);jl2.setBounds(60,150,100,32);jtf2=new JTextField(100);jtf2.setBounds(170, 150, 600, 32);jl3=new JLabel(公鑰q:);jl3.setBounds(60,190,100,32);jtf3=new JTextField(100);jtf3.setBounds(170, 190, 600, 32);jl5=new JLabel(公鑰g);jl5.setBounds(60,230,100,32);jtf5=new JTextField(100);jtf5.setBounds(170, 230, 6

44、00, 32);jl7=new JLabel(私鑰k:);jl7.setBounds(60,70,100,32);jtf7=new JTextField(100);jtf7.setBounds(170, 70, 600, 32);jl8=new JLabel(私鑰t:);jl8.setBounds(60,110,100,32);jtf8=new JTextField(100);jtf8.setBounds(170, 110, 600, 32);jl9=new JLabel(r:);jl9.setBounds(60,270,100,32);jtf9=new JTextField(100);jtf

45、9.setBounds(170, 270, 600, 32);jl10=new JLabel(n:);jl10.setBounds(60, 310, 600, 32);jtf10=new JTextField(100);jtf10.setBounds(170, 310, 600, 32);jl11=new JLabel(j:);jl11.setBounds(60, 350, 600, 32);jtf11=new JTextField(100);jtf11.setBounds(170, 350, 600, 32);/*jl12=new JLabel(g_j:);jl12.setBounds(60

46、, 470, 600, 32);jtf12=new JTextField(100);jtf12.setBounds(170, 470, 600, 32);jl13=new JLabel(r_n:);jl13.setBounds(60, 510, 600, 32);jtf13=new JTextField(100);jtf13.setBounds(170, 510, 600, 32);jl14=new JLabel(n_r:);jl14.setBounds(60, 550, 600, 32);jtf14=new JTextField(100);jtf14.setBounds(170, 550,

47、600, 32);jl15=new JLabel(m_nr:);jl15.setBounds(60, 590, 600, 32);jtf15=new JTextField(100);jtf15.setBounds(170, 590, 600, 32);*/jl16=new JLabel(驗證左邊:);jl16.setBounds(60, 390, 600, 32);jtf16=new JTextField(100);jtf16.setBounds(170, 390, 600, 32);jl17=new JLabel(驗證右邊:);jl17.setBounds(60, 430, 600, 32)

48、;jtf17=new JTextField(100);jtf17.setBounds(170, 430, 600, 32);jb1=new JButton(簽名);jb1.setBounds(840, 100, 80, 70);jb1.addMouseListener(new MouseListener() Overridepublic void mouseReleased(MouseEvent arg0) / TODO Auto-generated method stubOverridepublic void mousePressed(MouseEvent arg0) / TODO Auto

49、-generated method stubOverridepublic void mouseExited(MouseEvent arg0) / TODO Auto-generated method stubOverridepublic void mouseEntered(MouseEvent arg0) / TODO Auto-generated method stubOverridepublic void mouseClicked(MouseEvent arg0) / TODO Auto-generated method stubBigInteger p=BigIbablePrime(20

50、48,new Random(new Date().getTime();/利用JAVA.MATH里的BIGINTEGER類可以實現(xiàn)任意精度的整數(shù)運算,這里根據(jù)現(xiàn)在時間生成了一個BITLENGTH是2048的大素數(shù)pjtf2.setText(String.valueOf(p);BigInteger q=BigIbablePrime(1024,new Random(new Date().getTime();/因為小于p-1的數(shù)都是p的生成元,這里選用一個BITLENGTH是1024的大素數(shù)qjtf3.setText(String.valueOf(q);BigInteger s=BigIbablePr

51、ime(512, new Random(new Date().getTime();/生成一個BITLENGTH是512的大素數(shù)s,作為私鑰BigInteger one=new BigInteger(1);BigInteger g=q.modPow(s, p);/利用私鑰s與大素數(shù)p生成公鑰gjtf5.setText(String.valueOf(g);BigInteger p_1=p.subtract(one);/生成p-1BigInteger s_n=s.modInverse(p_1);/利用密鑰s模p-1生成的逆元s_nif (!(s.gcd(p.subtract(one).equals(

52、one)JOptionPane.showMessageDialog(null, 最大公約數(shù)不為1, , JOptionPane.ERROR_MESSAGE);BigInteger m=new BigInteger(jtf1.getText();/若私鑰s與p-1的最大公約數(shù)不是1,則程序返回/這里gcd是求最大公約數(shù),p.subtract(one)是p-1的意思,equals(one)是看s與p-1的最大公約數(shù)是不是1BigInteger k= new BigInteger(jtf7.getText();/輸入隨機的臨時密鑰kBigInteger t= new BigInteger(jtf8.getText();/輸入隨機的臨時密鑰t/*jtf7.setText(String.valueOf(k);jtf8.setText(String.valueOf(t);BigInteger k=new BigInteger(jtf7.getText();BigInteger t=new BigInteger(jtf8.getText();*/BigInteger r=m.multiply(q.modPow(k, p).mod(p);jtf9.setText(String.valueOf(r);/用q的k次方模p的值,乘

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論