




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、畢業(yè)設計說明書Core JavaJava核心技術軟件學院學生姓名: 學號: 軟件工程學 院: 專 業(yè): 指導教師: 2014 年 6 月Core Java When Java technology first appeared on the scene, the excitement was not about a well-crafted programming language but about the possibility of safely executing applets that are delivered over the Internet (see Volume I, C
2、hapter 10 for more information about applets). Obviously, delivering executable applets is practical only when the recipients are sure that the code cant wreak havoc on their machines. For this reason, security was and is a major concern of both the designers and the users of Java technology. This m
3、eans that unlike other languages and systems, where security was implemented as an afterthought or a reaction to break-ins, security mechanisms are an integral part of Java technology.Three mechanisms help ensure safety:Language design features (bounds checking on arrays, no unchecked type conversio
4、ns, no pointer arithmetic, and so on).An access control mechanism that controls what the code can do (such as file access, network access, and so on).Code signing, whereby code authors can use standard cryptographic algorithms to authenticate Java code. Then, the users of the code can determine exac
5、tly who created the code and whether the code has been altered after it was signed. Below, youll see the cryptographic algorithms supplied in the java.security package, which allow for code signing and user authentication.As we said earlier, applets were what started the craze over the Java platform
6、. In practice, people discovered that although they could write animated applets like the famous nervous text applet, applets could not do a whole lot of useful stuff in the JDK 1.0 security model. For example, because applets under JDK 1.0 were so closely supervised, they couldnt do much good on a
7、corporate intranet, even though relatively little risk attaches to executing an applet from your companys secure intranet. It quickly became clear to Sun that for applets to become truly useful, it was important for users to be able to assign different levels of security, depending on where the appl
8、et originated. If an applet comes from a trusted supplier and it has not been tampered with, the user of that applet can then decide whether to give the applet more privileges.To give more trust to an applet, we need to know two things:Where did the applet come from?Was the code corrupted in transit
9、?In the past 50 years, mathematicians and computer scientists have developed sophisticated algorithms for ensuring the integrity of data and for electronic signatures. The java.security package contains implementations of many of these algorithms. Fortunately, you dont need to understand the underly
10、ing mathematics to use the algorithms in the java.security package. In the next sections, we show you how message digests can detect changes in data files and how digital signatures can prove the identity of the signer.A message digest is a digital fingerprint of a block of data. For example, the so
11、-called SHA1 (secure hash algorithm #1) condenses any data block, no matter how long, into a sequence of 160 bits (20 bytes). As with real fingerprints, one hopes that no two messages have the same SHA1 fingerprint. Of course, that cannot be truethere are only 2160 SHA1 fingerprints, so there must b
12、e some messages with the same fingerprint. But 2160 is so large that the probability of duplication occurring is negligible. How negligible? According to James Walsh in True Odds: How Risks Affect Your Everyday Life (Merritt Publishing 1996), the chance that you will die from being struck by lightni
13、ng is about one in 30,000. Now, think of nine other people, for example, your nine least favorite managers or professors. The chance that you and all of them will die from lightning strikes is higher than that of a forged message having the same SHA1 fingerprint as the original. (Of course, more tha
14、n ten people, none of whom you are likely to know, will die from lightning strikes. However, we are talking about the far slimmer chance that your particular choice of people will be wiped out.)A message digest has two essential properties:If one bit or several bits of the data are changed, then the
15、 message digest also changes.A forger who is in possession of a given message cannot construct a fake message that has the same message digest as the original.The second property is again a matter of probabilities, of course. Consider the following message by the billionaire father:Upon my death, my
16、 property shall be divided equally among my children; however, my son George shall receive nothing.That message has an SHA1 fingerprint of2D 8B 35 F3 BF 49 CD B1 94 04 E0 66 21 2B 5E 57 70 49 E1 7EThe distrustful father has deposited the message with one attorney and the fingerprint with another. No
17、w, suppose George can bribe the lawyer holding the message. He wants to change the message so that Bill gets nothing. Of course, that changes the fingerprint to a completely different bit pattern:2A 33 0B 4B B3 FE CC 1C 9D 5C 01 A7 09 51 0B 49 AC 8F 98 92Can George find some other wording that match
18、es the fingerprint? If he had been the proud owner of a billion computers from the time the Earth was formed, each computing a million messages a second, he would not yet have found a message he could substitute.A number of algorithms have been designed to compute these message digests. The two best
19、-known are SHA1, the secure hash algorithm developed by the National Institute of Standards and Technology, and MD5, an algorithm invented by Ronald Rivest of MIT. Both algorithms scramble the bits of a message in ingenious ways. For details about these algorithms, see, for example, Cryptography and
20、 Network Security, 4th ed., by William Stallings (Prentice Hall 2005). Note that recently, subtle regularities have been discovered in both algorithms. At this point, most cryptographers recommend avoiding MD5 and using SHA1 until a stronger alternative becomes available.(See HYPERLINK /rsal/rsal ab
21、s/node.asp?id=2834 for more information.)The Java programming language implements both SHA1 and MD5. The Message-digest class is a factory for creating objects that encapsulate the fingerprinting algorithms. It has a static method, called get instance, that returns an object of a class that extends
22、the MessageDigest class. This means the MessageDigest class serves double duty:As a factory classAs the superclass for all message digest algorithmsFor example, here is how you obtain an object that can compute SHA fingerprints:MessageDigest alg = MessageDigest.get instance(SHA-1);(To get an object
23、that can compute MD5, use the string MD5 as the argument to get instance.)After you have obtained a MessageDigest object, you feed it all the bytes in the message by repeatedly calling the update method. For example, the following code passes all bytes in a file to the alg object just created to do
24、the fingerprinting:Input-stream in = . . .int ch;while (ch = in.read() != -1)alg.update(byte) ch);Alternatively, if you have the bytes in an array, you can update the entire array at once:byte bytes = . . .;alg.update(bytes);When you are done, call the digest method. This method pads the inputas req
25、uired by the fingerprinting algorithmdoes the computation, and returns the digest as an array of bytes.byte hash = alg.digest();The program in Listing 9-15 computes a message digest, using either SHA or MD5. You can load the data to be digested from a file, or you can type a message in the text area
26、. Message SigningIn the last section, you saw how to compute a message digest, a fingerprint for the original message. If the message is altered, then the fingerprint of the altered message will not match the fingerprint of the original. If the message and its fingerprint are delivered separately, t
27、hen the recipient can check whether the message has been tampered with. However, if both the message and the fingerprint were intercepted, it is an easy matter to modify the message and then recompute the fingerprint. After all, the message digest algorithms are publicly known, and they dont require
28、 secret keys. In that case, the recipient of the forged message and the recomputed fingerprint would never know that the message has been altered. Digital signatures solve this problem.To help you understand how digital signatures work, we explain a few concepts from the field called public key cryp
29、tography. Public key cryptography is based on the notion of a public key and private key. The idea is that you tell everyone in the world your public key. However, only you hold the private key, and it is important that you safeguard it and dont release it to anyone else. The keys are matched by mat
30、hematical relationships, but the exact nature of these relationships is not important for us. (If you are interested, you can look it up in The Handbook of Applied Cryptography at HTTP:/WWW.car.math.waterlog.ca/hae/.)The keys are quite long and complex. For example, here is a matching pair of public
31、 and private Digital Signature Algorithm (DSA) keys.Public key:Code View:p:fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17q: 962eddcc369cba8ebb260ee6b6a126d9346e38c5g:678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d648693
32、1d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4y:c0b6e67b4ac098eb1a32c5f8c4c1f0e7e6fb9d832532e27d0bdab9ca2d2a8123ce5a8018b8161a760480fadd040b927281ddb22cb9bc4df596d7de4d1b977d50 Private key:Code View:p:fca682ce8e12caba26efccf7110e526db078b05edecbcd1eb4a208f3ae1617ae01f35
33、b91a47e6df63413c5e12ed0899bcd132acd50d99151bdc43ee737592e17q: 962eddcc369cba8ebb260ee6b6a126d9346e38c5g:678471b27a9cf44ee91a49c5147db1a9aaf244f05a434d6486931d2d14271b9e35030b71fd73da179069b32e2935630e1c2062354d0da20a6c416e50be794ca4x: 146c09f881656cc6c51f27ea6c3a91b85ed1d70aIt is believed to be prac
34、tically impossible to compute one key from the other. That is, even though everyone knows your public key, they cant compute your private key in your lifetime, no matter how many computing resources they have available.It might seem difficult to believe that nobody can compute the private key from t
35、he public keys, but nobody has ever found an algorithm to do this for the encryption algorithms that are in common use today. If the keys are sufficiently long, brute forcesimply trying all possible keyswould require more computers than can be built from all the atoms in the solar system, crunching
36、away for thousands of years. Of course, it is possible that someone could come up with algorithms for computing keys that are much more clever than brute force. For example, the RSA algorithm (the encryption algorithm invented by Rivest, Sha mir, and Alleman) depends on the difficulty of factoring l
37、arge numbers. For the last 20 years, many of the best mathematicians have tried to come up with good factoring algorithms, but so far with no success. For that reason, most cryptographers believe that keys with a modulus of 2,000 bits or more are currently completely safe from any attack. DSA is bel
38、ieved to be similarly secure.Figure 9-12 illustrates how the process works in practice.Suppose Alice wants to send Bob a message, and Bob wants to know this message came from Alice and not an impostor. Alice writes the message and then signs the message digest with her private key. Bob gets a copy o
39、f her public key. Bob then applies the public key to verify the signature. If the verification passes, then Bob can be assured of two facts:The original message has not been altered.The message was signed by Alice, the holder of the private key that matches the public key that Bob used for verificat
40、ion.You can see why security for private keys is all-important. If someone steals Alices private key or if a government can require her to turn it over, then she is in trouble. The thief or a government agent can impersonate her by sending messages, money transfer instructions, and so on, that other
41、s will believe came from Alice.The X.509 Certificate FormatTo take advantage of public key cryptography, the public keys must be distributed. One of the most common distribution formats is called X.509. Certificates in the X.509 format are widely used by VeriSign, Microsoft, Netscape, and many other
42、 companies, for signing e-mail messages, authenticating program code, and certifying many other kinds of data. The X.509 standard is part of the X.500 series of recommendations for a directory service by the international telephone standards body, the CCITT.The precise structure of X.509 certificate
43、s is described in a formal notation, called abstract syntax notation #1 or ASN.1. Figure 9-13 shows the ASN.1 definition of version 3 of the X.509 format. The exact syntax is not important for us, but, as you can see, ASN.1 gives a precise definition of the structure of a certificate file. The basic
44、 encoding rules, or BER, and a variation, called distinguished encoding rules (DER) describe precisely how to save this structure in a binary file. That is, BER and DER describe how to encode integers, character strings, bit strings, and constructs such as SEQUENCE, CHOICE, and OPTIONAL.第 頁 共 7 頁Jav
45、a核心技術當Java技術剛剛問世時,令人激動的并不是因為它是一個設計完美的編程語言,而是因為它能夠安全地運行通過因特網(wǎng)傳播的各種applet。很顯然,只有當用戶確信applet的代碼不會破壞他的計算機時,用戶才會接受在網(wǎng)上傳播的可執(zhí)行的applet。正因為如此,無論過去還是現(xiàn)在,安全都是設計人員和Java技術使用者所關心的一個重大問題。這就意味著,Java技術與其他的語言和系統(tǒng)有所不同,在那些語言和系統(tǒng)中安全是事后才想到要去實現(xiàn)的,或者僅僅是對破壞的一種應對措施,而對Java技術來說,安全機制是一個不可分割的組成部分。Java技術提供了以下三種確保安全的機制:(1)語言設計特性(對數(shù)組的邊界進
46、行檢查,無不檢查類型的轉(zhuǎn)換,無指針算法等)。(2)訪問控制機制,用于控制代碼能夠執(zhí)行的功能(比如文件訪問,網(wǎng)絡訪問等)。(3) 代碼簽名,利用該特性,代碼的作者就能夠用標準的加密算法來表明Java代碼的身份。這樣,該代碼的使用者就能夠準確地知道誰創(chuàng)建了該代碼,以及代碼被標識后是否被修改過。下面,我們要介紹java.security包提供的加密算法,用來進行代碼的標識和用戶身份認證。正如我們前面所說,applet 是在Java平臺上開始流行起來的。實際上,人們發(fā)現(xiàn)盡管他們可以編寫像著名的“nervous text”那樣栩栩如生的applet,但是在JDK1.0安全模式下無法發(fā)揮其一整套非常有用的
47、作用。例如,由于JDK1.0下的applet要受到嚴密的監(jiān)督,因此,即使applet在公司安全內(nèi)部網(wǎng)上運行時的風險相對較小,applet也無法在企業(yè)內(nèi)部網(wǎng)上發(fā)揮很大的作用。Sun公司很快就認識到,要使applet真正變得非常有用,用戶必須可以根據(jù)applet的來源為其分配不同的安全級別。如果applet來自值得信賴的提供商,并且沒有被篡改過,那么applet的用戶就可以決定是否給applet授予更多的運行特權。 如果要給予applet更多的信賴,你必須知道下面兩件事:(1)applet來自哪里?(2)在傳輸過程中代碼是否被破壞?在過去的50年里,數(shù)學家和技術機科學家已經(jīng)開發(fā)出各種各樣成熟的算法
48、,用于確保數(shù)據(jù)和電子簽名的完整性,在java.security包中包含了許多這些算法的實現(xiàn)。在下面幾節(jié),我們將要介紹消息摘要是如何檢測數(shù)據(jù)文件中的變化的,以及數(shù)字簽名是如何證明簽名者的身份的。消息摘要是數(shù)據(jù)塊的數(shù)字指紋。例如,所謂的SHA1(安全散列算法#1)可將任何數(shù)據(jù)塊,無論其數(shù)據(jù)有多長,都壓縮為160位(20字節(jié))的序列。與真實的指紋一樣,人們希望任何兩條消息都不會有相同的SHA1指紋。當然這是不可能的因為只存在2160 個SHA1指紋,所有肯定會有某些消息具有相同的指紋。因為2160 是一個很大的數(shù)字,所以存在重復指紋的可能性微乎其微,那么這種重復的可能性到底小到什么程度呢?根據(jù)Jam
49、es Walsh在他的True Odds:How Risks Affect Your Everyday Life,Merritt Publishing出版社1996年出版,一書中所闡述的,你和他們所有的人都死于雷擊的概率,比偽造的消息與原來消息具有相同的SHA1指紋的概率還要高。(當然,可能有你不認識的其他10個以上的人會死于雷擊,但這里我們討論的是你選擇的特定的人的死亡概率)。消息摘要具有兩個基本屬性: (1)如果數(shù)據(jù)的1位或者幾位改變了,那么消息摘要也將改變。(2)擁有給定消息的偽造者不能創(chuàng)建與原消息具有相同摘要的假消息。當然,第二個屬性又是一個概率問題。讓我們來看看下面這位億萬富翁下的遺
50、囑:“我死了之后,我的財產(chǎn)將由我的孩子平分,但是,我的兒子George應該拿不到一個子?!边@份遺囑的SHA1指紋為:2D 8B 35 F3 BF 49 CD B1 94 04 E0 66 21 2B 5E 57 70 49 E1 7E這位有疑心病的父親將這份遺囑交給一位律師保存,而將指紋交給另一位律師保存?,F(xiàn)在,假設George能夠賄賂那位保存遺囑的律師,他想修改這份遺囑,使得Bill一無所得。當然,這需要將原指紋改為下面這樣完全不同的位模式: 2A 33 0B 4B B3 FE CC 1C 9D 5C 01 A7 09 51 0B 49 AC 8F 98 92那么George能夠找到與該指紋
51、相匹配的其他文字嗎?如果從地球形成之時,他就很自豪地擁有10億臺計算機,每臺計算機每秒鐘處理一百萬條信息,他依然無法找到一個能夠替換的遺囑。人們已經(jīng)設計出大量的算法,用于計算這些消息摘要,其中最著名的兩種算法是SHAI和MD5。SHAI是由美國國家標準和技術學會開發(fā)的加密散列算法,MD5是由麻省理工學院的Ronald Rivest發(fā)明的算法。這兩種算法都使用了獨特巧妙的方法對消息中的各個位進行擾亂。如果要了解這些方法的詳細信息,請參閱William Stallings撰寫的Cryptography and Network Security一書,該書由Prentice Hall出版社于2005年
52、出版口值得注意的是,最近人們在這兩種算法中發(fā)現(xiàn)了某些微妙的規(guī)律性,因此許多密碼人員建議最好避免使用MD5,而應該使用SHA1算法,直到有更強的加密算法。(查看HTTP:/WWW./rsalabs/node.asp?id=2834以了解更多的信息)。Java編程語言已經(jīng)實現(xiàn)了SHA1和MD5。MessageDigest類是用于創(chuàng)建封裝了指紋算法的對象的“工廠”,它的靜態(tài)方法get-instance返回繼承了MessageDigest類的某個類的對象。這意味著MessageDigest類能夠承擔下面的雙重職責:(1)作為一個工廠類。(2)作為所有消息摘要算法的超類。例如,下面是如何獲取一個能夠計算
53、SHA指紋的對象的方法:MessageDigest alg = MessageDigest.get-instance(“SHA-1”);(如果要獲取計算MD5的對象,請使用字符串“MD5”作為get-instance的參數(shù)。)當你已經(jīng)獲取MessageDigest對象之后,通過反復調(diào)用update方法,將信息中的所有字節(jié)提供給該對象。例如,下面的代碼將文件中的所有字節(jié)傳給上面建立的alg對象,以執(zhí)行指紋算法: InputStream in=. int ch; while(ch=in.read()!=-1) alg.update(byte) ch);另外,如果這些字節(jié)存放在一個數(shù)組中,那就可以一
54、次完成整個數(shù)組的更新: byte bytes =; alg.update(bytes);當完成上述操作后,調(diào)用digest方法。該方法填充輸入信息指紋算法需要的并且進行相應的計算,然后以字節(jié)數(shù)組的形式返回消息摘要。byte hash=alg.digest();程序清單9-15中的程序計算了一個消息摘要,既可以用SHA,也可以使用MD5來計算??梢詮奈募虞d需要計算摘要的數(shù)據(jù),也可以直接將信息輸入文本區(qū)域。圖9-11顯示了該應用程序的畫面。消息簽名在上一節(jié)中,我們介紹了如何計算原始消息的消息摘要和指紋的方法。如果消息改變了,那么改變后的消息的指紋與原消息的指紋將不匹配。如果消息和它的指紋是分開傳
55、送的,那么接收者就可以檢查消息是否被篡改過。但是,如果消息和指紋同時被截獲了,對消息進行修改,再重新計算指紋,這是一件很容易的事情。畢竟,消息摘要算法是公開的,不需要使用任何密鑰。在這種情況下,假消息和新指紋的接收者永遠不會知道消息已經(jīng)被篡改。數(shù)字簽名解決了這個問題。為了了解數(shù)字簽名的工作原理,我們需要解釋關于公共密鑰加密技術領域中的幾個概念。公共密鑰加密技術是基于公共密鑰和私有密鑰這個兩個基本概念的。它的設計思想是你可以將公共密鑰告訴世界上的任何人,但是,只有自己才擁有私有密鑰,重要的是你要保護你的私有密鑰,不將它泄漏給其他任何入。這些密鑰之間存在一定的數(shù)學關系,但是這種關系的具體性質(zhì)對于實際的編程來說并不重要(如果你有興趣,可以參閱HTTP:/WWW.cacr.math.uwaterloo.ca/hac/站點上的The Handbook of Applied Cryptography 一書)。密鑰非常長,而且很復雜。例如,下面是一對匹配的數(shù)字簽名算法(DSA)公共密鑰和私有密鑰。公共密鑰:p: fca682ce8e12caba26efccf7ll0e526db078b05e6ecbcdleb4a208f3ae1617ae0lf35b9la47e6df63413c5e12ed0899bcd132acd50d9915lbdc43ee737592el7q: 96
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材定金合同范本
- 會計臨時勞務合同范本
- 勞務派遣合同范本購買
- 協(xié)議證明合同范本
- 業(yè)委會與物業(yè)委托合同范本
- 別墅規(guī)劃合同范本
- 區(qū)域保護合同范本
- 農(nóng)村房子修繕承包合同范本
- 公園門衛(wèi)服務合同范本
- 包裝費合同范本
- 閩教版四年級下冊勞動教案
- 汽車電氣設備構造與維修(高職版)全套教學課件
- 中小學必背飛花令詩詞-(春、月、風、花、山、江、人、日、動物、顏色、數(shù)字)
- 緩刑解除矯正個人總結(jié)
- 北師大版小學數(shù)學六年級下冊全冊一課一練課課練(含答案)
- 白酒加工小作坊整治工作方案
- 發(fā)揚體育精神展青春光彩
- 四年級數(shù)學(四則混合運算)計算題專項練習與答案匯編
- 國家基本公共衛(wèi)生服務項目績效考核課件
- 孕產(chǎn)婦深靜脈血栓預防與護理課件
- 腳輪行走測試技術規(guī)范
評論
0/150
提交評論