112 地方特考三等 統計類科 資料處理 考古題詳解
第 一 題25 分
一、加密系統是面對資訊安全威脅的一項資訊技術防護措施。
(一) 請說明對稱性加密與非對稱性加密的區別。(10 分)
(二) 請以 https 協定的 SSL/TLS 為例,說明私鑰(Private Key)與公鑰(Public Key)的運作方式。(15 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查兩類密碼系統的金鑰配置、加解密方式與安全特性,以及 HTTPS 中 TLS 如何透過憑證與金鑰協商建立安全連線。HTTPS 並非單純以公鑰加密所有網頁資料,而是結合非對稱式密碼學與對稱式加密:前者用於驗證身分及協商工作階段金鑰,後者負責加密大量傳輸資料。
解題方法
作答可分兩部分:先比較對稱式與非對稱式加密的金鑰及效能;再依 TLS 握手流程,說明公鑰、私鑰、憑證及工作階段金鑰各自的用途。須特別區分「加密以保密」與「數位簽章以驗證來源及完整性」,也要避免把所有 TLS 版本都描述成固定使用 RSA 傳送金鑰。
(一)對稱式加密與非對稱式加密的區別
1. 對稱式加密
加密與解密使用相同的密鑰,或使用可由其中一把有效推得另一把的密鑰。傳送端與接收端必須事先安全地共享密鑰,再以該密鑰加密及解密資料。
例如,以密鑰 加密明文 得到密文 :
其優點是運算速度快,適合大量資料加密;缺點是雙方必須安全地交換與保存密鑰,且多方通訊時,如何為每一對通訊者管理密鑰也會增加負擔。常見演算法包括 AES。
2. 非對稱式加密
每位使用者有一組相關聯的公鑰與私鑰:公鑰可公開,私鑰則由持有人妥善保管。依用途不同,金鑰使用方式也不同:
- **保密傳輸:**傳送者以接收者的公鑰加密,只有持有對應私鑰的接收者能解密。
- **數位簽章:**簽署者使用自己的私鑰產生簽章,接收者使用簽署者的公鑰驗證簽章。
非對稱式運算通常比對稱式運算耗時,較不適合直接加密大量資料;其優點是可以公開公鑰,降低雙方事先秘密共享加密金鑰的需求,並能支援數位簽章。常見演算法包括 RSA、ECC;實際用途依演算法與協定而異。
3. 比較整理
| 比較項目 | 對稱式加密 | 非對稱式加密 |
|---|---|---|
| 金鑰配置 | 通訊雙方共享密鑰 | 每位使用者有公鑰與私鑰 |
| 加解密速度 | 快,適合大量資料 | 通常較慢 |
| 金鑰交換 | 須安全共享密鑰 | 公鑰可公開,私鑰須保密 |
| 常見用途 | 加密大量資料 | 身分驗證、金鑰協商、數位簽章等 |
(二)HTTPS 中 SSL/TLS 的公鑰與私鑰運作方式
1. 伺服器持有金鑰並提供憑證
HTTPS 伺服器持有一組公鑰與私鑰:公鑰放在伺服器的數位憑證中,私鑰則由伺服器安全保管。伺服器傳送憑證給瀏覽器,憑證由受信任的憑證機構(CA)簽署,可供瀏覽器確認憑證中的公鑰與網站身分之間的關聯。
第 二 題25 分
二、請透過下列三個有關期中考的資料表(Tables),使用 SQL 查詢「王教授」的課程編號 ID 為「A123」課程,其班級總分與最後一名的學生姓名。
( 代表 Teacher 資料表名稱; 代表 Student 資料表名稱; 代表 Exam 資料表名稱。)
Teacher[TeacherID,TeacherName,ClassID]
Student[StudentID,StudentName,ClassID]
Exam[ExamName,StudentID,Subject,Score]
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的多表連接、分組彙總與排序取值。題目要求找出「王教授」的 A123 課程中,班級總分最低的學生姓名。
題目未明確說明「班級總分」如何計算。以下依一般命題慣例,將同一學生在該課程各科目的 Score 加總,作為該生的班級總分;並假設 ExamName 的值為課程編號 A123。
解題方法
先從 Teacher 找出王教授所授、ClassID 為 A123 的班級,再透過 ClassID 連接 Student,取得該班學生。接著以 StudentID 連接 Exam,篩選該課程的考試資料,並依學生分組加總分數。最後依總分由低至高排序,取第一名,即為總分最低者。
第 三 題25 分
三、在人工智慧與機器學習領域,狀態空間表示一個問題的所有可能解的集合,如下圖所示。請從狀態 A 開始,以字母排序的先後順序,用兩種常用的演算法:廣度優先搜尋(Breadth-First Search, BFS)與深度優先搜尋(Depth-First Search, DFS),分別列舉搜尋的結果。(25 分)
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題考查圖形搜尋中的:
- 廣度優先搜尋(BFS):依距離起點的層級,由近而遠搜尋,使用佇列(Queue),遵守先進先出。
- 深度優先搜尋(DFS):沿著一條路徑盡可能深入,再回溯搜尋,使用堆疊(Stack)或遞迴。
- 當同一節點有多個未訪問鄰接節點時,依英文字母順序處理。
- 圖中各連線視為無向邊,且節點一旦訪問即標記,避免重複搜尋。
由圖可整理出主要鄰接關係:
此外:
解題方法
一、廣度優先搜尋 BFS
從 開始,先搜尋距離 為 的節點,再搜尋距離為 、距離為 的節點。
- 訪問 ,依序加入 。
- 訪問 ,沒有新的節點。
- 訪問 ,加入 。
- 訪問 ,加入 。
- 訪問 ,沒有新的節點。
- 訪問 ,加入 。
- 訪問 、;訪問 時加入 。
- 最後依序訪問 。
因此 BFS 搜尋結果為:
分層表示為:
二、深度優先搜尋 DFS
第 四 題25 分
四、請列舉「This is a book」中間有空格的連續字串,經過下列程式執行後,兩個 printf 的輸出內容。(25 分)
#include <stdio.h> #include <string.h>
void reverse(char str[], int start, int end) { char temp;
while (start < end) {
temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() { char str[] = "This is a book"; int len = strlen(str);
reverse(str, 0, len - 1);
printf("%s\n", str);
int word_start = 0;
for (int i = 0; i < len; i++) {
if (str[i] == ' ') {
reverse(str, word_start, i - 1);
word_start = i + 1;
}
}
reverse(str, word_start, len - 1);
printf("%s\n", str);
return 0;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言字串的儲存方式、strlen 的計算,以及利用反轉整個字串再反轉各單字,完成「保留單字原本順序、但反轉單字排列」的操作。
C 字串以空字元 '\0' 結尾。strlen(str) 計算字串中 '\0' 之前的字元數,不包含結尾的 '\0'。題目字串 "This is a book" 長度為 ,索引範圍是 到 。
解題方法
原字串依索引排列如下:
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 字元 | T | h | i | s | 空格 | i | s | 空格 | a | 空格 | b | o | o | k |
第一次呼叫 reverse(str, 0, len - 1),將索引 至 的全部字元反轉,因此第一個 printf 輸出: