以Signed Applet為技術平台的網路交易





吳志泓 吳瑞祥 袁賢銘

國立交通大學資訊科學系分散式系統實驗室
新竹市大學路1001號電子資訊大樓703室
TEL:(03)5712121 EXT. 59265,59266
EMAIL: {gis86501, gis87539, smyuan}@cis.nctu.edu.tw


摘要

在這篇論文中 , 所要介紹的是關於 Signed Applet 的方法 . Java Applet 在近幾年可以說是炙手可熱 . 由於 Applet 是經由網路傳輸而取得的 , 基於安全的考量 , 便有了許多安全的機制 , 這點限制了 Applet 的能力 , 大大的降低了 Applet 可以適用的範圍 ; 為此 , Microsoft 與 Netscpae 和 Sun 等公司分別為各自的瀏覽器加上一些方法來突破這層限制 , 又能確保我們的安全性 , 也就是本文所要介紹的 Signed Applet 的方法 .

經由這個方法 , 就可以做出功能更強大的程式出來 ; 同時 , 近年來興起的網路購物 , 安全性一直遭人詬病 ; 但可以經由這個方法 , 來完全解決這樣的問題 .





一.動機

網路購物已越來越盛行,網路安全以及網路操作的方便性也越來越受到重視,基於這兩種的考量, 目前流行的browser如Netscape, Microsoft IE都是最佳的選則,browser易操作, 沒有平台上的 限制,security也沒有問題,不用怕因為用了browser而造成自己電腦堛爾禤くQ竊取。

不過另一方也因為browser上種種的security限制,以致於許多的功能無法完全的發揮,目前可突 破此限制的有Microsoft的ActiveX,但是ActiveX在security上的不嚴謹,會造成許多網路上不法 的入侵,另一方ActiveX目前也只有Microsoft的平台上才有支援,其所需的也是有限。

而目前大多數browser都支援的java applet,可跨平台是其最大的優點,但是在security上會被browser 所限制,其強制採用的安全限制有:

Applet不能在執行的機器上進行一般的讀寫動作:

雖然在JDK所提供的Applet Viewer允許使用者去定義檔案的存取規則,但是在一般的browser上如 Netscape,MS IE等是不允許的,以免使用者的電腦資料被破壞或竊取。

除了被download 的applet的機器外Applet不能與其他的機器進行網路的溝通:

這也是為了安全的考量所設的限制,以免有外來的hacker從其他的機器進行破壞。

Applet不能執行機器上的任何程式:

也就是無法使用Native method。

Applet 無法讀取特定的系統資料:

為了安全的考量,以下的資料無法被browser所讀取。

關鍵字 定義
java.class.pathJava class路徑
java.homeJava install的路徑
user.dirUser目前的工作目錄
user.homeUser的home directory
user.nameUser的account




二.解決方案

目前internet的使用,以browser為佔大多數,如果希望browser能達到一般網路應用軟體應有的功 能,java applet似乎是不可能,若以MS的ActiveX來當做solution的話,除了必需被Microsoft綁住之 外,安全也是一大隱優,所以目前的解決之道除了對browser下功夫之外,就屬signed applet為目前 最佳的解決方法,因為signed applet 可在程度上適當的不受browser限制,又可經過安全認證的保護,以確保 資料安全與完整。





三.運作原理

運作原理分為 Programer 和 Broswer 兩部份 , 說明如下:

Programer

如 Fig. 1 所示 , Applet 先經由 Hash function 求出一段 Hash code 後 , 再經由 Signer 的 private key 加密 , 同時加入個人的 certificate , 和程式碼 共同經由壓縮 , 產生出一個壓縮檔 . 這個壓縮檔就具有讓他人驗證的能力 .


Fig. 1

Broswer

當 Broswer 接收到一個被簽章過的 Applet 檔案時 , 首先 , 會對這個壓縮檔進行解壓縮 , 先取得 Signer 的 certificate 和被加密過的 hash code , 利用 CA 的 Public Key 可以在 Signer 的 certificate 取得他的 public key 來解開 hash code 的內容 . 另外 , 也對取得的 Applet 利用相同的 Hash function 做出另一段 hash code , 最後比較兩者是否相同 . 如果相同的話 , 表示這個 Applet 不曾被修改過 , 可以放心執行 ; 如果不相同 , 就表示 Applet 已經被修改了 , 不可再執行這個 Applet .


Fig. 2




四.實作和結果

關於目前有資援 Applet 且有相當使用者的 broswer 就數 Microsoft IE 和 Netscape Communicator ; 底下就分別對這兩種 broswer 做介紹 :

Microsoft IE

首先 , 要先取得 MS JAVA SDK 2.01 , 其中包含了我們所需要的兩個工具. 在對 Applet 做簽章以前 , 要先對程式做壓縮 , 壓成 cab 檔 , 其方法如下 :

abarc n CabFileName.cab <file will add to the CabFileName>

CabFileName.cab : 壓縮完後所產生的 cab 檔

接下來便要對這個 cab 檔做簽章 , 其方法如下:

signcode -j javasign.dll -jp low -spc MyCert.spc -k MyKeyName MyApplet.cab

-jp : Applet 權限的設定 , 共分為 low , medium , high ; 其中 , low 對安全性的要求較低 , high 為最高的 .

-k : 表示憑證中 , 代表個人代表個人的金鑰的一個代稱

MyApplet.cab : 壓縮所有的 class 後所產生的 cab 檔 .

所產生的這個 MyApplet.cab就是簽證過的檔案 . 接著 , 就 要把這個 cab 檔放入 html 中了 , 其格式如下 :

<applet code=Test.class width=300 hight=300 >

<param name="cabinets" value="MyTestApplet.cab"></applet>

當其在 IE 上執行的時候 , 會有 Fig. 3 這個畫面出現 , 當選擇確定以後 , 這個 applet 便可以突破安全限制 , 讀取 local 端的資訊了.



Fig. 3

Netscape Communicator

Netscape 提供的方法 , 是利用 signtool 這個程式與 communicator 相緊密結合 , 而產生出簽章過的 Applet . 同時 , 在對 Applet 做簽章前 , 要對程式做些許的修改 , 讓 Netscpae 所發展的 capsapi_classes.zip package 來管理相關的安全問題 . 在觸犯到安全限制的程式碼 , 如讀取本地電腦檔案 , 前加入下面的程式碼 :

try{
PrivilegeManager.enablePrivilege("UniversalFileRead");
} catch(netscape.security.ForbiddenTargetException e){
System.out.println(e);
}

signtool 是依附著 Netscape 才能運作的 , 其所下的命令中 , 有很多都是跟Netscpae communicator 有相當密切的關係 .當我們的 applet 加上上面的程式以後 , 將這個 class 放在一個目錄下 , 然後執行下面的命令 :

signtool -k"your ID" -d"c:\netscape\users\wrs" -Z"testjar.jar" classdirection

"your ID" : 之前 , 取得數位憑證時 , 所輸入的名稱 .
"c:\netscape\users\wrs" : Netscape 中存放個人資料的地方
"testjar.jar" : 最後所產生的檔案名稱
classdirection : 之前存放 class 的那個目錄

在完成 Sign Applet 以後 , 便要將其放入 html 中 , 其格式如下 :

<applet code=Test.class archive="testjar.jar" Width=250 height=60>

</applet>

接著就要執行我們的程式了 , 一開始 , 會跟一般的 Applet 沒有什麼分別 , 但當程式執行到先前有加安全限制的那些程式碼的時候 , 就會有 Fig. 4 的這個畫面出現 . 來讓使用者決定是否允許這個程式去做這件事情.



Fig. 4




五.方法比較

底下 , 就對 Netscape 與 Microsoft 的方法略加以比較其間的差異:

權限的設定

Microsoft 對於 Applet 在 broswer 中的權限設定在於對 Applet 做簽章的時候做 ; 但 Netscpae 則需要對程式碼加以修改 . 顯然的 , Microsoft 的做法要簡單的多 , 但同時也出現一個問題 ; 如果 要在一個 Applet 中 , 使用者要同意第一次的檔案讀取 , 但不同意第二次的檔案讀取 , 就沒有辦法 做到了 ; 但 Netscpe 就可以分別允許各種的權限 .

Certificate的安全性

Netscape 的 certificate 是直接置於其 broswer 中 , 也直接從其中讀出來 ; Microsoft 則將其 放於硬碟的某處 ; 安全性的考量是各有優缺點 ; Netscape 經由其 broswer 來保護這些資料 , 而 Microsoft 則由使用者自行來保護.

壓縮檔

Microsoft 提出的 cab 檔 , 有較高的壓縮率 , 但除了 Windows 的環境外 , 其它的作業系統並 沒有相關的程式 ; Netscape 所使用的 jar 檔為 java 標準的壓縮格式 , 目前的資援性較高 .

HTML 寫法

經由上面的介紹 , 如果要在兩個 broswer 都 能執行我們的 Applet , 就需要兩個 html 檔 ; 下面是將上面提到的兩個壓縮檔整合在一起的範例:

<applet code=Test.class archive="testjar.jar" width=300 hight=300 >

<param name="cabinets" value="MyTestApplet.cab">

</applet>

在 IE 中會因為有 cabinets 這個 param , 而忽略 archive 中的敘述 ; Communicator 則剛好相反 , 是故這樣的寫法剛好可以滿足我們一個網頁就可以讓兩種瀏覽器都能使用的目的.





六.結論與未來展望

Signed applet可達到的功能可以說如同一般的network application一樣,不過它有一般的application 所沒有的好處,就是可以透過browser來執行,可跨 平台,不需要做install等的動作,只要有browser,有CA的public key,就可以很方便的達到所要的目的,因此可以利用browser來monitor電腦的各個狀況,直接從browser監控達到網管的目的,也可以利用browser進行網路傳輸的應用,如file的download upload,web fax,web 上的網路買賣交易,web上的office,web上可以儲存個人設定與進度的game,利用web看電視,看VCD等,幾乎所有在目前電腦堛瑰野帠n體都可以改成web的板本,這個理念有助於network PC的發展,到時候可能就不必買一堆軟體,硬碟一顆顆的裝,只要有網路,不管是什麼OS什麼硬體,一切目的都可以達到,對於使用者是非常方便的事,而開發軟體的programmer也不需為了不同平台的電腦而特地去發展不同板本的軟體,這可以說是資訊界的理想大同世界。





七.Reference

[1]http://microsoft.com

[2]http://developer.netscape.com

[3]http://www.verisign.com

[4]http://www.rsa.com

[5]http://www.javasoft.com