原文地址http://www.ibm.com/developerworks/cn/java/jw-0428-security/
在最近的幾十年內(nèi),計算模型發(fā)生了巨大的變化,由于這些變化,出現(xiàn)了對大規(guī)模電子商務(wù)與電子交易系統(tǒng)應(yīng)用程序安全的更大需求,這正如最近對幾個受歡迎站點(diǎn)的大量拒絕服務(wù) (DoS) 攻擊所表明的那樣。尤其是對于 Java 團(tuán)體,隨著 Java 作為因特網(wǎng)編程的事實上的標(biāo)準(zhǔn)平臺出現(xiàn),安全移動 Java 代碼的能力已成為基本要求。
本文是系列文章中的第一篇,討論計算機(jī)安全和密碼學(xué)的一般概念。雖然可移動代碼并不是一個革命性的概念,但是 Java 和因特網(wǎng)給計算機(jī)安全帶來了一些不同尋常的挑戰(zhàn)。Java 體系結(jié)構(gòu)的演化及其對安全的影響、不同的安全 API 和工具軟件以及 applet 安全,等等,將在隨后的文章中討論。
此安全性論文系列并不打算提供計算機(jī)安全問題的綜合指南。計算機(jī)安全是一個多層面的問題,它涉及若干學(xué)科、部門和文化。技術(shù)投資后,接著就應(yīng)該著手培訓(xùn)、嚴(yán)格的策略強(qiáng)制執(zhí)行和總體安全策略的定期審查。
注:有關(guān)算法進(jìn)展的詳細(xì)信息,請參閱專題“ 二十一世紀(jì)的加密算法”;有關(guān)密鑰長度在安全性中的重要性的討論,請參閱專題“ 密鑰的長度是否重要?”。
什么是計算機(jī)安全?
要從總體上理解什么是計算機(jī)安全,有必要考慮一下安全在日常生活中意味著什么。我們將看到,日常生活中的一般安全規(guī)則同樣適用于計算機(jī)安全。
計算機(jī)安全的局限性
有沒有絕對計算機(jī)安全這樣的事情?一句話,沒有這樣的事情。術(shù)語安全系統(tǒng)是一個不恰當(dāng)?shù)拿Q,因為它暗示了系統(tǒng)要么是安全的,要么是不安全的。安全實際上是一種平衡。如果提供的資源是無限的,則任何形式的安全都能遭到破壞。盡管攻擊者可用來實施攻擊的資源越來越多,但在現(xiàn)實世界中,這些資源仍然是有限的。考慮到這一點(diǎn),我們應(yīng)該這樣來設(shè)計所有系統(tǒng):讓攻擊者為破壞這些系統(tǒng)所付出的,遠(yuǎn)遠(yuǎn)大于破壞之后他們所能得到的。
端到端的安全
什么是端到端的安全?在一個多層系統(tǒng)中,每一層都應(yīng)該有其自身的安全,并且與其他層協(xié)調(diào)一致。為匯集在一起的不同系統(tǒng)和中間件設(shè)計安全,是一個相當(dāng)大的挑戰(zhàn)。簡單地說,系統(tǒng)安全的程度僅相當(dāng)于最弱的一環(huán)的安全程度;除非您按端到端的觀點(diǎn)考慮安全,否則安全隨時可以遭到破壞。
簡單性
一個復(fù)雜的安全設(shè)計會起作用嗎?乍看起來,制止未授權(quán)用戶訪問系統(tǒng)的最佳方法也許是,設(shè)計一個非常復(fù)雜的安全方案,但事實并非如此。不僅設(shè)計復(fù)雜的安全系統(tǒng)的高成本使人不敢問津,而且,要是這種安全系統(tǒng)太復(fù)雜了,恐怕連合法用戶也難以進(jìn)入。另一方面,簡單系統(tǒng)更容易理解,也更容易分析。
好的系統(tǒng)設(shè)計需要安全
有可能對安全進(jìn)行翻新嗎?答案是,這幾乎是不可能的。在很多情況下,翻新安全而不必重新設(shè)計系統(tǒng)的實質(zhì)性部分,可能是不現(xiàn)實的。在幾乎所有的情況下,翻新的成本非常昂貴。因此,安全從來不應(yīng)是事后考慮的事情 -- 從一開始它就必須是系統(tǒng)設(shè)計的不可分割的一部分。
計算機(jī)安全的基礎(chǔ)知識
了解這樣一些內(nèi)容是有用的:計算機(jī)安全的防御對象、相應(yīng)的防御機(jī)制,以及與計算機(jī)安全有關(guān)的不同術(shù)語。
威脅
威脅 -- 對計算機(jī)安全的攻擊 -- 大致可以分為以下幾類:
- 機(jī)密性攻擊:利用加密算法中的弱點(diǎn)或以其他方式,試圖竊取機(jī)密信息。
- 完整性攻擊:出于自私或惡意而試圖修改信息。應(yīng)該注意的是,完整性攻擊也可以是偶然的。
- 可用性攻擊:試圖中斷系統(tǒng)的正常運(yùn)行。可用性攻擊又稱為拒絕服務(wù) (DoS) 攻擊,后者是最近流行的術(shù)語。
幾種攻擊歸屬于上面提到的一個或幾個類別。示例包括:
- 暴力攻擊通常指搜索每一把鑰匙,直到用正確的那一把打開門為止。盡管這似乎是一項代價昂貴的操作,但實際上,通過使用專門的工具對搜索進(jìn)行仔細(xì)安排,是可能的。
- 特洛伊木馬攻擊以敵方不易察覺的方式插入一個內(nèi)線。計算機(jī)病毒就是常見的特洛伊木馬攻擊的例子。
- 轉(zhuǎn)接攻擊 (person-in-the-middle attack) 在雙方不知道的情況下,中途截取他們的通訊信息,而雙方以為他們在正常通訊。
其他的攻擊包括:生日攻擊、字典攻擊、會合攻擊 (meet-in-the-middle attack) 等。(更全面的討論,請參閱 參考資料中 Bruce Schneier 的 Applied Cryptography。)
防護(hù)物
為抵御對安全的威脅,有各種各樣的保護(hù)機(jī)制。在歷史上,防御機(jī)制曾經(jīng)包括設(shè)置某種“圍墻”或“邊界”,通常稱為周邊防御 (perimeter defense)。
防火墻,周邊防御的一個相當(dāng)成功的示例,將內(nèi)部(專用)網(wǎng)絡(luò)與外部(公用)網(wǎng)絡(luò)分隔開,并為公司策略提供中央控制點(diǎn)。然而,防火墻日益允許各種精選形式的通訊 -- 例如 HTTP -- 穿過它。
虛擬專用網(wǎng)絡(luò) (VPN),盡管仍然使用共享網(wǎng)絡(luò),但它提供的安全級別與專用網(wǎng)絡(luò)相同,是另一個防護(hù)物示例。
密碼學(xué)
密碼學(xué)及其相關(guān)領(lǐng)域密碼分析學(xué),自身與加密和解密信息的算法設(shè)計及分析有關(guān)。在下面的幾節(jié)中,我們將討論密碼學(xué)與安全之間極其重要的關(guān)系。
機(jī)密性
機(jī)密性是保護(hù)數(shù)據(jù)免受未授權(quán)的一個或多個用戶訪問的方法。簡單地說,就是只有預(yù)定的消息接收人才能夠弄懂這一消息。
如果您正在與他人交換敏感信息,您希望絕對確保只有預(yù)定的消息接收人才可以弄懂此消息,如果落入非預(yù)定的人手中,此消息實際上將變成無用的東西。機(jī)密性是用某種形式的加密技術(shù)來實現(xiàn)的。
認(rèn)證
認(rèn)證過程確認(rèn)用戶的身份。用戶可以是一個軟件實體,也可以是一個人。委托人是其身份已被驗證的一方,與委托人相關(guān)聯(lián)的是一組憑證。通常,認(rèn)證根據(jù)一些僅用戶和認(rèn)證人知道的機(jī)密信息 -- 例如口令 -- 來確認(rèn)身份。除了口令以外,更復(fù)雜的安全方案還將諸如智能卡或生物統(tǒng)計法(指紋、視網(wǎng)膜掃描,等等)之類的高級技術(shù)用于認(rèn)證。
一旦建立了認(rèn)證,在實施中對用戶(或者更一般的說,委托人)的訪問是訪問控制機(jī)制控制的。
Kerberos -- 基于密鑰和加密 -- 展示了一種早期認(rèn)證技術(shù)。這種技術(shù)使用時間戳 -- 在一個規(guī)定的時段內(nèi)會話保持有效 -- 來實現(xiàn)這一點(diǎn)。為了正常工作,Kerberos 最根本的一點(diǎn)是,假定分布式系統(tǒng)中的時鐘是同步的。
公用密鑰基礎(chǔ)結(jié)構(gòu) (PKI),代表一種更為普遍的認(rèn)證解決方案,將在下面的幾節(jié)中討論。
Java Authentication and Authorization Service (JAAS) 框架,以基于用戶的認(rèn)證和訪問控制功能補(bǔ)充 Java2 平臺。JAAS 是 Java 2 Software Development Kit,v 1.3 的標(biāo)準(zhǔn)擴(kuò)展。
完整性
比如說您發(fā)送一張電子支票。當(dāng)銀行最終收到該支票時,它需要弄清楚付款金額有沒有被篡改,這就是稱為完整性的安全概念。
不可否認(rèn)
在上述的電子支票示例中,如果您確實發(fā)送了該支票,就應(yīng)該沒有辦法再否認(rèn)它。不可否認(rèn)提供不可否認(rèn)的行為證據(jù),如給接收人的數(shù)據(jù)的原始證明或給發(fā)送人的數(shù)據(jù)收據(jù)。
審計和日志
保存已授予或已拒絕的資源訪問的記錄,可能有助于日后的審計工作。就此目的而言,審計和日志對于防止非法入侵或事后對非法入侵進(jìn)行分析,是大有用處的。
策略和訪問控制
安全策略著重控制對保護(hù)數(shù)據(jù)的訪問,安全執(zhí)行機(jī)制應(yīng)該足夠靈活以執(zhí)行策略,這一點(diǎn)至關(guān)重要。這稱為保持策略與機(jī)制相分離。盡管作出該決策的依據(jù)可能是,按照委托人身份來授權(quán)訪問某一資源,但是,根據(jù)角色來管理訪問控制通常更為容易。每個委托人被映射到唯一的一個角色,以達(dá)到控制訪問的目的。通常這樣來實現(xiàn):用一個列表或矩陣,列舉不同的用戶/角色所擁有的對不同保護(hù)資源的訪問權(quán)。
Java 2 Platform,Enterprise Edition (J2EE) 使用基于角色的認(rèn)證來執(zhí)行其策略。考慮到這一點(diǎn),在 J2EE 中,業(yè)務(wù)邏輯的開發(fā)人員根據(jù)角色來限制對特定功能的訪問。
密碼學(xué):保密書寫的科學(xué)
雖然密碼學(xué)和計算機(jī)安全是兩個截然不同的主題,但是計算機(jī)安全在很多方面都依賴于密碼學(xué)。
Java.security與幾個核心包一起提供了一些 Java 的加密功能。Javax.crypto是主要的包,它的某些功能部件受出口控制法的控制。此外,javax.net.ssl包在必要時可用來創(chuàng)建安全套接字傳遞機(jī)密信息。
下一步,讓我們了解一些與密碼學(xué)有關(guān)的概念。
密碼分析學(xué)
密碼分析學(xué),與密碼學(xué)正好相反,是解碼或攻擊秘密編碼信息而無須訪問密鑰的藝術(shù)。密碼分析學(xué)已經(jīng)使用理論性攻擊發(fā)現(xiàn)了許多算法中的安全漏洞,并導(dǎo)致了算法的廢棄或重大修改。密碼分析學(xué)在分析和驗證算法,使算法更加安全方面,起著關(guān)鍵性作用。
密碼學(xué)算法
有幾種算法可以加密信息。一種簡單的算法可能要將消息的字符輪換 13 個位置 -- 稱為 rot13。雖然 rot13 是不安全的(因為原始消息很容易解密),但是它仍然普遍用于雖不安全但畢竟是已加密了的消息傳送。
如果以 Kerckhoff在十九世紀(jì)所做的工作為基礎(chǔ),則密碼系統(tǒng)的安全應(yīng)該完全基于密鑰的保密,而不是基于算法的保密。密鑰,再加上經(jīng)過充分測試和分析的算法,可用密碼學(xué)方法生成安全的系統(tǒng)。相應(yīng)地,許多廣泛流行的算法可用于公眾審查。對許多算法所做的密碼分析學(xué)工作導(dǎo)致了對算法的若干修改,從而使它們的功能更強(qiáng)大。
注:有關(guān)設(shè)計下一代加密標(biāo)準(zhǔn)的過程的信息,請參閱第一個 專題。
單向散列函數(shù)
單向散列函數(shù) H(M),對一則任意長度的消息進(jìn)行處理,并返回一個具有固定長度 m的散列值 h:
這一算法的安全源于其單向性,而不是其內(nèi)部工作方式的保密性。更嚴(yán)格地說, H(M)具有以下屬性:
- 給定 M,很容易計算出 h
- 給定 h,很難計算出滿足 H(M) = h的 M
- 給定 M,很難找到一則消息 M',使得 H(M) = H(M')
散列法是數(shù)字簽名的基本部分,將在下面討論。 RSA 的 Ron Rivest 設(shè)計了 MD4(消息摘要)和 MD5(RSA 是一家安全公司的名稱,它由該公司創(chuàng)始人 Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏首字母組成。MD4 和 MD5 產(chǎn)生一個 128 位散列。 SHA(安全散列法算法),由 National Institute of Standards and Technology (NIST) 與 National Security Agency (NSA) 聯(lián)合設(shè)計,它產(chǎn)生一個 160 位散列,用于數(shù)字簽名算法 (DSA)。 SHA-1,在某些文獻(xiàn)中簡稱為 SHA,是 1994 年發(fā)表的 SHA 的修訂版。SHA 和 SHA-1 都是安全散列標(biāo)準(zhǔn) (SHS) 的一部分,與 MD4 函數(shù)系列有共同之處。MD4、MD5 和 SHA 是單向散列函數(shù)的一些示例。
作為一個例子,根據(jù) MD5 算法為外觀類似的消息生成了下面的 128 位散列。
表 1. 使用 MD5 的散列值
原始消息
|
散列值(用十六進(jìn)制表示)
|
a quick brown fox jumped over a lazy dog
|
13b5eeb338c2318b790f2ebccb91756f
|
a quick blue fox jumped over a lazy dog
|
32c63351ac1c7070ab0f7d5e017dbcea
|
a quick brown dog jumped over a lazy fox
|
a4c3b4cd38ade6b5e2e101d879a966f5
|
對于任意長度的消息,此算法都將生成一個代表該消息的固定長度的散列。從表 1 可以清楚地看出,即使稍微修改消息,也會更改其散列。要找出散列值相同的一個替換消息,將是一件耗費(fèi)時間的事情。
到目前為止,我們已經(jīng)討論了不使用密鑰的單向函數(shù)。另一方面,消息認(rèn)證代碼 (MAC) 是一種使用密鑰的單向函數(shù),可以用它們在系統(tǒng)上或用戶之間認(rèn)證文件或消息。 HMAC(用于消息認(rèn)證的密鑰散列法)就是這種函數(shù)的一個例子。
對稱密碼
對稱密碼,在與密鑰聯(lián)合應(yīng)用時,將明文轉(zhuǎn)換為密文。密碼也可以使用相同的密鑰將密文恢復(fù)為明文。所謂對稱性,即指加密和解密使用完全相同的密鑰。加密和解密有兩個相關(guān)的函數(shù),如下所示:
Ek(M) = C,其中
M 是明文, C是密文, k是密鑰
Dk(C) = M,其中
C、M和k的意義同上
|
它們具有基本的屬性:D k(E k(M)) =M
給定一個設(shè)計良好的算法,則過程的安全就在于密鑰的保密。因此,對稱密碼的主要挑戰(zhàn)在于密鑰的分布形式 -- 通訊雙方如何共享同一密鑰?不同的是,非對稱密碼則不使用同一密鑰。相反,它們依賴一個廣泛可用的、自由分布的公用密鑰。
使用專用密鑰的加密通常比使用公用密鑰的加密速度快。在一個混合的密碼系統(tǒng)中,用于會話的專用密鑰稱為會話密鑰,是使用公用密鑰建立的,通訊雙方將會話密鑰用于會話的其余部分。這是一種形式的密鑰交換。其他形式的密鑰交換使用更安全的通道來交換專用密鑰。
可以將對稱密碼分類為流密碼或塊密碼。流密碼對位流或字節(jié)流進(jìn)行操作,而塊密碼則對一組位進(jìn)行操作。密文中的本質(zhì)區(qū)別是,如果使用塊密碼的同一密鑰進(jìn)行加密,則相同的明文塊將加密為相同的密文塊;而在使用流密碼時,則每次加密時都將明文塊加密為不同的密文塊。
大多數(shù)塊算法都符合 Feistel 網(wǎng)絡(luò)屬性,這意味著用于加密和解密的算法是相同的,僅在密鑰的應(yīng)用方面存在一些差異。
有幾種操作模式。模式可以增強(qiáng)加密,還可以修改對稱密碼的特征。例如,通過使用適當(dāng)?shù)哪J剑梢允挂粋€塊密碼的行為與一個流密碼相似。下面列出的是幾個重要的模式:
- 電子食譜模式 (ECB)
- 密碼塊鏈接 (CBC)
- 密碼反饋模式 (CFB)
- 輸出反饋模式 (OFB)
有幾種塊密碼,其中包括數(shù)據(jù)加密標(biāo)準(zhǔn) (DES)。DES 將由高級加密標(biāo)準(zhǔn)(AES) 代替(請參閱 專題 ,“AES:二十一世紀(jì)的加密算法”)。同時,Triple DES(3DES 或 DESede),是對 DES 的改進(jìn),它在采用 AES 之前替代 DES。在 DESede 中,加密過程是使用不同的密鑰依次進(jìn)行編碼、解碼和編碼的處理,有效地增大了密鑰的長度。
非對稱密碼
與加密和解密都使用相同密鑰的對稱密碼不同,非對稱密碼以如下方式使用不同的密鑰:
Ek1(M) = C,其中
k1 是加密密鑰
Dk2(C) = M,其中
k2 是解密密鑰
|
非對稱密碼具有以下的基本屬性:
在非對稱密碼中,通訊雙方不必共享同一密鑰。然而,密鑰 k1和 k2在數(shù)學(xué)上是相關(guān)的,以便使加密和解密處理相關(guān)聯(lián)。
公用密鑰和專用密鑰
非對稱密鑰密碼又稱為公用密鑰密碼學(xué),因為它們涉及公用密鑰這一概念。公用密鑰是可自由使用的,而專用密鑰是一個秘密。在一個用戶網(wǎng)絡(luò)中,每個用戶都有其自己的公用密鑰,這些密鑰在一個通常可訪問的目錄中發(fā)布。
在二十世紀(jì)七十年代中期,Whitfield Diffie 和 Martin Hellman 一起,Ralph Merkle 一個人,分別引入了公用密鑰密碼學(xué)。公用密鑰算法的安全基于以下過程的難度:在不知道密鑰的情況下,從密文推斷出明文,以及從公用密鑰推斷出專用密鑰。
了解下面這一點(diǎn)是很重要的:在大多數(shù)文獻(xiàn)中對公用密鑰和專用密鑰的討論可能是模糊不清的,因為許多文章看起來是將相同的密鑰用于加密和解密,但是在討論中隱含了這樣的事實:它們所說的密鑰,一個是專用密鑰,另一個是公用密鑰。
要注意的另一點(diǎn)是,在使用多個算法時,要求使用多個密鑰,因為密鑰對算法來說是唯一的。
下面將討論的數(shù)字簽名和證書均依賴公用密鑰密碼學(xué)。
數(shù)字簽名
數(shù)字簽名,很像實際生活中的簽名,提供發(fā)送人可靠性和消息完整性的證明。數(shù)字簽名可用于“不可否認(rèn)” -- 發(fā)送人無法否認(rèn)他(或她)已經(jīng)簽名。數(shù)字簽名要成功就必須不可偽造并不可重用,而且已簽名的文檔必須是不可修改的。
基本的數(shù)字簽名協(xié)議是:
- 發(fā)送人用他/她的專用密鑰加密文檔,并隱式地在文檔上簽名
- 消息發(fā)出
- 接收人用發(fā)送人的公用密鑰解密該文檔,從而驗證該簽名
由于在大文檔上簽名很費(fèi)時,因此通常只在消息的散列上簽名。單向散列和數(shù)字簽名算法被公認(rèn)為是先驗的。原始消息與簽名一起發(fā)送。接收人用發(fā)送人的公用密鑰解密散列,并將它與由收到的消息生成的散列相對照,來驗證簽名。下面的圖 1 說明簽名的生成和驗證過程。該方案還有一個好處,即將文檔和簽名分開。
圖 1. 數(shù)字簽名
請注意,消息使用散列算法生成一個固定長度的散列,然后加密該散列以生成簽名。這些簽名有時稱為數(shù)字指紋,因為它們唯一地代表原始消息。
使用數(shù)字簽名并不保證機(jī)密性,因為消息是作為明文發(fā)送的。為了進(jìn)一步保證機(jī)密性,而不是發(fā)送明文消息,可以用發(fā)送人的專用密鑰對它進(jìn)行加密,此過程如圖 2 所示。
圖 2. 加密的數(shù)字簽名
數(shù)字簽名有幾種算法,如 ElGamal 簽名、RSA 或數(shù)字簽名算法 (DSA)。ElGamal 和 RSA 算法都可以用于加密和數(shù)字簽名。不同的是,DSA 是數(shù)字簽名標(biāo)準(zhǔn) (DSS) 的一部分,則只能用于數(shù)字簽名,不能用于加密。如果希望加密,則必須將其他的加密算法與 DSA 聯(lián)合使用。
下面的表 2 簡明地匯總了目前所討論過的所有不同加密算法的各種特征,并對每一種算法提供了一些示例。
表 2. 加密算法總結(jié)
加密算法
|
簡要說明
|
安全屬性
|
問題
|
示例
|
安全屬性
|
單向散列函數(shù)
|
生成長度固定的唯一簽名
|
算法的單向性
|
簽名沖突
|
SHA、MD4、MD5
|
|
消息認(rèn)證代碼 (MAC)
|
使用密鑰的單向函數(shù)
|
算法的單向性
|
簽名沖突
|
HMAC
|
認(rèn)證
|
對稱密碼
|
用同一密鑰加密和解密
|
密鑰長度和算法
|
密鑰分布
|
DES
|
認(rèn)證、完整性、機(jī)密性
|
非對稱密碼(公用密鑰密碼學(xué))
|
加密和解密使用不同的(公用的和專用的)密鑰。很容易獲得公用密鑰。
|
密鑰長度、算法,以及從公用密鑰推斷專用密鑰的難度。
|
信任問題
|
RSA、ElGamal
|
認(rèn)證、完整性
|
數(shù)字簽名
|
為認(rèn)證而生成散列消息,并用發(fā)送人的專用密鑰加密
|
單向性和密鑰長度
|
無保密性
|
DSA、RSA
|
認(rèn)證、完整性
|
帶加密的數(shù)字簽名
|
消息簽名、并用接收人的公用密鑰加密
|
簽名、加密算法和密鑰長度
|
信任問題
|
數(shù)字簽名和密碼的組合
|
認(rèn)證、完整性和機(jī)密性
|
證書
由于數(shù)字簽名依賴于公用密鑰的完整性,那么驗證人如何確保他們獲得的公用密鑰不是來自某個冒名頂替者呢?而且,在數(shù)字簽名認(rèn)證發(fā)送人的同時,接收人如何能夠確保發(fā)送人值得信任呢?
這些問題的解決方案就是證書。由共同信任的第三方或證書管理機(jī)構(gòu) (CA) 頒發(fā)證書。CA 不僅有公用密鑰,還有用戶的其他信息。證書含有一個有效期。頒發(fā)機(jī)構(gòu)用它的專用密鑰在證書上簽名。該過程隱含一個假定,即 CA 的公用密鑰是廣泛可用的和真實的。
公用密鑰證書以 X.509標(biāo)準(zhǔn)為基礎(chǔ)。CA 的一些示例包括 Verisign、Thawte (現(xiàn)在由 VeriSign 擁有)和 Entrust。在 Java 中,javax.security.cert程序包提供證書支持。
公用密鑰的基礎(chǔ)結(jié)構(gòu)
較新的公用密鑰基礎(chǔ)結(jié)構(gòu) (PKI) 因來源不同而有幾種含義。一種觀點(diǎn)認(rèn)為 PKI 是指信任層次結(jié)構(gòu)和公用密鑰證書,而另一種觀點(diǎn)則認(rèn)為它還包括加密和數(shù)字簽名服務(wù)。PKI 還解決了幾個與密鑰有關(guān)的問題,包括密鑰的注冊、撤消、選擇、恢復(fù),等等。
</script>