2011年4月18日 星期一

相關論文目錄

相關論文

張東瀛



現代科技一日千里,資訊更新的速度更是讓人目不暇給。一般人接受的資訊越廣, 對知識的需求也越深,學習方法必然有所改變,「知識加工」勢在必行。教學系統 的設計可說是藝術﹑教育與科技的結合,在電腦日益普及而傳統教育成本逐年提高 的現代化社會,應用個人電腦作為輔助教學工具,不僅是當代潮流,也是教育工作 者必須面對的事實。 Alan Turing 曾說:「即令識見不遠, 亦知所當行。」 (We can see only a short distance ahead, but we can see plenty there that needs to be done.) 我們希望為知識導航創造一個實驗環境。學習者經由系統協助,可望發揮潛能,提 高學習效率。藉著多媒体系統的開發,結合有心人的努力,人類的智慧和文明當更 能傳諸久遠。

TITES 多媒体系統、Vikon 語音輸出編譯器與 Vikon 自然語言認知系統的設計,歷經數十個寒暑,爰將歷年撰寫的相關論文,提供有志研究人工 智慧與多媒体系統的讀者參考。敬祈諸位讀者先進指教。


1. 自然語言研究與自動翻譯系統 自動化科技 1985 年 9 月 p.73-82
2. BASIC 語言與資料庫管理系統 自動化科技 1987 年 4 月 p.79-90
3. 智慧的面紗 自動化科技 1987 年 7 月 p.97-102
4. 語意網路與框架結構 自動化科技 1987 年 12 月 p.211-221
5. BITNET 國際學術網路 自動化科技 1987 年 12 月 p.133-147 IBM 資訊世界 1988 vol.1 p. 8-13 IBM 資訊世界 1988 vol.2 p.12-16
6. ARPANET 高等科技網路 自動化科技 1988 年 4 月 p.186-197 (國科會科技論文索引 編號: 7707IA0018)
7. 科技野花 自動化科技 1989 年 1 月 p.32-36
8. 電腦化教學專家系統 自動化科技 1989 年 3 月 p.159-166 (國科會科技論文索引 編號: JA 7807-1475)
9. 普羅米修斯與潘朵拉-核能科技的沉思 自立早報 1990-02-05 (上) 自立早報 1990-02-06 (下)
10. 專家系統化與實驗計劃法 自動化科技 1990 年 5 月 p.180-187 (國科會科技論文索引 編號: JA 7907-1335)
11. 多媒体電腦系統 自動化科技 1991 年 10 月 p.111-116 (國科會科技論文索引 編號: JA 8101-1273)
12. A Multimedia-based Bilingual Instructional System Using An Expert System Shell (以專家系統發展工具建構多媒体雙語教學系統) CHAPTER I : INTRODUCTION CHAPTER II : REVIEW OF RELATED LITERATURE CHAPTER III: METHODOLOGY CHAPTER IV : SYSTEM ANATOMY CHAPTER V : CONCLUSIONS AND RECOMMENDATIONS University Microfilms International 1992 No. 13-50454
13. 以 BASIC 語言建構多媒体雙語教學系統 自動化科技 1993 年 5 月 p.95-106
14. 電腦多媒体在商業廣告之應用 HOPENET 光碟月刊 1994 年 10 月 p.158-161
15. TITES 多媒体管理系統 HOPENET 光碟月刊 1995 年 2 月 p.151-155
16. 少運崎嶇老景宜 - 我的電腦學習歷程 自動化科技 1995 年 11 月 p.65-72
17. 使用者圖形介面程式之設計 自動化科技 1996 年 3 月 p.13-17
18. 加密與密碼防禦 自動化科技 1996 年 6 月 p.70-76
19. 密碼設計與檢核原理剖析 自動化科技 1996 年 12 月 p.62-67(上) 自動化科技 1997 年 1 月 p.54-59(下)
20. 電腦多媒体專輯製作紀實 微電腦傳真(PC Magazine 中文版) 1998 年 7 月 p.282-286
21. 台語語音筆記本 2000 年 11 月 初稿 2009 年 9 月 更新稿

2011年4月3日 星期日

密碼設計與檢核原理剖析

密碼設計與檢核原理剖析
  張東瀛 



原載  
自動化科技  1996 年 12 月  p.62-67(上)
自動化科技  1997 年  1 月  p.54-59(下)



壹、前言

人類的社會,從組織型態看來,類似樹狀階層(hierarchical)結構。通常大群体中 有小群体,小群体內又有小組合。一般人喜歡過群体生活,又希望保有相當的私 密性。這種特性在城市居民的生活中特別顯著。基於區隔或保密的理由,多數人鍾 愛透天厝,獨門獨戶,屋外又可建造圍牆,萬不得已,才住公寓。重門深鎖,外掛鐵 窗,都是為了阻絕非法闖入或限制他人進出的防護措施。

個人電腦讓現代人具備第六個感知器,資訊傳播透過網路發展而無遠弗屆,活動 範圍迅速擴大,其規模遠非傳統城市格局所能比擬。人類的知性生活因電腦而豐 富,各行各業對電腦的依賴性也越來越高,因此電腦資訊的安全與維護便成為重 要而嚴肅的課題。

一般人大都有使用自動櫃員機的經驗。提款卡插入後,機器會要求你輸入密碼,用 以辨識身份。這種利用密碼檢核以過濾非法使用者的措施,常被用來作為系統安全 防護的第一道關卡。類似的保護方式也可在 BBS 站,軟体安裝或使用時看到。

電腦系統內部,也有層層關卡,最常見的便是機密等級或使用權限的保護措施。 假設你意外闖入某個電腦系統,發現一大堆看不懂的檔案,不必驚訝,因為這些檔 案可能因為安全理由而上鎖,也就是經過檔案加密的手續。除非你持有密碼可將檔 案還原或解密,否則仍是入寶山空手回的局面。

不論密碼檢核或檔案加密,都是專門技術,某些特殊的演算法更非三言兩語可以解 釋清楚。密碼學即是研究此道的入門課程。密碼設定有許多種,常見的有單碼 和複碼(以密碼機製造出來),檔案加密的方法更是五花八門,令人嘆為觀止。本文 僅針對基本的固定式密碼檢核及傳統檔案加密方法提出說明及程式設計實例。所 附程式及演算法已用於商用軟体多年,並受國際著作權公約保護,僅供讀者參考。


貳、密碼檢核程式

   REM             ******************************************
   REM             *     CHarades.BAS Version 2.0           *
   REM             *     01-22-1986                         *
   REM             *     By Tony Chang                      *
   REM             *     06-22-1996                         *
   REM             *     Writing in Quick BASIC 4.5         *
   REM             *     Tony Knowledge Engineering Lab     *
   REM             ******************************************
   以上為版權宣告及程式設計相關資訊

   'EXIT Reminder  暫回DOS作業系統的檢知器。程式內因設有暫回DOS的功能
   因此利用&H4E位址來偵測是否已執行本程式。使用者按Esc時,將&H4E內函值設
   定為5,表示電腦已執行本程式
   COLOR 15, 1: DEF SEG = &H30: MS% = PEEK(&H4E): DEF SEG
   IF MS% = 5 THEN
      CLS : BEEP: PRINT
      PRINT "CHarades 2.0 already installed, type EXIT to return": END
   END IF
   程式開始執行時先檢查&H4E是否等於5,是的話,則提醒使用者打EXIT回本程式
   若否,則繼續下一步,定義變數
   A1$ = CHR$(68): A3$ = CHR$(97): A4$ = CHR$(109): A5$ = CHR$(101)
   A2$ = CHR$(114)
   這些變數用來定義密碼所需的字母,如果直接使用字串定義,很容易用PCTools
   等工具程式看出,所以先用字母的ASCII值來定義變數,再加以組合成密碼

   此一變數為音樂響鈴,可用PLAY指令發聲
   FATE1$ = "MB T180 O2 P2 P8 L8 GGG L2 E-"

   利用剛才定義的變數設定密碼PK1$,至於PK2$可作為備用鑰匙或第二個密碼,
   必要時也可再增加幾個KEY CODE,甚至建立密碼庫存放這些密碼
   I = 1: KEY OFF: CLS : LOCATE , , 0, 14
   PK1$ = A1$ + A2$ + A5$ + A3$ + A4$ + A5$ + A2$
   PK2$ = PK1$  '本例只用一個密碼

   從第line 14到line 18為密碼檢核常式,I值設定讓使用者可輸入三次,超過
   三次未輸入正確密碼則結束程式。非法使用者有時會先找出密碼為幾位數,再進
   行測試。此處使用DO ... LOOP 的目的即是讓非法使用者無法查覺密碼位數,以
   增加篩檢困難度。
14 PRINT : PRINT : PRINT : ' PLAY FATE1$
   IF I <= 3 THEN
      I$ = LTRIM$(STR$(I))
      ANS$ = "": LOCATE 8, 10, 1: PRINT "Password"
      DO: SANS$ = INPUT$(1): ANS$ = ANS$ + SANS$
      LOOP UNTIL ASC(SANS$) = 13
      I = I + 1: PRINT : ANS$ = LEFT$(ANS$, 7)
          IF I > 3 THEN
             GOTO 16
          ELSE
             GOTO 18
          END IF
   END IF
   CLS : LOCATE 10, 12: PRINT "Incorrect password, permission denied."
   LOCATE 22, 7
   PRINT "* * * By Tony Chang, Tainan, Taiwan, August 18, 1986 * * *"
   PRINT : END
16 IF NOT (ANS$ = PK1$ OR ANS$ = PK2$) THEN GOTO 14
18 IF NOT (ANS$ = PK1$ OR ANS$ = PK2$) THEN
      LOCATE 10, 10: PRINT "Incorrect password, try again please."
      SOUND 700, 1: GOTO 14

   以上的密碼檢核常式,原先是以MBASIC寫成,後來改用QBASIC編譯成OBJECT
   CODE 就可在不同的程式呼叫。


參、檔案加密與解密

檔案加密有很多方式,比較常見的是改變檔案內函值,也就是重新編碼。不論是 ASCII文字檔或是Binary檔(如*.EXE,*.COM,圖形檔或音效檔)都是由0-255等 兩百五十六個ASCII碼組合而成,因此只要將這些ASCII碼按照一定的模式重新 組合,就和原來的檔案大不相同,達到保護的目的。

編碼的方式有兩種,一種是規則式,例如將原碼加上或減去某值,甚至利用特定公 式計算後變碼,也有依照一定程序將原碼重新排列。這種方式因為有一定的規則 常會留下蜘絲馬跡,讓解碼者有機可趁,並非是很好的方法。另一種是不規則式, 或是隨機式加密法。通常由兩個檔案組合而成,一個是要加密的來源檔,另一個則 是用來當作密碼本的簽名檔。這兩個檔案可以是文字檔也可以是二進位檔。由於 簽名檔可以千變萬化,檔案大小從數十BYTE到數十KBYTE不等,因此被破解的機率 比較小。

以下分別以程式說明這兩種加密方式


肆、規則式檔案加密法

50 CLS
   A6$ = CHR$(110): A12$ = CHR$(111): A15$ = CHR$(121): A16$ = CHR$(84)
   LOCATE 1, 1:
   PRINT "CHarades 1.0 Copyright " + A16$ + A12$ + A6$ + A15$ + " Lab 1992"
   IF A16$ <> "T" OR A6$ <> "n" OR A12$ <> "o" OR A15$ <> "y" THEN 50
   以上是防止版權宣告遭他人篡改的措施

   其次是設計以方向鍵操作的功能選單,使用者可以選擇「加密」「解密」「結束」
   等功能,選項以紅底黃字顯示,項目少時,用方向鍵比較便捷,選單多時才用滑鼠操作
   CLEAR : DIM M$(4): ECG$ = "MF L16O2ECG>CEG>CL32O2CDEFGAB>CDEFGAB>C"
   M$(1) = " 1: Charades "
   M$(2) = " 2: Reduction "
   M$(3) = " 3: Exit to DOS "
   FOR Y = 1 TO 3: LOCATE 2 * Y + 6, 30: PRINT M$(Y): NEXT Y
   LOCATE , , 0
   Y = 1: MVE = NO: X = 1: Q$ = ""
   WHILE Q$ <> CHR$(13)
   LOCATE 2 * Y + 6, 30: COLOR 14, 4: PRINT M$(Y): COLOR 15, 1
   Q$ = INKEY$: WHILE Q$ = "": Q$ = INKEY$: WEND
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 72 THEN
      MVE = YES: X = Y - 1:
          IF X = 0 THEN
             X = 3
          END IF
   END IF
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 80 THEN
      MVE = YES: X = Y + 1:
          IF X = 4 THEN
             X = 1
          END IF
   END IF
   'Call DOS shell
   這一段是利用SHELL指令設計暫回DOS功能,有時候忘記檔案放在那個目錄,或是臨時想
   到DOS作業,便可按Esc跳出。&H4E用來存放程式辨識值
   IF ASC(RIGHT$(Q$, 1)) = 27 THEN
      CLS : DEF SEG = &H30: H4E% = PEEK(&H4E): POKE &H4E, 5: SHELL
      DEF SEG = &H30: POKE &H4E, H4E%: DEF SEG : GOTO 50
   END IF
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF MVE = YES THEN LOCATE 2 * Y + 6, 30: PRINT M$(Y): Y = X: MVE = NO
   WEND
   A$ = STRING$(1, " ")'定字串長度
   IF Y = 1 THEN 110
   IF Y = 2 THEN 370
   IF Y = 3 THEN PLAY ECG$: CLS
   END

   這一段是加密常式,先輸入要進行加密和加密後的檔名
110 CLS : BEEP
    LOCATE 7, 20: PRINT "ASCII (Binary) file -> Charade file"
    LOCATE 9, 20: INPUT "Source file name "; SFN1$: IF SFN1$ = "" THEN 110
    LOCATE 11, 20: INPUT "Charade file name "; CFN1$: IF CFN1$ = "" THEN 110

    再用 SUB 600 讓使用者選擇 1-99999 五位數作密碼,CD%是密碼值除以256後的餘數
    GOSUB 600

    打開檔案,將ASCII碼逐一讀入,經過編碼運算後存入新檔
    OPEN SFN1$ FOR BINARY AS #1
    OPEN CFN1$ FOR BINARY AS #2
    L = LOF(1)
    FOR I = 1 TO L
    GET #1, I, A$
    H% = ASC(A$)
    AC% = H% + CD%: IF AC% > 255 THEN AC% = AC% - 256
    將ASCII值和密碼餘數值相加,若大於255則減去256
    IF AC% >= 249 THEN 260 '超過249則商大於10,無法存個位數
    A% = INT((AC%) / 25) '計算商
    C% = AC% - A% * 25 '計算餘數
    IF C% = 7 OR C% = 18 THEN
    LOCATE 15, 30: PRINT "Proceeding   : "; I '顯示進行加密的進度
    END IF
    AC% = C% * 10 + A% '以餘數當十位數,以商當個位數,計算新數值
260 PUT #2, I, AC% '將演算結果存進加密檔
    NEXT I
    LOCATE 15, 30
    BEEP: LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50

    這一段是解密常式,將加密演算法反向操作,把ASCII數值還原,再存入解密檔
370 CLS : BEEP: LOCATE 7, 20: PRINT "Charade file -> ASCII (Binary) file"
    LOCATE 9, 20: INPUT "Charade file name "; CFN2$: IF CFN2$ = "" THEN 370
    LOCATE 11, 20: INPUT "Target file name "; TFN2$: IF TFN2$ = "" THEN 370
    GOSUB 600
    OPEN CFN2$ FOR BINARY AS #1
    OPEN TFN2$ FOR BINARY AS #2
    L = LOF(1) - 1
    FOR I = 1 TO L
    GET #1, I, A$
    AC% = ASC(A$)
    IF AC% >= 249 THEN 500
    C% = INT(AC% / 10): D% = AC% - C% * 10 'C% 為十位數, D%為個位數
    AC% = D% * 25 + C% 'D%為原來的商,C%為原來的餘數
    IF D% = 2 OR D% = 7 THEN LOCATE 15, 30: PRINT "Proceeding   : "; I
500 H% = AC% - CD%: IF H% < 0 THEN H% = H% + 256
    B$ = CHR$(H%)
    PUT #2, I, B$
    NEXT I
    LOCATE 15, 30: PRINT "Proceeding   : "; I 顯示進行解密的進度
    BEEP: LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50
    END

    SUB 600 用以計算密碼的餘數值,由於ASCII值為0-255,故除以256再取餘數值,
    密碼設計為五位數只是障眼法,目的是取一個隨機的ASCII值來運算
600 BEEP: LOCATE 13, 20: PRINT "Code Number (XXXXX) : ": CD$ = INPUT$(5)
    CD& = VAL(CD$): IF CD& > 99999 OR CD& < 1 THEN PLAY ECG$: GOTO 600
    CD% = CD& - (INT(CD& / 256)) * 256
    RETURN

    這種加密方式由於一次處理一個BYTE,速度較慢,而且密碼為定值,被解開的機率較大。


伍、隨機式檔案加密法

隨機檔案加密法是利用兩個不同檔案,將其對應位址ASCII碼相加後,應用簡單的演算 法取得新值成為加密檔。第一個檔案為資料來源檔,是要加密的檔案,第二個檔案為簽 名檔,是當作密碼鑰匙用的檔案。由於簽名檔可以是任何形式的檔案,因此要解開密碼 的機率相當低。

範例程式以長字串方式讀入ASCII碼,再存入陣列,得以加快加密速度,由於需用動態 定長字串陣列,因此需要較多記憶体來執行。字串陣列大小設定為20K BYTE。陣列太小 時若要將大檔案加密,耗時甚久,陣列設定太大,會造成Out of Stack。

50 CLS : A6$ = CHR$(110): A12$ = CHR$(111): A15$ = CHR$(121): A16$ = CHR$(84)
   LOCATE 1, 1
   PRINT "CHarades 2.0 Copyright " + A16$ + A12$ + A6$ + A15$ + " Lab 1992"
   IF A16$ <> "T" OR A6$ <> "n" OR A12$ <> "o" OR A15$ <> "y" THEN 50
   CLEAR : DIM M$(4): ECG$ = "MF L16O2ECG>CEG>CL32O2CDEFGAB>CDEFGAB>C"
   M$(1) = " 1: Charades "
   M$(2) = " 2: Reduction "
   M$(3) = " 3: Exit to DOS "
   FOR Y = 1 TO 3: LOCATE 2 * Y + 6, 30: PRINT M$(Y): NEXT Y
   LOCATE , , 0
   Y = 1: MVE = NO: X = 1: Q$ = ""
   WHILE Q$ <> CHR$(13)
   LOCATE 2 * Y + 6, 30: COLOR 14, 4: PRINT M$(Y): COLOR 15, 1
   Q$ = INKEY$: WHILE Q$ = "": Q$ = INKEY$: WEND
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 72 THEN
      MVE = YES: X = Y - 1:
          IF X = 0 THEN
             X = 3
          END IF
   END IF
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 80 THEN
      MVE = YES: X = Y + 1:
          IF X = 4 THEN
             X = 1
          END IF
   END IF
   'Call DOS shell
   IF ASC(RIGHT$(Q$, 1)) = 27 THEN
      CLS : DEF SEG = &H30: H4E% = PEEK(&H4E): POKE &H4E, 5: SHELL
      DEF SEG = &H30: POKE &H4E,
   END IF
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF MVE = YES THEN LOCATE 2 * Y + 6, 30: PRINT M$(Y): Y = X: MVE = NO
   WEND
   IF Y = 1 THEN 110
   IF Y = 2 THEN 370
   IF Y = 3 THEN PLAY ECG$: CLS : END

   以上程式說明,請參考規則式加密法部份

加密常式: 輸入相關檔名,打開檔案,視檔案相對長度決定一次讀入字串和陣列大小
110 CLS
    LOCATE 7, 20: PRINT "Input file name for Charades Process"
    LOCATE 9, 20: INPUT "Source file: ", SFN1$: IF SFN1$ = "" THEN 110
    LOCATE 11, 20: INPUT "Signature file: ", CFN1$: IF CFN1$ = "" THEN 110
    LOCATE 13, 20: INPUT "Charades file: ", TFN1$: IF TFN1$ = "" THEN 110
    OPEN SFN1$ FOR BINARY AS #1
    OPEN CFN1$ FOR BINARY AS #2
    OPEN TFN1$ FOR BINARY AS #3
    L1 = LOF(1)
    L2 = LOF(2)

    若檔名輸入有誤,則重新輸入
    IF L1=0 OR L2=0 THEN
       BEEP: LOCATE 20,20
       INPUT ; "File Error! Hit RETURN to continue.", ANS2$
       GOTO 110
    END IF

    IF L1 > L2 THEN IL = L2 ELSE IL = L1
    以來源檔及簽名檔中較小的檔案長度作為字串陣列設定值IL
    IF IL > 20480 THEN IL = 20480   'IL最大值為20K BYTE
    設定動態定長字串陣列
    '$DYNAMIC
    DIM RD$(2)
    定義字串變數長度
    RD$(1) = SPACE$(IL)
    RD$(2) = SPACE$(IL)
    若來源檔大於一次處理長度則分段進行加密,否則一次完成
    IF L1 > IL THEN GOSUB RECHA ELSE GOSUB NONRECHA
    ERASE RD$  '將動態陣列移除
    CLOSE : BEEP:
    LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50

一次完成加密常式
NONRECHA:
    GET #1, , RD$(1)
    GET #2, , RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% + CHA%: IF TAG% > 255 THEN TAG% = TAG% - 256
    必要時可在此處加上其他演算法變碼
    DSOR$ = CHR$(TAG%)
    PUT #3, , DSOR$
    NEXT I
    RETURN

分次完成加密常式
RECHA:
    LAST = 0
    JT = INT(L1 / IL) + 1
    FOR J = 1 TO JT
    GET #1, , RD$(1)
    GET #2, 1, RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% + CHA%: IF TAG% > 255 THEN TAG% = TAG% - 256
    必要時可在此處加上其他演算法變碼
    LAST = IL * (J - 1) + I
    DSOR$ = CHR$(TAG%)
    PUT #3, LAST, DSOR$
    IF LAST = L1 THEN EXIT FOR
    NEXT I
    LOCATE 15, 30: PRINT "Proceeding   : "; LAST
    NEXT J
    RETURN

解密常式: 輸入相關檔名,打開檔案,視檔案相對長度決定一次讀入字串和陣列大小
370 CLS
    LOCATE 7, 20: PRINT "Input file name for Reduction Process"
    LOCATE 9, 20: INPUT "Charades file: ", SFN1$: IF SFN1$ = "" THEN 370
    LOCATE 11, 20: INPUT "Signature file: ", CFN1$: IF CFN1$ = "" THEN 370
    LOCATE 13, 20: INPUT "Reduction file: ", TFN1$: IF TFN1$ = "" THEN 370
    OPEN SFN1$ FOR BINARY AS #1
    OPEN CFN1$ FOR BINARY AS #2
    OPEN TFN1$ FOR BINARY AS #3
    L1 = LOF(1)
    L2 = LOF(2)
    若檔名輸入有誤,則重新輸入
    IF L1=0 OR L2=0 THEN
       BEEP: LOCATE 20,20
       INPUT ; "File Error! Hit RETURN to continue.", ANS2$
       GOTO 370
    END IF
    IF L1 > L2 THEN IL = L2 ELSE IL = L1
    IF IL > 20480 THEN IL = 20480
    DIM RD$(2)
    RD$(1) = SPACE$(IL)
    RD$(2) = SPACE$(IL)
    IF L1 > IL THEN GOSUB REDUC ELSE GOSUB NONREDUC
    CLOSE : BEEP:
    LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50

一次完成解密常式
NONREDUC:
    GET #1, , RD$(1)
    GET #2, , RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% - CHA%: IF TAG% < 0 THEN TAG% = TAG% + 256
    DSOR$ = CHR$(TAG%)
    PUT #3, , DSOR$
    NEXT I
    RETURN

分次完成解密常式
REDUC:
    LAST = 0
    JT = INT(L1 / IL) + 1
    FOR J = 1 TO JT
    GET #1, , RD$(1)
    GET #2, 1, RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% - CHA%: IF TAG% < 0 THEN TAG% = TAG% + 256
    LAST = IL * (J - 1) + I
    DSOR$ = CHR$(TAG%)
    PUT #3, LAST, DSOR$
    IF LAST = L1 THEN EXIT FOR
    NEXT I
    LOCATE 15, 30: PRINT "Proceeding   : "; LAST
    NEXT J
    RETURN


陸、結語

以簽名檔作為隨機加密的密碼檔,也可用來作為檔案製作認證文件,如果通訊雙方 各用兩個共軛簽名檔重覆加密,更可確認雙方身分。例如收訊者和送訊者先交換簽名檔 送訊者再以自己和對方的簽名檔進行二次加密後,經由網路送給對方,受訊者收到檔案 再用這兩個簽名檔進行二次解密,便可將檔案還原。由於簽名檔可針對不同檔案隨時更 改內容,即使第三者截獲加密檔也很難解密。本文提到的隨機加密程式,經過編譯後處理 20K BYTE 檔案僅需數秒,實用性頗高。

簽名檔可用一般文字檔或二進位檔,最好使用字元比較有變化的檔案作簽名檔。色彩單 調的圖形檔或比較鬆散的檔案(可得高壓縮率的未壓縮檔),通常不適合作為簽名檔。一 般而言,使用經過壓縮的檔案進行加密或當作簽名檔,都可得到較好的加密效果。

普羅米修斯與潘朵拉-核能科技的沉思

普羅米修斯與潘朵拉-核能科技的沉思

張東瀛

原載  
自立早報 1990-02-05 (上)
自立早報 1990-02-06 (下)



很久以前,世界上只有男人沒有女人。普羅米修斯對人呵護備至;他不只教人築厝,從天上偷盜火種嘉惠於人,並施用巧計,使人分得祭品中的上肉,而讓諸神啃食肥油和骨頭。諸神不甘受愚,於是設計報復,將年輕貌美的潘朵拉送給男人作伴。潘朵拉下凡時,諸神以禮相贈,其中有個寶箱,裝滿災厄,特別交待,不可開啟。

男人為美色所迷,遂不顧普羅米修斯的警告,將潘朵拉迎進小屋,共效于飛之樂。平時男人出外狩獵,潘朵拉閒來無事,以猜測箱中寶物自娛。有一天她終於忍不住誘惑,掀開箱蓋一探究竟,於是猜忌、悲傷、疾病等災禍蜂湧而出。潘朵拉一時情急,放下箱蓋,可惜為時已晚,只有「希望」被留下來。

提出這段神話,無意冒犯女性讀者。只是用以闡釋西方世界對於能源科技的看法; 普羅米修斯盜取天火,使人獲得生氣與活力,因而觸犯天神,被鐵鏈囚於高加索山,鷲鷹天天啄其肝臟,但是新肉隨即生成,由於生命永續,終日受鷹啄之苦。潘朵拉的故事則說明人類對知識的好奇,有時不是福祉而是災禍。核能科技,便是典型事例。



萬一爐內失水或爐心冷卻功能失效

核能發電與火力發電的差別在於前者以核子反應器取代傳統鍋爐,並用原子核分裂產生的熱能代替石油或燃煤產生的熱能。目前世界各國,除了蘇聯和法國建造滋生式反應器以外,絕大多數採用輕水式反應器,也就是利用普通水作為緩和劑,將核子分裂後放出的快中子速度減低,轉變成慢中子,並利用普通水為冷卻劑以維持核燃料在一定溫度下反應。輕水式反應器分為兩型,第一型為輕水式沸水反應器,壓力較低,水在反應器內沸騰化汽,如金山的核一,國聖的核二。第二型為輕水式壓水反應器,爐內壓力甚高,水不汽化,如南灣的核三。一般電廠中比較少見的還有兩類:一種是氣冷式反應器,用二氧化碳或氦做為冷卻劑,石墨為緩和劑。另一種則是採用重氫與氧的化合物,俗稱重水,做為冷卻劑兼緩和劑的重水式反應器。

反應器是核能電廠的心臟,也是核燃料進行分裂的主要場所。由於核燃料具有高度的輻射危險,為了防止輻射線侵入周圍環境,燃料必須加上層層保護。以輕水式核能電廠為例,二氧化鈾製成的燃料丸先用陶瓷體加以拘束,再裝入鋯合金護套。護套外圍有8-10吋的合金鋼板焊接而成的反應器本體及管路系統。第四重為7-10呎的混凝土屏蔽牆,最外層則是將整座反應器包封在內的容器外?。

靜態燃料在多重防護下,輻射釋出的可能性不大,但是運轉中的反應器一旦爐內失水,或爐心冷卻功能失效,放射性分裂物所產生的大量衰變熱無法移除,爐心熔解,這時一場核子災變便無可避免。


核能電廠與核子彈一起聯想,只因核能電廠的爐餘剛好可用來製造核子彈

輻射線造成的災害,不論對人體或生存環境早有定論。除了核子武器以外,反應器是大量輻射的主要來源。能源短缺,迫使台灣早在六十年代末期便著手規劃核能電廠。中美斷交後,我方採購軍備,日益困難,雖然應否製造核武,眾說紛紜,然而擁有核武製造技術卻逐漸形成共識。

核能電廠與核子彈,不論本質和技術層次都不盡相同。這兩件事被一起聯想,只因核能電廠的爐餘,剛好可用來製造核子彈。核子彈的殺傷力有目共睹,製造原理,卻不困難。大學物理系學生,只要在圖書館花點心思便可理解。嚴格說來,製造技術已不是最高機密,核子俱樂部成員有限,主因還是原料取得困難。在台灣,若要製造核子武器,除了透過核能廢料,別無他途。國際間經由核燃料再加工和鈽的再循繯技術,擁有核武的例子屢見不鮮。滋生式反應器能將不適合做燃料的的鈾238轉變為鈽239,因而加速核武擴散,則是不爭的事實。

核三廠和佳山計劃大約在同一時期先後動工,很少人加以注意,即使部份媒體有意炒作張憲義事件,台灣民眾對於應否擁有核武並不特別關心。至少核子武器不像核能電廠一再受到反核人士垂青。如果現在來做民意調查,結果可能是反對建造核能電廠,贊成擁有核子武力。一般說來,發展軍事用途的核武阻力很小,做為和平用途的電廠反而備受爭議,舉世皆然。這種奇特現象,雖不致曲解為人類好戰心理作祟,卻值得觀察與了解。


反核絕非——宣導、睦鄰等方式可解決

反核勢力有一股聲浪,指責台電壟斷核能知識,濫用專家暴力,甚至意圖欺瞞社會大眾。這種論調,不但使台電有口難言,有時更會誤導民眾,造成管制核能科技的印象。 就知識層面而言,現代通訊技術發達,任何有心想了解核能科技的人,不僅可自教育或研究機構習得相關知識,更可透過各種資訊網路向世界各地的核能專家討教或交換研究心得。

就技術層面而言,核能電廠是個複雜龐大的工業組合,它的結構支離特性,即使美國核子工業也很難確實掌握,何況法規不斷修改,科技日新月異,在在需要加以配合。通常核子反應器建造者(如西屋公司)負責反應器和其它核子系統及元件。數個工程建造商(如奇異,ITT)負責其餘架構。營建商(如中華工程,唐榮和本地其他工程包商)進行現場施工。其間的合作與協調,則端賴台電和工程設計顧問公司(如核一的伊白斯公司,核二,核三的貝泰公司)運籌帷幄。

由於核能電廠個別差異頗大,實在無法量產,即使營建數廠也不一定能沿用已往的經驗。台電雖是業主,督造三個電廠下來,充其量只是獲得若干施工和運轉經驗,根本談不上規劃設計和製造技術。即使台電有心進行技術轉移,在國人不能容錯的心態下,也很難有所突破。從核三廠出水明渠備受各界爭議,便可窺見端倪。硬說台電壟斷核能科技,未免言過其實。

執政當局近年來致力溝通民意的努力,並未得到預期效果。民眾疑慮猶存,顯示反核抗爭絕非核能宣導,電廠睦鄰等方式所能解決。反核運動的主要人口,不外電廠附近居民,熱心環保人士,異議份子和部分反對黨成員。某些報導指出,環保抗爭運動經常出現若干熟悉面孔,反核運動業已淪為政爭工具或政治談判籌碼。此一說法固然凸顯反核運動中的政治因素,卻忽略它之所以存在的理由。

同樣的反核運動,觀諸美,日各國,顯得更有理性而較少政治色彩。從另一個角度觀察,不難理解本土民眾對當前政治環境的不滿與無奈,進而以非政治訴求做為抗爭焦點的心理。移情作用與情緒上的反彈有其特殊意義存在,絕非「泛政治化」一詞所能解釋。這種逼迫者兼具被逼迫者的角色功能,莎士比亞在威尼斯商人中便有精湛的描繪。在此並非假藉威尼斯商人影射反核人士的抗爭結果,但是反核情緒如果持續高漲,到最後,付出代價的將是全體國民。


國人對核能的恐懼心理,有不少部分來自電廠的施工品質

就能源的選擇性而言,水力發電是「看天田」。天然氣價昂量少,絕非合理能源。煤炭很難完全燃燒,酸雨和燃煤的後遺症要花費極高的代價來控制。燃油存量有限,產生的二氧化碳對氣候造成嚴重影響。太陽能和海洋溫差發電仍在實驗階段,經驗、競爭性有待觀察。相形之下,核能發電的燃料成本低,技術成熟,對環境的影響亦較火力發電為少。經濟部長陳履安曾說「放棄核能發電將是一項不切實際的想法」,他對能源政策的考量,可能是官方說法中最接近現實的觀點,可惜聽得進去的立委和民眾似乎並不多。這種現象不能責怪民眾無知,只能說核能事故頻傳,使人喪失信心。

賓州三浬島事件,一般認為是核能工業由盛而衰的轉捩點,蘇俄車諾比電廠只是雪上加霜。其實美國核能工業早在一九七九年事故發生以前就開始衰退。喪失吸引力的原因,表相是建廠成本太高,骨裡卻是反應器的安全性受到質疑。輕水式反應器過份依賴外在的強制冷卻系統與工廠操作員的防護,而操作員與電機元件卻無法百分之百信賴。設計者只好以多種或重疊的支援系統來維護安全需求。這些非核系統如果不能發揮預期功能,理論上便會造成爐心的損害,所以不得不以嚴格的法規來約束,如此一來不但建廠成本大幅提高,電廠架構也越趨複雜。不幸的是,花錢仍不得消災,反應器熔毀事件接踵而至,也難怪電廠附近居民談核色變,誓死抵制。國人對核能的恐懼心理,除了設計上的顧慮以外,還有一樣大家寧可懷疑,卻不願公開談論的話題,那就是電廠的施工品質。

基於安全理由,以核能電廠及核燃料再處理廠為對象,一九七五年修訂的聯邦法規第十篇第五十款附錄B便明訂十八條準則,要求業主(如台電)負責品質保證方案的建立與執行,其中對於安全功能有影響的作業,例如設計、採購、製造、裝卸、運輸、儲存、清洗、組立、安裝、檢查、試驗、運轉、維護、修理、燃料填放與設備修改等均屬受限範圍。至於申請建廠許可所需的初期安全分析報告(PSAR)和完工後申請運轉執照的終期安全分析報告(FSAR)都必須詳述相關品質保證方案。換句話說,核能電廠是以「制度」來保證品質,一般製造業採用的統計品管在核能工業根本無法適用。情況如此,從業人員的素質與操守便成了品質良窳的關鍵所在。

核能電廠從設計到施工,大約七到十年。這段漫長的歲月裡,建廠人員面臨的不只是技術更新和法規適應性的問題。經手上千億元預算,最大的挑戰,恐怕還是來自紅色的誘惑和黑色的壓力。基於核能的敏感特性,建廠過程如果發生弊端,外界很難知悉。但是完工後如果動輒停機或是意外頻傳,難免讓人懷疑工程品質有了問題。其它因素如購煤疑案至今仍未澄清,要民眾坦然接受由台電前總經理朱書麟背書的核能品質保證,未免過於樂觀。


如果只能以限電來緩和能源短缺,電力事業不妨開放民營

專家指出核子反應器目前最大的困境並非不夠安全。任何不安全因素都可藉著變更設計和系統改善來加以克服。許多技術評估指出反應器對公眾健康和安全危害遠比想像為少。造成困境的原因乃是因為這些評估的理論基礎不夠嚴謹而且正確性也值得懷疑。

核子反應器目前正朝著規模縮小,設計簡化,意外事故發生時容易控制等方向加以改進。新一代反應器在概念上特別強調它的強制安全特性,這樣做的目的有幾個好處,第一、如果冷卻系統失效,核心因分裂產生的熱能會經由自然對流或熱輻射逸散。這種強制冷卻系統足以避免爐心損壞。第二、核能與非核能系統不再相互糾纏,有助於降低成本。第三、強制安全設計使安全評估變得單純而且比較正確。

核能工業的未來,寄望於降低成本和科技突破。重要的關鍵則在如何拆除現有的藩籬。以公權力壓制群眾抗爭並非善策。改善當前政治環境,落實民主憲政,絕對有助於疏解反核情緒。

電力在台灣是獨占事業,成本壓力微乎其微。在這種得天獨厚的條件下,台電所能做的當不只是以更坦誠,更開放的態度面對公眾而已。如果只能以限電來緩和能源短缺,電力事業不妨開放民營。


如果人類和潘朵拉一樣好奇?

六零年代和七零年代的登月計劃確屬當代創舉。目睹這項過程的人,當能體會從太空中回首地球的一剎那帶給人類的震憾絕不遜於阿姆斯壯在荒涼的月表踏出那一大步。看到微小,藍白相間,美麗卻顯得無助的地球在太空中飄浮,很少人不受感動。地球只是宇宙滄海中的一粟,這樣的認知,促使人類特別珍惜這塊土地。十八年來對自己賴以生存的環境充滿無限關愛。從當初夢想征服宇宙,到如今致力生態保護,這種過程的轉變,頗富意義。

諾貝爾經濟學獎得主,人工智慧研究者,赫伯‧賽門(Herbert A. Simon)認為科技是人類的知識,就像普羅米修斯從眾神盜取的火種,基本上是人所必需的。如果人類和潘朵拉一樣,忍受不了好奇心的誘惑,箱子打開,蓋不回去,災難和罪惡全跑出來,即使還有希望,後果仍舊不堪設想。當我們開發新的科技,不應把它視為征服自然或宇宙的武器而急著去應用。換句話說,即使知道某些東西的製造方法,最好還是稍安勿躁,至少應先了解該不該製造,能否收放自如。

核能科技使人類瀕於兩難,魚與熊掌能否兼得?核四用地一旦收回,無異宣告核能已死,放棄核能動力,對國人和後代子孫而言,是否明智之舉?普羅米修斯和潘朵拉的神話,或可帶給我們若干啟示。