---
title: 資安課程
tags: 研究所
---
## 第一章
### 資安的三大要件
- 關於電腦安全的三大要件通常指機密性(Confidentiality)、完整性(Integrity)和可用性(Availability),簡稱CIA三大要件,也被稱為資訊安全三要素。
1. 機密性(Confidentiality):指保護資訊免受未經授權的存取和披露,只有經過授權的人才能查看和使用相關資訊。保持機密性可以防止敏感資訊被竊取或濫用,例如:個人資訊、銀行卡號、密碼等。
2. 完整性(Integrity):指保護資訊不受未經授權的修改或破壞,確保資訊的正確性和完整性。保持完整性可以防止數據被意外或恶意地更改或刪除,例如:金融報表、交易紀錄等。
1. 資料完整性(Data Integrity)指的是在資料傳輸、存儲、處理的過程中,確保資料的準確性、完整性、一致性和有效性。
- 它可以通過使用數位簽章、加密、校驗和驗證等技術來實現,確保數據不被意外或恶意地更改、破壞或篡改。
- 資料完整性是確保數據可信和可靠的重要要素,尤其對於金融、醫療、法律等領域的數據更為關鍵。
2. 系統完整性(System Integrity)指的是保護系統免受未經授權的更改、破壞或破壞,確保系統的正常運作和可靠性。
- 這可以通過實施安全控制、限制訪問權限、實施防範措施來實現。
- 系統完整性與資料完整性相似,但是它關注的是整個系統的完整性,包括軟件、硬件、網絡和數據等,以確保系統的運行和數據的可靠性。系統完整性對於保護系統和數據免受攻擊和損壞非常重要。
3. 可用性(Availability):指保護資訊的正常運作和可靠性,確保系統和資訊可用和可訪問。保持可用性可以防止系統故障、拒絕服務攻擊等,確保系統和資訊的連續性和可用性。
- 在實際應用中,Authenticity 和 Accountability 經常被用來支援 CIA triad 中的 Integrity(完整性)和 Confidentiality(機密性)等概念,以提高資訊系統和數據的安全性和可信度。
1. Authenticity: 指的是確認使用者或系統的身份,確保其真實性和可信度,防止未經授權的人員或系統訪問和使用資源。常見的技術包括密碼學、雙因素驗證、數位簽章等。
2. Accountability: 指的是確保使用者或系統對其行為負責,確定其行為和責任,防止不當行為和犯罪行為。它可以通過日誌記錄、審計和監控來實現,並可以作為調查和法律追究的依據。
### FIPS PUB 199
- FIPS PUB 199:該標準提供了將信息和信息系統根據其面臨的風險程度進行分類的指導。該標準定義了三個安全目標:保密性、完整性和可用性。它還定義了可能對組織造成安全漏洞的三個潛在影響級別:低、中和高。這些影響級別基於安全漏洞對組織運營、資產或個人可能產生的不利影響程度。
- Low:損失可能對組織運營、組織資產或個人產生有限的負面影響。有限的負面影響可能表現為對組織的主要功能有一定程度和時間的降級,從而導致其功能效益受到明顯降低;對組織資產造成輕微損害;造成輕微的財務損失或對個人造成輕微的傷害。
- Moderate:損失可能對組織運營、組織資產或個人產生嚴重的負面影響。嚴重的負面影響可能表現為對組織的主要功能有顯著程度和時間的降級,從而導致其功能效益明顯降低;對組織資產造成重大損害;造成重大的財務損失;或對個人造成嚴重傷害,但不涉及生命或威脅生命的傷害。
- High:損失可能對組織運營、組織資產或個人產生嚴重或災難性的負面影響。嚴重或災難性的負面影響可能表現為對組織的主要功能有嚴重程度和時間的降級,從而導致其無法執行一個或多個主要功能;對組織資產造成重大損害;造成重大的財務損失;或對個人造成生命威脅的嚴重或災難性傷害。
### OSI(Open Systems Interconnection) 安全架構
> 由 ITU-T3 推薦的系統性方法,提供了一個有用的、抽象的概述。OSI安全架構聚焦於安全攻擊、機制和服務,
1. Security attack:指任何危及組織所擁有的信息安全的行為。
2. Security mechanism:一個設計用來偵測、防止或從安全攻擊中恢復的過程(或含有此類過程的設備)。
3. Security service:提高數據處理系統和組織的信息傳輸安全的處理或通信服務。這些服務旨在對抗安全攻擊,並利用一個或多個安全機制提供服務。
#### RFC 4949
1. Thread:是指可能利用漏洞造成損害的***潛在危險***
2. Atteck:攻擊是指源於有意識的威脅對系統安全的一種侵擾,即***有意識*** 的行為,旨在經由規避安全服務並違反系統安全策略的方法或技術。
### 安全攻擊
> 安全攻擊可分為被動攻擊和主動攻擊

#### 被動攻擊
- 被動攻擊:屬於竊聽或監視傳輸的性質。攻擊者的目標是獲取正在傳輸的信息。兩種類型的被動攻擊是消息內容的洩露和流量分析。
1. release of message content:是指敏感或機密信息在傳輸時被攻擊者獲取。
2. traffic analysis:是指攻擊者觀察消息的模式來猜測通信的性質。
<!-- make use of + N 利用 N -->
##### 被動攻擊防禦重點
- 被動攻擊非常難以檢測,因為它們不涉及任何數據的更改。
- 加密是防止被動攻擊的常見技術。
- 處理被動攻擊的重點是預防而不是檢測。
### 主動攻擊
> 主動式攻擊意指入侵者針對檔案或通訊內容進行偽造或修改,可能為以下四種攻擊型式之一或是採取混合方式進行
1. 偽裝 (Masquerade):偽裝是指攻擊者欺騙認證系統,非法取用系統資源。例如利用社交工程法騙取,或者利用網路竊聽的方式取得密碼後登入系統。
- 通常會混合其他種主動攻擊
2. 重播 (Replay):重播是指攻擊者將從網路上截取的某些通訊內容(如認證資訊)重新發送,以欺騙伺服器認證機制。常見的實例如早期 Windows 網路芳鄰採用雜湊方式 (Hash Function) 進行密碼的加密,入侵者若能截取獲得編碼後的密碼內容,可以利用重送一次的方式取得系統登入的授權。
3. 訊息竄改 (Message Modification):訊息竄改指攻擊者針對網路通訊的內容進行刪增或者更動。通訊劫奪(Session Hijacking)利用 TCP/IP 網路通訊的弱點,搶奪合法使用者的通訊頻道,進而獲得系統的操作權限,這種方式為訊息竄改的一個實例。
4. 服務阻絕 (Denial of Service):服務阻絕大概是大家最耳熟能詳的攻擊方式,攻擊者透過各種可能的方法 (ICMP flooding、SYN Flooding、Mail Bomb)等等方式使得使用者與管理者無法取得系統資源及服務。
### 安全服務
> X.800定義的十四個具體安全服務
1. 資料機密性 (Data Confidentiality) 是指防止資料在未經授權的情況下被揭露。根據保護的範圍,又可以區分為連線機密性、非連線機密性、選擇性欄位機密性和流量機密性。
1. Connection Confidentiality(連接保密性):保護連接上的所有使用者資料。
- 這個廣泛的保護可以防止任何在 TCP 連接上傳輸的用戶數據被洩露。也可以定義更狹窄的形式,包括保護單個消息甚至消息內的特定字段。這些細化比廣泛的方法更少用,甚至可能更加複雜和昂貴
2. Connectionless Confidentiality(無連接保密性):保護單個資料塊中的所有使用者資料。
3. Selective-Field Confidentiality(選擇欄位保密性):保護連接上或單個資料塊中的特定欄位的機密性。
4. Traffic-Flow Confidentiality(流量保密性):保護可能從觀察流量中得出的資訊。
- 是指保護流量不被分析的能力。這需要攻擊者無法觀察通信設施上的流量來源和目的地、頻率、長度或其他特徵
2. 資料完整性 (Data Integrity) 則是指確保接收到的資料和被授權的寄件者所傳送的完全相同,未經修改、插入、刪除或重播。這個服務又可以區分為帶回復的連線完整性、不帶回復的連線完整性、選擇性欄位連線完整性、非連線完整性和選擇性欄位非連線完整性。
- 是否連接
- 連接導向的完整性服務可以保證消息被接收和發送時沒有重複、插入、修改、重新排序或重放。此服務還包括數據的破壞。因此,連接導向的完整性服務同時解決了消息流修改和服務拒絕的問題。另一方面,無連接的完整性服務通常僅提供對消息修改的保護,而不考慮任何更大的上下文。
- 是否恢復
1. 連接完整性(帶有恢復):提供連接上所有使用者數據的完整性,檢測任何數據序列中的修改、插入、刪除或重播,並嘗試恢復。
2. 連接完整性(無恢復):與上述相同,但僅提供檢測,不提供恢復。
3. 選擇性場連接完整性:提供在傳輸到連接上的使用者數據中選定字段的完整性,以確定選定字段是否已被修改、插入、刪除或重播。
4. 無連接完整性:提供單個無連接數據塊的完整性,可能采用檢測數據修改的方式。此外,還可能提供一種有限的重播檢測形式。
5. 選擇性場無連接完整性:提供單個無連接數據塊中選定字段的完整性,以確定選定字段是否已被修改。
3. 身分驗證 (Authentication) 則是確保通訊實體是所聲明的實體,透過同行實體驗證和資料來源驗證來實現。
1. 對等實體身分驗證:在邏輯連線中使用,以確認已連接的實體的身分。
2. 資料來源身分驗證:在無連線傳輸中使用,提供接收到的資料來源是正確的保證。
- 資料來源驗證是指證實資料單元的發送源頭
- 這種服務不提供防止資料單元重複或修改的保護
- 它支援像電子郵件這樣的應用,其中通信實體之間沒有先前的互動
4. 存取控制 (Access Control) 則是防止未經授權的使用資源,它控制誰可以存取資源、在什麼情況下可以存取資源以及存取資源的使用者可以做什麼。
- 限制和控制通過通信連接對主機系統和應用程序進行訪問的能力。為了實現這一點,每個試圖獲得訪問權限的實體必須首先進行身份識別或驗證,以便將訪問權限量身定制給個人
1. 預防未經授權使用資源,控制誰可以存取資源,以及在什麼條件下可以存取資源,以及存取資源的人可以做什麼
5. 不可否認性 (Non-repudiation) 是指某一資料的作者無法否認資料是由他所作,或是無法否認相關契約的合法性。此用語也用在法律上,多半會出現在某簽名的真實性被質疑的情境 [維基百科](https://zh.wikipedia.org/zh-tw/%E4%B8%8D%E5%8F%AF%E5%90%A6%E8%AA%8D)
- 不可否認性防止發送方或接收方否認傳輸的消息。因此,當發送消息時,接收方可以證明所述發送方實際上發送了該消息。同樣地,當接收消息時,發送方可以證明所述接收方實際上收到了該消息。
### 安全機制
#### specific security mechanisms
1. Encipherment:使用數學算法將數據轉換為不易理解的形式,取決於算法和一個或多個加密密鑰。
2. Digital Signature:附加到數據單元上的數據或數據單元的加密轉換,使數據單元的接收者可以證明數據單元的來源和完整性,並保護免受偽造(例如,由接收者)。
3. Access Control:強制執行對資源的訪問權限的各種機制。
4. Data Integrity:用於保證數據單元或數據單元流的完整性的各種機制。
5. Authentication Exchange:通過信息交換來確定實體的身份的機制。
6. Traffic Padding:在數據流中插入位元,以阻止交通分析嘗試。
7. Routing Control:使某些數據選擇特定的物理安全路線,並允許路由更改,特別是在懷疑安全漏洞時。
8. Notarization:使用可信第三方來確保數據交換的某些屬性。
#### pervasive security mechanisms
1. Trusted Functionality 是指對於某些標準(例如安全策略)被認為是正確的。
2. Security Label 是指標記與資源(可能是資料單元)相關聯,以命名或指定該資源的安全屬性。
3. Event Detection 是指偵測安全相關事件。
4. Security Audit Trail 是指收集並可能用於促進安全審核的資料,安全審核是對系統記錄和活動的獨立審查和檢查。
5. Security Recovery 處理來自機制(例如事件處理和管理功能)的請求並採取恢復措施。
#### 差異
1. 特定安全機制:是為了提供單一安全服務而開發的,並且通常只能在特定的協議層實現。
- 加密機制是一種特定的安全機制,因為它只是用於提供加密服務
3. 普遍安全機制:不特定於任何特定的安全服務或協議層,而是應用於多個安全服務和協議層。
- 而安全標籤是一種普遍的安全機制,因為它可以應用於多個安全服務,例如存取控制和流量填充。
#### Machanisms 與 Security Services 之間的關係
- 安全服務和安全機制是維護系統安全的兩個主要方面。安全服務提供了一系列的目標。為了實現這些目標,需要使用不同的安全機制。這些安全機制在不同的協議層上實現,可以用來提供特定的安全服務。因此,安全機制實現了安全服務的目標。
### 基礎安全設計原則
-
- 


### Attack tree Attack Surfaces
- 提供評估和分類的概念
#### Attack Surfaces
- 攻擊面主要可分為三個類別
1. 網路攻擊媒介:此類攻擊發生在企業網絡、廣域網絡或互聯網上,其中包括各種網絡協議漏洞,如用於拒絕服務攻擊、破壞通訊鏈路和各種形式的入侵攻擊。
2. 軟體攻擊媒介:此類攻擊是針對應用程序、實用工具或操作系統代碼的漏洞。這類攻擊的特點是針對網絡伺服器軟體的攻擊。
3. 人員攻擊媒介:此類攻擊是由人員或外部人員所創造的漏洞,如社交工程、人為錯誤和信任內部人員等。這種攻擊利用人類的心理弱點,經常需要社交工程手段,如欺騙、誘騙、偽裝等技術。
#### Attack tree
- 攻擊樹是一種階層結構,用於表示利用安全漏洞的潛在技術。每個節點表示一個子目標,支枝可以標記難度、成本或其他攻擊屬性的值。攻擊樹有助於記錄安全攻擊。
- 是一种安全风险评估工具,用于表示攻击者实现目标所需的各种方法和步骤。攻击树通常从攻击者的最终目标开始,然后逐步列出实现该目标所需的所有可能方法,每个方法都是攻击树的一个分支节点。攻击树的末端通常是攻击者成功实现目标的结果节点。攻击树的主要目的是帮助安全专业人员了解攻击者的思考过程和攻击过程中可能的漏洞,以及采取相应的防御措施。
- 五種攻擊策略分別為用戶憑證破解、命令注入、用戶憑證猜測、安全策略違規和使用已知身份驗證會話
- 以網路銀行系統所面臨的安全威脅為例
1. 使用者憑證被破解:攻擊者可以透過不同的方法竊取使用者憑證,包括監控使用者操作、竊取晶片卡或手寫筆記、破解晶片卡等。攻擊者也可以嵌入惡意軟體竊取使用者登入資訊,或透過通訊管道嗅探等方式竊取憑證資訊。
2. 注入指令:攻擊者能夠攔截使用者終端和網上銀行服務器之間的通訊,並利用各種方式冒充合法用戶,以獲取訪問銀行系統的權限。
3. 使用者憑證猜測:有些銀行身份驗證方案容易遭受暴力破解攻擊,攻擊者可以利用分佈式僵屍計算機來發送隨機用戶名和密碼。
4. 安全政策違反:員工可能會違反銀行的安全政策,並通過弱的訪問控制和記錄機制,導致內部安全事件,從而曝露客戶的帳戶。
5. 使用已知的驗證會話:攻擊者誘導或強制使用者使用預設的驗證會話 ID 連接到網上銀行服務器,一旦使用者向服務器進行驗證,攻擊者就可以利用已知的會話 ID 來傳送假冒用戶身份的封包。
### 網路安全模型
■ 針對要傳送的信息進行安全相關的轉換。例如,對消息進行加密以混淆對手無法閱讀,或是加入基於消息內容的代碼,可用於驗證發送者的身份。
■ 兩個交易雙方共享的秘密信息,希望對手不知道。例如,密鑰可與轉換一起使用,以在傳輸前對消息進行加密,並在接收後對其進行解密。
主要分為四大塊
設計一個執行安全相關轉換的演算法。演算法應該是對手無法打敗其目的的。
產生用於演算法的秘密信息。
開發秘密信息的分發和共享方法。
指定兩個主體使用安全演算法和秘密信息實現特定安全服務的協議。
因此,為了實現安全傳輸,可能需要一個可信的第三方,例如分發秘密信息給兩個主體,同時將其隱藏在任何對手的攻擊之外,或者需要一個第三方來仲裁兩個主體關於消息傳輸真實性的爭議。
另一種不受歡迎的訪問方式是在計算機系統中放置利用系統漏洞並影響應用程序和輔助程序(如編輯器和編譯器)的邏輯。程序可以提出兩種威脅:
■ 信息訪問威脅:代表不應訪問該數據的用戶截取或修改數據。
■ 服務威脅:利用計算機中的服務漏洞,阻礙合法用戶的使用。
病毒和蠕蟲是軟件攻擊的兩個例子。這些攻擊可以通過包含非法邏輯的磁盤引入系統。它們也可以通過網絡插入系統;後一種機制在網絡安全中更加令人擔憂。
應對不受歡迎的訪問所需的安全機制可分為兩大類。第一類可以稱為門戶守衛功能。它包括基於密碼的登錄程序,旨在拒絕所有未經授權的用戶訪問,以及設計用於檢測和拒絕蠕蟲、病毒和其他類似攻擊的篩選邏輯。一旦不受歡迎的用戶或軟件獲得訪問權限,第二道防線包括各種內部控制,以監控活動並分析存儲的信息,試圖檢測不受歡迎的入侵者的存在。這些問題在第六部分中進行了探討。
標準ㄋ
■ National Institute of Standards and Technology 美國國家標準技術研究所:NIST 是一個美國聯邦機構,處理與美國政府使用和促進美國私營部門創新相關的測量科學、標準和技術。儘管其範圍為國家級,但 NIST 的聯邦信息處理標準(FIPS)和特別出版物(SP)具有全球影響力。
■ Internet Society 互聯網協會:ISOC 是一個具有全球組織和個人會員的專業會員協會。它在解決面臨互聯網未來的問題方面提供領導力,並是負責互聯網基礎設施標準的團體的組織機構,包括互聯網工程任務組(IETF)和互聯網架構委員會(IAB)。這些組織開發互聯網標準和相關規範,所有這些都作為評論請求(RFC)發布。
■ ITU-T:國際電信聯盟(ITU)是聯合國系統內的一個國際組織,在其中政府和私營部門協調全球電信網絡和服務。ITU 電信標準化部門(ITU-T)是 ITU 的三個部門之一。ITU-T 的使命是制定涵蓋電信所有領域的技術標準。ITU-T 標準稱為建議。
■ ISO:國際標準化組織(ISO)是來自超過 140 個國家的國家標準機構
第二章
主要在講除法議題例如:整除、餘數、同餘問題
這裡在離散數學中的模同餘問題那邊有
歐幾里得演算法其實就是輾轉相除法,配合達芬奇公式,可以得到同餘的公式
mod 在有限整數群的性質
1. 交換律
2. 結合律
3. 分配律
4. 單位元素
5. 反元素
Euclidean Algorithm 可以求出最大公因數
Euclidean Algorithm Revisited 可以討論出最小公倍數



### 質數 prime number




### 費馬小定理


### 尤拉公式

p q 要為質數
### 尤拉定理

### Miller-Rabin Test



1. 在2002年之前,没有已知的有效方法来证明非常大的数字的素性。
2. AKS算法是一种相对简单的确定性算法,可有效确定给定的大数是否为素数,但在效率上不如Miller-Rabin算法。
3. 素数定理指出,靠近n的素数平均间隔一个ln(n)个整数。因此,平均而言,需要测试大约ln(n)个整数才能找到一个质数。但在数字线的不同位置,素数密度可能会有所不同。
4. 在使用Miller-Rabin测试或其他素性测试之前,可能会拒绝很多数字才能找到一个质数。因为所有的偶数都可以立即被拒绝,所以正确的数字是0.5ln(n)。
5. Miller-Rabin算法是一种概率性算法,用于确定给定的数字是否为质数。
## 第三章
- 對稱式加密
> 對稱加密模型,是一種基於對稱密鑰的加密模型。在對稱加密模型中,使用相同的密鑰進行加密和解密操作。因此,對稱加密模型也被稱為共享密鑰模型或私鑰加密模型。
- 對稱式加密組成五部分
- 明文(plaintext):需要進行加密的原始訊息,也稱為明文。
- 密鑰(key):在對稱式加密中,使用相同的密鑰進行加密和解密操作。密鑰的長度是保密的關鍵,因為破解密鑰意味著可以解密所有的加密訊息
- 加密算法(encryption algorithm):對稱式加密使用特定的算法將明文轉換成密文。常見的對稱式加密算法包括DES、AES和RC4等。
- 密文(ciphertext):經過加密算法處理後的訊息,也稱為密文。
- 解密算法(decryption algorithm):對稱式加密使用特定的算法將密文轉換回明文。解密算法必須與加密算法相對應,以確保可以正確地解密密文
### 實例
1. 網絡通信:常用的對稱式加密協議有 SSL/TLS、IPSec 和 SSH 等,它們可以加密網絡通信中的數據,以保護數據的安全性和隱私。
2. 文件儲存:許多操作系統和應用程序都提供了對稱式加密的文件儲存功能,例如 BitLocker 和 FileVault 等,這些工具可以將文件加密以保護其機密性和完整性。
3. 數據庫:對稱式加密也可用於數據庫中的安全性保護,例如 Oracle 的 Transparent Data Encryption、Microsoft SQL Server 的 Always Encrypted 等,這些工具可以對數據庫中的數據進行加密,以保護其隱私性和機密性。
### 對稱式加密模型存在的問題
1. 密鑰管理:對稱式加密需要保護密鑰的保密性,如果密鑰被盜取或泄露,則加密的數據也會失去保護。
2. 無法實時處理流式數據:對稱式加密一般是針對固定大小的塊進行處理,無法實時加密和解密流式數據,這是對稱式加密的一個局限。
3. 無法實現安全的遠程訪問:對稱式加密需要共享密鑰,而這樣會使得密鑰在遠程訪問時面臨風險,且需要進行安全地分發和管理。
### 加密系統
1. 明文轉換為密文的方式,一般有代替和置換兩種方法,要求轉換過程可逆。大多數系統會使用多階段代替和置換,稱為產品系統。
2. 使用的密鑰數量,若發送者和接收者使用相同的密鑰,則稱為對稱加密;若發送者和接收者使用不同的密鑰,則稱為非對稱加密。
3. 明文處理的方式,區塊加密會將輸入分成一個個區塊進行處理,每個輸入區塊都會對應一個輸出區塊;串流加密會連續處理輸入元素,每處理一個元素就會產生一個輸出元素。
#### 攻擊手段
1. Cryptanalysis 是通過分析加密算法和密文的統計特徵等信息,尋找加密弱點以破解密文或密鑰。Cryptanalysis 可以分為被動攻擊和主動攻擊兩種。被動攻擊指攻擊者只能觀察密文,不能改變或注入信息;主動攻擊則允許攻擊者進行一定的操作,例如發送特定的加密內容。Cryptanalysis 可以有以下不同的方法:
1. Frequency analysis:根據字母、單詞、短語等出現頻率的統計特徵,推測密文中的**明文內容**。
2. Known-plaintext attack:攻擊者擁有一些**已知的密文**和**對應的明文**,利用這些信息來**推測密鑰**。
3. Chosen-plaintext attack:攻擊者可以選擇自己的**明文**,加密後**觀察密文**來**推測密鑰**。
4. Differential cryptanalysis:通過**觀察密文的微小變化**來**推測密鑰**。
5. Linear cryptanalysis:利用**密文和明文之間的線性關係**,**推測密鑰**。
2. Brute-Force Attack 是一種暴力攻擊,它嘗試使用所有可能的密鑰進行解密,直到找到正確的密鑰為止。由於 Brute-Force Attack 需要尝试大量的密钥,因此需要消耗大量的计算时间和计算资源。不同的 Brute-Force Attack 方法包括:
1. Exhaustive key search:從密鑰空間中逐一嘗試每一個可能的密鑰,直到找到正確的密鑰為止。
2. Dictionary attack:使用預先構建的密碼庫或單詞表,逐一嘗試每個單詞或短語作為密鑰進行解密。
3. Rainbow table attack:使用預先計算的彩虹表來進行密鑰搜尋,這樣可以加快攻擊速度。
4. Side-channel attack:通過側通道攻擊加密算法,例如測量加密設備的功耗、電磁輻射、時鐘頻率等來推測密鑰。
- 什麼是彩虹表
- 用於破解哈希函數加密的密碼
- 彩虹表是一種用於破解密碼的攻擊方法,它通過建立一個巨大的預先計算的數據表,能夠在短時間內將哈希值與原始數據相匹配。它通常用於破解較短的密碼,因為隨著密碼長度的增加,彩虹表所需的存儲空間和計算時間也會增加。
### 攻擊種類
1. 僅密文攻擊(Ciphertext Only):攻擊者僅擁有加密後的訊息,沒有任何其他信息。
2. 明文已知攻擊(Known Plaintext):攻擊者擁有一個或多個已知的明文和其相應的密文
3. 選擇明文攻擊(Chosen Plaintext):攻擊者可以選擇一個明文消息,並得到相應的密文。
4. 選擇密文攻擊(Chosen Ciphertext):攻擊者可以選擇一個密文消息,並得到相應的解密明文。
5. 選擇文攻擊(Chosen Text):攻擊者同時可以選擇明文和密文消息,並得到相應的加密密文和解密明文。
- 「計算上安全」(computationally secure)是指在現有計算資源下,無法在合理時間內破解密文的加密演算法。也就是說,破解此演算法所需要的計算複雜度是超出當前可用計算資源的範圍,破解所需時間可能需要數十年、數百年甚至更長時間,因此可以認為此加密演算法是安全的。但要注意,當計算資源變得更強大時,曾經被認為是計算上安全的加密演算法,可能在未來被攻擊者成功破解。
- unconditionally secure 是指加密方案不管運用多少密文,都無法從密文獨立地推出唯一對應的明文,除了一種被稱為「一次性密鑰」(one-time pad)的方案,沒有其他的加密演算法是完全無條件安全的
### 替換技術
- Caesar Cipher
- 將明文中的每個字母按照一定的位移量向右(或向左)移動,來生成密文
- 有資安疑慮
1. 加密和解密算法是已知的。這意味著我們可以分析算法並了解它們如何運作,進而設計攻擊來破解密碼。
2. 可能的密碼只有25個。因為凱薩密碼是一種替換式加密,只有26個字母,因此只有25種可能的密碼。這意味著我們可以通過暴力破解攻擊來嘗試所有可能的密碼,以破解密碼。
3. 明文的語言已知並且容易識別。這對於破解密碼非常有用,因為在某些語言中,某些字母或字母組合的出現頻率比其他語言更高或更低。例如,在英語中,字母E是最常見的字母,而字母Z則是最不常見的字母。因此,通過分析密文中字母出現的頻率,可以幫助我們推斷出可能的密碼。
- Monoalphabetic Ciphers
- 單字母替換密碼(Monoalphabetic Cipher)是一種替換式加密方法,其中明文中的每個字母都被替換成固定的密文字母,使用相同的替換規則。例如,使用凱薩密碼,明文中的每個字母都會向右偏移幾個位置,而使用單字母替換密碼,每個字母都被替換成另一個字母,例如,明文中的每個A都被替換成密文中的X,明文中的每個B都被替換成Y
- 組合的可能性是階乘等級,但在特定情況下可以透過字母頻率分析,找出共通點
- 兩中方法可以提升安全性
1. 第一種方法是加密多個明文字母,這意味著一個密碼字母可以代表多個明文字母,例如,使用多音字或者符號替換明文字母,從而減少密文中相同字母出現的頻率,增加密文的難度
2. 第二種方法是使用多個密碼字母表,這意味著不同的明文字母可以對應到不同的密碼字母表中的字母,從而增加密文的變化性和難度。這兩種方法可以單獨使用,也可以結合使用。
- Playfair Cipher
- 
- 前置步驟
1. 選取一個英文字作密鑰。除去重覆出現的字母。將密鑰的字母逐個逐個加入5×5的矩陣內,剩下的空間將未加入的英文字母依a-z的順序加入。(將Q去除,或將I和J視作同一字。)
2. 將要加密的訊息分成兩個一組。若組內的字母相同,將X(或Q)插入兩字母之間,重新分組(例如 HELLO 將分成 HE LX LO)。若剩下一個字,也加入X字。
- 置換步驟
1. 在每組中,找出兩個字母在矩陣中的地方。
2. 若兩個字母不在同一直行或同一橫列,在矩陣中找出另外兩個字母,使這四個字母成為一個長方形的四個角。
3. 若兩個字母在同一橫行,取這兩個字母右方的字母(若字母在最右方則取最左方的字母)。
4. 若兩個字母在同一直列,取這兩個字母下方的字母(若字母在最下方則取最上方的字母)。
- Hill Cipher5
- 主要以矩陣去做加密解密(該矩陣必須為可逆矩陣,才能用同一矩陣做解密)
- Polyalphabetic Ciphers
- 通過使用多個密碼字母表和密碼子鍵來繞過頻率分析攻擊
- Vigenere Cipher
- 明文: H E L L O
- 關鍵字: K E Y K E
- 密鑰: 10 4 24 10 4
- 密文: R I X V S
- One-Time Pad
- 是一種非常安全的加密方法,也被稱為“完美加密”。它使用一個隨機的秘密金鑰來加密消息,該秘密金鑰必須與消息具有相同的長度
- 优点:
- 安全性极高,因为密文与密钥之间的关系是完全随机的,攻击者无法利用任何统计分析方法破解。
- 可以安全地用于远程通信,因为攻击者即使截获了密文也无法获得有用的信息。
- 密码本身不会因为攻击而变得更脆弱,因为密钥是完全随机的,不需要更新。
- 缺点:
- 密钥必须和明文一样长,因此在传输和存储方面需要更多的资源。
- 密钥的生成和管理必须是安全的,否则一次性密码的安全性就会被破坏。
- 密钥只能使用一次,因此需要大量的密钥才能保证长期的加密通信。
- 轉位技術(Transposition Techniques)
- 是一種密碼學中的加密方法,通過重新排列原始消息中的字母或符號,以產生加密的消息。轉位技術的特點是保留原始消息的字母或符號,只是重新排列它們的位置。轉位技術與替換技術不同,替換技術是用一個字母或符號替換另一個字母或符號,而不改變它們在消息中的位置。
- 儘管轉位技術相對容易實現,但它的安全性通常比替換技術較低,因為密文中的字母或符號保持不變,只是它們的位置改變,攻擊者仍然可以通過分析字母或符號的分佈情況進行攻擊。因此,為了提高安全性,轉位技術常與替換技術結合使用,以形成更強的加密方法。
- Rail Fence Cipher
- 
- ROTOR MACHINES
- Enigma
- 在Enigma中,Rotor是一个机械转子,它是用来改变明文字母的加密映射。转子由一组接线板(Wiring)和轮转设置(Stepping)组成。
- 首先,当操作员输入明文字符时,它通过接线板进行替换。然后,这个字符会进入转子,并在转子上按特定的顺序通过不同的接线板。这样,在一个转子中,同一个字母的加密映射可以根据转子的位置而不同。转子完成映射后,加密字符继续通过下一个转子,直到通过所有的转子。
- 最后,加密字符通过反射器(Reflector)进行反射,再次穿过所有的转子,但是这次是按照相反的顺序。最终输出的字符是由反射器输出的,这个字符是明文字符的加密版本。
- 隱寫術(Steganography)是一種將秘密信息隱藏在其他非秘密信息中的技術。與加密不同,隱寫術不是將數據加密以保護其機密性,而是將其隱藏起來,使其對於潛在的攻擊者不可見。
- 隱寫術
- 的歷史可以追溯到古代。在過去,人們曾使用各種方法來隱藏訊息,例如將訊息刻在木片中,或使用不同的墨水顏色和字體來藏匿訊息。現代隱寫術則通常使用數字技術和計算機,例如將秘密信息嵌入數字影像或音頻文件中。
- 隱寫術在現代通訊中有廣泛的應用。例如,一些人可能會使用隱寫術在圖像、影像或音頻中隱藏秘密信息,以逃避監控或控制。此外,隱寫術也可以用於數字水印和版權保護等方面。然而,隱寫術也可能被用於非法目的,例如隱藏病毒或恶意软件等。
- 需要注意的是,隱寫術並不能提供絕對的安全性。攻擊者可能會猜測到隱藏的信息存在,並採取各種方法來破解隱藏的訊息。因此,在使用隱寫術時,仍需要搭配其他安全措施以確保信息的安全性。
1. 電子郵件隱寫術:隱藏在電子郵件正文或附件中的隱寫術。例如,在一張圖片中隱藏文本或其他圖片。
2. 數字隱寫術:隱藏在數字中的隱寫術,例如,修改像素的最低有效位數,以便存儲秘密訊息。
3. 音頻隱寫術:隱藏在音頻中的隱寫術,例如,將秘密訊息嵌入到聲音文件中的特定頻率或幅度中。
4. 文件隱寫術:隱藏在檔案中的隱寫術,例如,將秘密信息嵌入到PDF文件或Word文檔中的元數據中。
## Block Ciphers and the Data Encryption Standard
- TRADITIONAL BLOCK CIPHER STRUCTURE
- 傳統的分組密碼是將明文分為固定大小的塊,每個塊都獨立地進行加密。在分組密碼中,密文的長度與明文塊的長度相同,且每個密文塊都取決於相應的明文塊和密鑰。在對明文進行加密之前,它被切分成固定大小的塊。加密過程中,每個明文塊都使用相同的密鑰進行加密。每個加密塊都獨立地處理,而且加密的結果不會影響後續加密塊的運算。最後,所有加密塊組合在一起形成最終的密文。
- 傳統分組密碼的結構一般包括兩個主要的部分:置換(Permutation)和替換(Substitution)。在置換階段中,密文塊中的位元根據某個規則進行重新排列,以破壞原始的明文結構。在替換階段中,置換後的位元經過某種函數進行運算,以生成最終的密文。整個過程是迭代的,通常由多輪完成,每輪使用不同的密鑰。
- DES
- Data Encryption Standard (DES)資料加密標準
- 
- AES
- Advanced Encryption Standard(AES)進階加密標準
- 明文(Plaintext):需要加密的原始資料。
- 密鑰(Key):用於加密和解密資料的秘密金鑰。在傳統區塊加密中,加密和解密使用相同的密鑰。
- 區塊(Block):明文被分成固定大小的區塊,通常是64位元或128位元。
- 加密函式(Encryption Function):將明文區塊和密鑰作為輸入,並生成對應的密文區塊。
- 解密函式(Decryption Function):將密文區塊和密鑰作為輸入,並生成對應的明文區塊。
### Stream Ciphers and Block Ciphers
- 流加密演算法(Stream Ciphers):
- 流加密演算法將明文和密鑰視為連續的位元流,並逐位元地對明文進行加密或解密。
- 它將密鑰透過擴展密鑰生成一個無限長的密鑰流(keystream),並將該密鑰流與明文進行位元級別的運算(如異或運算)以生成密文。
- 解密過程類似,使用相同的密鑰流與密文進行位元級別的運算以還原明文。
- 流加密演算法通常速度快,適合用於大量數據的即時加密。
- 實例
- RC4(Rivest Cipher 4)在過去被廣泛使用,但隨著時間推移,它的安全性受到了一些漏洞和攻擊的影響
- 區塊加密演算法(Block Ciphers):
- 區塊加密演算法將明文分成固定大小的區塊(如64位元或128位元),並對每個區塊進行加密或解密。
- 每個區塊都使用相同的密鑰進行獨立的加密運算,並生成相應的密文區塊。
- 解密過程則是將密文區塊使用相同的密鑰進行獨立的解密運算,以還原明文區塊。
- 區塊加密演算法通常更安全,能夠處理較小的數據塊,適用於檔案加密和數據庫加密等應用。
- 差異
- 資料處理:
- 流加密演算法:流加密演算法逐位元或逐位元組地加密資料,產生連續的密鑰流(keystream)。它們將密鑰流與明文進行位元級或位元組級的運算,生成密文。
- 區塊加密演算法:區塊加密演算法將明文分成固定大小的區塊,通常是位元組或位元的形式。每個區塊使用相同的密鑰進行獨立的加密操作,生成相應的密文區塊
- 加密效率:
- 流加密演算法:流加密演算法通常速度較快,適合對大量資料進行即時加密,例如網路通信中的流量加密。
- 區塊加密演算法:區塊加密演算法通常較慢,因為它們需要處理固定大小的區塊,適用於檔案加密和數據庫加密等需要對整個區塊進行操作的情境。
- 安全性:
- 流加密演算法:流加密演算法的安全性主要依賴於生成的密鑰流的隨機性和不可預測性。如果密鑰流存在任何模式或相關性,則可能容易受到攻擊。因此,在設計和使用流加密演算法時需要特別關注密鑰生成和管理的安全性。
- 區塊加密演算法:區塊加密演算法的安全性主要取決於演算法本身的強度和密鑰的長度。目前被廣泛使用的區塊加密演算法,如AES,被認為是非常安全和抗攻擊的。
- 費斯特爾密碼(Feistel Cipher)
- 對稱式加密方法
- 廣泛應用於許多加密算法,如DES(Data Encryption Standard)和Blowfish。
- 替代(Substitution):每個明文元素或元素組都被對應的密文元素或元素組唯一替換。在替代步驟中,明文中的每個元素或元素組都被轉換成對應的密文元素或元素組。這種轉換可以是基於固定的替換表,也可以是根據密鑰生成的動態替換。
- 置換(Permutation):將明文元素序列替換為該序列的一個置換。也就是說,序列中的元素不增加、不刪除、不替換,而是改變元素在序列中出現的順序。
- 優點
1. 簡單而有效:費斯特爾密碼的結構相對簡單,容易實現並且運算速度較快。
2. 安全性可調節:通過增加輪數和提高密鑰的長度,可以增加費斯特爾密碼的安全性。
3. 可結合不同的加密演算法:費斯特爾密碼可以與各種不同的加密演算法結合使用,從而構建更強大的加密算法。
- 操作步驟
將明文分成兩個相等大小的區塊(通常稱為左半部分和右半部分)。進行多輪的運算,每輪包括以下步驟:
1. 將右半部分作為輸入,經過加密演算法進行加密運算。
2. 將加密後的結果與左半部分進行位元級別的運算(通常是異或運算)。
3. 交換左半部分和右半部分的位置(右半部分成為下一輪的左半部分)。
4. 經過多輪的運算後,最後一輪的加密結果就是最終的密文。
- Diffusion and Confusion
- 擴散(Diffusion):指的是在加密過程中,每個明文位元的變化應該在密文中得到廣泛和複雜的傳播。也就是說,單個明文位元的改變應該影響到多個密文位元,從而使密文中的統計特性不再與明文相關聯,增加密文的隨機性和不可預測性。
- 混淆(Confusion):指的是在加密過程中,將明文和金鑰之間建立複雜的映射關係,使密文中的每個位元都能夠依賴於明文和金鑰的多個位元。這樣做可以模糊密文中的任何統計結構,增加密文和金鑰之間的不確定性,使密碼分析者難以猜測和推斷出正確的金鑰。
- 在費斯特爾密碼的設計中還有兩個考慮因素:
- 快速的軟體加密/解密:在許多情況下,加密被嵌入到應用程式或實用工具功能中,以排除硬體實現的可能性。因此,算法的執行速度變得很重要。
- 易於分析:雖然我們希望使我們的算法在密碼分析方面盡可能困難,但使算法易於分析也有很大的好處。也就是說,如果算法能夠簡明清晰地解釋,就更容易對該算法進行密碼分析漏洞的分析,從而對其強度有更高的保證。例如,DES(資料加密標準)就不具備易於分析的功能。
### 資料加密標準(Data Encryption Standard,縮寫為DES)
- 是一個對稱密碼學的區塊加密算法,最早由IBM於1970年代開發,後來被美國國家標準局(NIST)采用並正式公布為聯邦資料處理標準(FIPS)。
- DES使用Feistel密碼結構,以 64 位元的區塊大小和 56位元的密鑰進行加密。它將明文分成兩個 32 位元的半區塊,通過一系列的 16 輪加密運算產生密文。每輪使用不同的輪金鑰,進行替換和置換操作,以達到擴散和混淆的效果。DES的核心操作包括位元置換、S盒替換、循環位移和互斥或(XOR)運算。
#### 雪崩效應(Avalanche Effect)
- 是指在加密算法中,即使原始資料發生微小的改變,其加密結果應該會產生巨大的差異。這意味著密文的每一個位元都應該對明文的每一個位元具有高度的依賴性,以至於即使改變一個位元,也會在密文中引起廣泛的變化。
- 當加密算法具有良好的雪崩效應時,它提供了保護資料完整性和安全性的重要特性。以下是幾個關鍵點:
1. 傳播性:當明文中的一個位元發生變化時,這種效應應該能夠迅速地傳播到整個密文中的多個位元,而不僅僅是單個位元。
2. 均勻性:改變明文的任何部分,無論是單個位元還是多個位元,都應該導致密文中的每個位元以接近50%的機率發生變化。
3. 統計獨立性:雪崩效應意味著每個位元的改變都應該在統計上是獨立的,不會受到其他位元改變的影響。
- 通過具有雪崩效應的加密算法,即使原始資料發生微小變化,也可以確保密文的安全性,使得密文對於攻擊者來說幾乎無法從中推斷出明文的任何有用資訊。這使得密文的內容保持隱藏,並增加了加密算法的安全性。
#### DES 強度
- DES使用56位元的密鑰,而密鑰空間相對較小,僅有2^56種可能的密鑰。這使得密鑰被暴力破解攻擊(Brute Force Attack)所威脅
- DES還受到其他密碼分析攻擊的威脅,例如差分密碼分析(Differential Cryptanalysis)和線性密碼分析(Linear Cryptanalysis)。這些攻擊方法可以利用DES的結構特徵和密鑰選擇演算法中的弱點,進一步降低DES的安全性。
- 為了增強DES的安全性,常見的做法是使用Triple DES(3DES)來加密,即應用DES三次,使用不同的密鑰。這樣可以提高密鑰空間,增加密鑰長度,並提高安全性。然而,即使使用3DES,由於其基於DES的結構,仍然存在DES相關的安全性問題。
- 總結來說,DES的強度在當今的資訊安全環境中已經不足以應對複雜的攻擊和現代的計算資源。因此,DES不再被推薦用於新的加密應用,而是被更安全和強大的加密算法,如高級加密標準(AES)所取代。
### BLOCK CIPHER DESIGN PRINCIPLES
1. 回合數
- 回合數越多,即使對於一個相對較弱的F,進行密碼分析也變得更加困難
2. 函數F
- 粗略地說,越難以一組線性方程來近似F,F就越非線性
3. 密鑰生成算法
- 密鑰生成算法應該滿足密鑰/密文的嚴格雪崩準則和位獨立準則。
## CH5

### POLYNOMIAL ARITHMETIC
- 5-6要重讀
## 第六章
### 有限域算法
- AES 的計算是基於有限域 GF(28)
- 這個部分不確定有沒有必要,简单来说,加密算法涉及对整数进行算术运算,而除法操作要求使用域来定义算术。为了方便和效率,我们希望使用适合特定位数的整数,范围为0到2的n次方减1。然而,采用模运算的整数集合Z2n并不是一个域,因为其中的元素不一定存在乘法逆元。
- AES在加密過程中使用不可約多項式 m(x)
#### 不可約多項式
- 特性
1. 不可约性:不可约多项式是指无法分解为两个或更多次数低于它的多项式的乘积。换句话说,它不能被任何次数低于它的多项式整除。
2. 最高次数:不可约多项式的最高次数是固定的,无法通过乘法运算生成比它更高次数的多项式。
3. 不可约分解:任何一个有限域上的多项式都可以表示为一个或多个不可约多项式的乘积。不可约多项式是有限域的基本构建单元。
4. 唯一性:不可约多项式在给定的有限域中是唯一的,即不存在两个不同的不可约多项式具有相同的次数和系数。
- 最高次是固定的
- 最高次数是固定的是因为不可约多项式定义了一个特定的有限域的结构。在有限域中,每个元素都可以表示为一个多项式,其次数不超过最高次数。最高次数确定了有限域中多项式的最大次数限制。
- 如果最高次数不是固定的,那么在有限域中就无法保持一致的结构和操作规则。例如,在GF(2^n)有限域中,最高次数为n,这意味着每个元素都可以用一个n次多项式表示。如果允许更高次数的多项式存在,将破坏有限域的定义和属性。
- 加密過程
- C(x) = A(x) * B(x) mod m(x) // m(x) 為不可約多項式, A(x) 為明文 B(x) 為key
- m(x) = x^8 + x^4 + x^3 + x + 1
### AES使用的四種轉換方式
- SubBytes(字节替代):
- SubBytes是AES中的字节替代步骤。在该步骤中,输入的每个字节都会被替换成对应的S盒中的值。S盒是一个固定的替代表,根据输入字节的值来查找替代值。SubBytes通过非线性变换混淆数据,增强了AES的安全性。
- ShiftRows(行移位):
- ShiftRows是AES中的行移位步骤。在该步骤中,输入状态矩阵的每一行都会进行循环左移操作。第一行保持不变,第二行向左移动一个字节,第三行向左移动两个字节,第四行向左移动三个字节。通过行移位,数据在状态矩阵中发生了位置变化,增加了数据的扩散性。
- MixColumns(列混淆):
- MixColumns是AES中的列混淆步骤。在该步骤中,输入状态矩阵的每一列都会进行线性变换。每个字节与固定的矩阵进行乘法运算,并对结果进行模2的多项式求余运算。MixColumns通过将数据在列上进行混淆,增加了数据的复杂性和扩散性。
- AddRoundKey(轮密钥加):
- AddRoundKey是AES中的轮密钥加步骤。在该步骤中,当前轮次的轮密钥与输入状态矩阵进行按位异或运算。轮密钥是从主密钥衍生出来的子密钥,每一轮使用不同的子密钥。通过与轮密钥进行异或操作,数据与密钥进行混合,增加了加密算法的安全性和随机性。
- 这四种转换方式共同组成了AES的加密过程,通过多轮的重复应用,对输入数据进行逐步的替代、移位、混淆和加密,从而实现强大的数据保护和安全性。
#### AES 可逆特性
- AES的可逆性是由其特定結構所決定的,SubBytes、ShiftRows、MixColumns和AddRoundKey。這些轉換都是可逆的,因為它們都是基於簡單的代數運算和位元運算實現的。
- AES使用與加密過程相同的四個轉換,但是它們的順序相反。通過將這些轉換以相反的順序應用於密文,可以恢復原始明文。
### last round
- 在最后一轮加密中,没有MixColumns步骤。这是因为MixColumns步骤是一种线性变换,它在前面的轮中引入了一定的扩散效应,但在最后一轮中,不再需要进行进一步的扩散,因此省略了这个步骤。
### AES 優點
1. 安全性高:AES是一種對稱密碼學算法,其安全性得到廣泛認可。它使用了高度複雜的數學運算,使得攻擊者很難通過破解密鑰或其他手段來破解加密數據。
2. 效率高:AES加密算法的運行速度非常快,可以在現代計算機上快速地進行加密和解密操作。
3. 靈活性強:AES可以使用不同的密鑰長度(128位、192位或256位)來進行加密,從而提供更高的安全性。
4. 易於實現:由於AES使用了簡單的數學運算,因此實現起來相對容易。此外,由於其廣泛使用和開放標準,因此有許多可用的軟件庫和工具可供開發人員使用。
5. 應用廣泛:由於其高效性和安全性,AES被廣泛應用於各種領域中,包括數字權限管理、金融交易、敏感信息存儲和傳輸等。
### 驗證碼
- 當使用AES構建消息驗證碼(Message Authentication Code,MAC)時,只需要使用AES的加密操作,而不需要使用解密操作。消息驗證碼是由數據和密鑰共同計算得出的,通常用於確認數據的完整性和真實性。
- 在計算消息驗證碼時,使用的密鑰需要與數據接收方共享。使用共享的密鑰,將數據進行AES加密操作,得到一個固定長度的驗證碼。這個驗證碼可以通過傳遞給接收方,接收方再次使用相同的密鑰對接收到的數據進行加密操作,並將計算得到的驗證碼與接收到的驗證碼進行比較。如果兩者相同,則可以確認數據的完整性和真實性。
- 由於驗證碼是通過加密操作計算得出的,並不需要解密操作。解密操作主要用於恢復原始數據,而在計算消息驗證碼時,並不需要恢復原始數據,只需要對數據進行加密操作並生成驗證碼即可。因此,在構建消息驗證碼時,只需要使用AES的加密操作即可。
### Rotword
- 在AES加密算法中,RotWord(Rotate Word)是一個步驟,用於對字(Word)進行循環左移操作。
- 在AES的密鑰擴展過程中,密鑰需要進行輪密鑰生成,其中一個重要的操作就是RotWord。RotWord操作作用於密鑰中的一個字,將該字的每個字節(byte)向左循環移動一個位置。
- 具體來說,假設一個字由四個字節組成(例如,0x01 0x23 0x45 0x67),RotWord操作將這個字的四個字節按照如下方式進行循環左移:0x01 0x23 0x45 0x67 -> 0x23 0x45 0x67 0x01
- RotWord在AES中操作的目的是改變密鑰的結構和混淆字節的順序,增加密鑰的隨機性和混合性。
### SubWord
- 在AES加密中,SubWord是一種操作,用於對密鑰擴展過程中的字(Word)進行替換。該操作使用一個稱為S盒(S-Box)的查找表,將字中的每個字節替換為S盒中對應的值。
- S盒是AES中的一個固定的、非線性的替換盒,它對輸入的8位字節進行替換,產生一個8位的替換值。S盒的結構和內容是提前計算並固定的,它不依賴於密鑰或其他輸入數據。S盒的設計考慮到非線性和擾亂性的要求,以增強AES加密的安全性。
- 在密鑰擴展過程中,SubWord操作將每個字的每個字節應用於S盒,用S盒中對應的替換值替換原始值。這樣可以增加密鑰的混淆性和隨機性,增強AES加密算法的安全性。
- SubWord操作在AES中的目的是引入非線性和混淆性,增加密鑰的隨機性和強度。它使得每個字的每個字節都經過了替換,增加了加密算法的混合性,從而提高了對密碼分析和攻擊的抵抗能力。
### 輪常數
- AES加密中,輪常數主要用於密鑰擴展過程和輪密鑰生成。在密鑰擴展過程中,輪常數被用於生成新的密鑰字,以增加密鑰的混淆性和強度。在每一輪的輪密鑰生成過程中,輪常數被與子密鑰進行XOR運算,以引入密鑰的變化和差異。
- 輪常數的引入增加了AES加密算法的隨機性和安全性,使得每一輪的運算都具有不同的密鑰和常數,增加了密碼分析和攻擊的困難度。它們在加密過程中起到重要的作用,確保了AES的強度和可靠性。
- 輪常數的計算基於有限域GF(28)中的乘法操作。輪常數的生成遵循以下規則:
1. 首先,將前一個輪常數左移一位。
2. 如果左移的結果中最高位為1,則將該結果與固定的多項式0x1B進行XOR運算。
3. 得到的結果就是新的輪常數。
### AES密鑰擴展算法
- AES密鑰擴展算法的目的是將128位密鑰擴展為更大的一組輪密鑰,以用於高級加密標準。這些輪密鑰用於加密過程中的每個輪次,以增強加密過程的安全性。由於AES使用了多個輪次來加密數據,因此需要生成多個不同的輪密鑰。因此,AES密鑰擴展算法是實現AES加密過程中不可或缺的一部分。
### 雙重 DES
- 双重DES(Double DES)和三重DES(Triple DES)是DES加密算法的变种,用于增加数据的安全性。
- 雙重DES步驟
1. 使用第一个密钥对数据进行加密。
2. 使用第二个密钥对第一步的加密结果进行解密。
3. 使用第一个密钥再次对第二步的解密结果进行加密
- 虽然三重DES在安全性上更强,但它的加密速度比双重DES要慢,因为需要执行更多的加密和解密操作。由于AES(Advanced Encryption Standard)的广泛采用和更高的性能,目前已经推荐使用AES代替DES和3DES作为加密算法。
### 密码反馈模式(Cipher Feedback Mode,CFB)
- 它將前一個密文塊作為加密器的輸入,並生成一個與明文塊相同大小的密文塊。這樣可以實現流加密,因為每個密文塊都可以用作下一個明文塊的加密器輸入。CFB 模式還具有錯誤傳播特性,這意味著如果某個密文塊被修改,則該錯誤將在解密後的所有明文中傳播。
### 格式保留加密(Format-Preserving Encryption,FPE)
- 是一种加密技术,它允许在保持数据的格式不变的同时对其进行加密。Feistel结构是FPE中常用的一种设计方法,用于构建具有格式保留性的加密算法。
- Feistel结构是由Horst Feistel于1973年提出的,它是一种将块密码算法转化为格式保留加密的方式。Feistel结构由多个轮次组成,每个轮次包含两个主要操作:轮函数和交换。
- 在Feistel结构中,明文被分成两个相等长度的部分,通常称为左半部分(L)和右半部分(R)。加密过程和解密过程是类似的,只是在密钥使用上略有差异。
- 在格式保留加密(FPE)的 Feistel 結構中,使用的是可逆函數而不是非線性函數。可逆函數是一種線性函數,因為它們可以被反轉以恢復原始輸入。但是,FPE 的可逆函數必須保持原始格式不變,因此它們需要具有特定的結構和屬性,以實現非線性的效果。因此,FPE 的 Feistel 結構可以被視為既包含線性元素又包含非線性元素的結構。
- Feistel结构:FPE使用Feistel结构,其中包含多个轮次。每个轮次将输入分成左右两个部分,并对右半部分进行变换。这个结构允许对右半部分进行多次迭代,从而增加了非线性的效果。
- 轮函数:每个轮次中都有一个轮函数,它是一个可逆函数,用于对右半部分进行变换。轮函数通常由线性和非线性操作组成,以增加加密的复杂性和安全性。线性操作可以是位移、异或等简单的线性变换,而非线性操作可以是S盒替代、混淆等复杂的非线性变换。
- 這邊可以结合线性和非线性操作以增加加密的复杂性和安全性。线性操作如位移和异或可以实现简单的线性变换,而非线性操作如S盒替代和混淆可以引入复杂的非线性变换。變得更安全也更複雜不好還原
- 轮密钥:在每个轮次中,使用不同的轮密钥对轮函数进行加密操作。轮密钥引入了差异性,增加了加密的随机性和安全性。轮密钥通常由主密钥经过密钥扩展算法生成。
- 通过将这些元素结合在一起,FPE的Feistel结构可以在保持格式保留的限制下实现既包含线性元素又包含非线性元素的特征。这种结构可以提供足够的随机性和复杂性,使得加密过程更加安全,并保护输入数据的格式。
#### CBC (Cipher Block Chaining)模式
- 是对称加密中一种常用的工作模式之一
- 在CBC模式中,数据被分成固定大小的块,并使用前一个密文块与当前明文块进行异或运算来实现数据的混淆和扩散效果。这确保了每个密文块都依赖于前一个密文块的值,从而提供了数据的扩散性。
- CBC模式与其他加密模式的主要区别在于其使用了初始化向量(IV)来确保安全性
- 如果知道了初始向量(IV),攻击者就可以预测密文块的值,从而破坏加密的安全性。因此,在CBC模式中,IV必须是随机和不可预测的,并且只有发送方和接收方知道它。如果未能保护IV的机密性,则可能会导致加密数据易受攻击。他可以使用该IV与第一个密文块进行 XOR 操作,然后使用解密算法解密得到第一个明文块
#### 不同位元大小一起使用
- CBC模式可以与不同的块大小一起使用,但是需要注意的是,块大小必须是8位的倍数。在CBC模式中,每个明文块都被分成相同大小的块,并且每个块都使用前一个块的密文作为初始向量(IV)。因此,如果使用不同大小的块,则需要相应地调整IV和填充方案。例如,在使用128位块大小时,IV应该是128位长。在使用64位块大小时,IV应该是64位长。
### XTS-AES(XEX-based Tweaked CodeBook Mode with CipherText Stealing-AES)
- 是一种加密模式,用于在磁盘和媒体存储设备上对数据进行加密和解密。它是对AES加密算法的扩展,专门设计用于处理长序列的数据,如磁盘块或存储器页面。
- XTS-AES结合了XTS模式和AES算法。XTS模式是一种特殊的分组密码模式,用于处理连续数据块。它采用两个密钥来提供安全性和保密性。其中一个密钥用于加密每个数据块,而另一个密钥用于在每个块上生成一个“调整”值,以增加密码的安全性。
- 它使用兩個 AES 密鑰來提供更好的安全性和格式保留加密。此外,XTS-AES模式還包括一個 nonce 參數和一個計數器參數,使其適合並行操作
- XTS-AES模式只适用于***对称加密算法***,而不适用于非对称加密算法。它是基于对称密码算法AES(高级加密标准)的扩展模式,用于处理连续数据块的加密和解密。
- Nonce
- 是一个随机生成的、仅在特定上下文中使用一次的值。它通常用于对称加密的密码算法中,用于生成每个消息的唯一初始向量(IV)
- 计数器参数
- 是一个递增的整数,用于生成每个消息的唯一IV。它与Nonce参数类似,但不是随机生成的,而是按照预定义的顺序递增
- 两个参数的目的是为了增加加密操作的安全性和唯一性。它们确保每次加密操作使用不同的初始化向量(IV)
#### 填充位元
- 填充位元的作用是确保数据块的长度达到加密算法所需的块大小,并且在解密过程中可以正确地移除填充。填充位元本身并不包含有效数据,因此不会影响数据的完整性。
- 在加密过程中,填充位元被添加到数据块的末尾,以使其长度达到加密算法所需的块大小。在解密过程中,填充位元会被移除,以还原原始数据块的长度。
- 填充位元通常使用特定的填充方案,如PKCS#7或ISO/IEC 7816-4。这些填充方案确保填充位元可以被正确识别和移除,同时不影响数据的完整性和解密结果。
## CH8
- 偽隨機數生成的原則是一種用於生成看似隨機但實際上是由特定算法產生的數字序列的方法。這些算法可以分為兩類:真隨機數生成器(TRNG)和偽隨機數生成器(PRNG)。TRNG使用物理過程來產生真正的隨機位元,而PRNG則使用特定算法來產生看似隨機的位元序列。在設計PRNG時,需要考慮到一些要求,例如統計性、均勻性、可預測性等。
#### TRNGs PRNGs PRFs
- TRNGs(真随机数发生器)是基于物理过程的设备或方法,利用不可预测的物理事件生成真正的随机数。TRNGs的输出是由真实的随机性来源产生的,例如电子噪声或放射性衰变。
- PRNGs(伪随机数发生器)是基于确定性算法的生成器,通过使用初始种子值和确定性算法生成一系列看似随机的数值序列。PRNGs的输出是由算法生成的,虽然在计算上看起来是随机的,但实际上是可预测的。
- PRFs(伪随机函数)是一种密码学原语,它将输入密钥和消息映射到伪随机输出值。PRFs的设计目的是提供一个能够在安全性和性能之间取得平衡的函数。PRFs通常用于生成密钥、计算消息认证码、派生密钥等场景。
- 應用場景
1. TRNGs 适用于需要高度随机性的场景,如加密密钥的生成、密码学安全性要求较高的应用。
2. PRNGs 适用于一般的伪随机数需求,如模拟、数据加密、游戏、统计抽样等应用,但对于密码学安全性要求较高的场景不适用。
3. PRFs 适用于密码学安全性要求较高的场景,如密钥生成、消息认证码计算、派生密钥等应用,可以提供较高的安全性和性能的平衡。
- 伪随机数生成的原则
1. 随机性:生成的随机数序列应该在统计上表现出与真随机数类似的性质,即在分布和均匀性上接近真正的随机数序列。
2. 不可预测性:生成的随机数序列应该是不可预测的,即无法通过已知的信息或算法来推断出接下来的随机数。这种性质对于密码学等安全应用非常重要。
3. 周期性:生成的随机数序列应该具有足够的周期,即在一定的周期之后,随机数序列将会重复。周期越长,生成的随机数序列越不容易重复。
4. 重现性:伪随机数生成算法应该是可重现的,即在相同的初始状态下,生成的随机数序列应该是完全相同的。这样可以确保在需要重现相同随机数序列的情况下,能够得到相同的结果。
5. 高效性:伪随机数生成算法应该具有高效性,即能够在合理的时间内生成大量的随机数。生成随机数的速度对于很多应用来说是至关重要的。
#### 隨機性的測試方法
1. Frequency Test:最基本的測試方法,用於確定序列中1和0的數量是否與真正隨機序列所期望的大致相同。
2. Runs Test:用於檢查序列中連續1或0的長度是否符合預期。
3. Statistical Test:使用統計學方法來檢查序列是否符合特定分佈模型。
#### 演算法重點
- TRNGs的演算法設計重點在於如何從物理過程中提取真正的隨機性,例如熱噪聲、放射性衰變等。這些物理過程產生的數據被稱為“熵源”,需要通過一系列的處理和測試來確保其真正的隨機性。
- PRNGs的演算法設計重點在於如何使用一個固定長度的種子來生成看似隨機但實際上是可預測的序列。常見的PRNG演算法包括線性同餘發生器、Blum Blum Shub發生器等。這些演算法需要具備良好的統計特性,例如均勻分佈、長週期等。
- PRFs是用於生成固定長度偽隨機位元序列的函數,常見的應用包括對稱加密金鑰和nonce等。PRF通常使用種子和一些特定上下文值作為輸入。
- PRNGs 重點
1. 專門設計的算法:這些算法是專門為生成偽隨機位元序列而設計的。其中一些算法用於各種隨機性算法中,其中幾個在下一節中描述。其他算法則是專門用於流加密中。最重要的例子是RC4,該算法在第8.5節中有描述。
2. 密碼學核心算法:這些是用於加密和解密消息的核心密碼學算法,它們通常具有很強的安全性和不可預測性。因此,這些核心密碼學算法也可以用作PRNGs的核心。常用來創建PRNGs的三種廣泛類別的加密學演算法包括:對稱區塊加密、非對稱加密和雜湊函數以及消息驗證代碼等
### PRNGs
- 隨機位元生成器(PRNG)產生的偽隨機數序列應該具有兩種不可預測性:
1. 前向不可預測性:如果種子未知,則序列中的下一個輸出位元應該是不可預測的,即使已知先前位元的任何信息也不能預測。
2. 反向不可預測性:也不應該能夠從任何生成的值的知識中確定種子。種子與從該種子生成的任何值之間不應有相關性;序列中的每個元素都應該看作是獨立隨機事件(其概率為1/2)的結果。
### PNGs
#### LCG
- 線性同餘發生器(Linear Congruential Generator,LCG)是一种常见的伪随机数发生器,用于生成看似随机的数值序列。它基于一个简单的递归公式,其中当前的伪随机数是前一个数乘以一个乘法因子,再加上一个偏移量,最后对一个模数取模。其数学表示如下:
- X(n+1) = (a * X(n) + c) mod m
- 其中,X(n) 是当前的伪随机数,X(n+1) 是下一个伪随机数,a 是乘法因子,c 是偏移量,m 是模数。
- LCG的关键在于选择合适的参数(a、c、m),以产生满足随机性要求的伪随机序列。如果参数选择不当,可能会导致周期过短或者出现可预测的模式。因此,在实际应用中,需要谨慎选择参数,确保生成的伪随机数具有较长的周期和良好的统计特性。
- LCG的优点是计算简单、效率高,适用于需要快速生成大量伪随机数的场景。然而,它的随机性和安全性较低,不适合在需要高度随机性和密码学安全性的应用中使用
#### Blum Blum Shub 產生器
- 计算 X(1) = (X(0)^2) mod (p * q) = (7^2) mod (11 * 19) = 49 mod 209 = 49。
- 计算 X(2) = (X(1)^2) mod (p * q) = (49^2) mod (11 * 19) = 2401 mod 209 = 27。
- 计算 X(3) = (X(2)^2) mod (p * q) = (27^2) mod (11 * 19) = 729 mod 209 = 101。
- 以此类推,继续计算下一个伪随机数。
- BBS发生器的关键在于素数 p 和 q 的选择,它们应该是足够大且满足特定的模运算条件,以确保生成的伪随机数具有良好的统计特性和安全性。BBS发生器具有周期性、不可预测性和统计性良好的特点,但由于其生成速度较慢,通常用于加密和安全通信领域的特定应用中,如密钥生成和加密密钥的生成等。
- 需要注意的是,尽管BBS发生器在理论上被认为是安全的,但它并不是密码学安全的伪随机数发生器(CSPRNG)。在实际应用中,更复杂的密码学安全伪随机数发生器或真随机数发生器更常用,以满足更高的安全性要求。
- 安全性取决于选择足够大且相对难以分解的素数 p 和 q。如果选择的素数不够大或者存在某些数学结构,可能会使BBS发生器容易受到攻击。
- 可能會受到因子分解攻击:攻击者可能能够快速分解这些数,从而破解BBS发生器的安全性。一旦攻击者得到 p 和 q 的因子,他们可以计算出种子值,并预测未来的伪随机数。
### Pseudorandom Number Generation Using a Block Cipher
- (使用分组密码进行伪随机数生成)是一种基于分组密码算法的伪随机数生成方法。它利用块密码算法的加密操作来生成伪随机数序列。
- 该方法的安全性和随机性取决于所使用的分组密码算法的安全性和密钥的保密性。
- 广泛应用于密码学、安全协议和随机性需求的场景中。
```
假设我们使用AES作为分组密码算法来生成伪随机数序列。初始密钥为128位的随机值,计数器初始值为0。
初始密钥:0x2B7E151628AED2A6ABF7158809CF4F3C
计数器:0x0000000000000000
生成伪随机数序列的步骤:
使用AES算法将初始密钥和计数器作为输入,生成一个密文块。
输入:密钥=0x2B7E151628AED2A6ABF7158809CF4F3C,计数器=0x0000000000000000
加密操作:AES(密钥, 计数器) = 0x6BC1BEE22E409F96E93D7E117393172A
将生成的密文块作为伪随机数序列的第一个值。
伪随机数序列:0x6BC1BEE22E409F96E93D7E117393172A
更新计数器的值,例如递增计数器。
计数器:0x0000000000000001
重复步骤1到3,生成更多的密文块作为伪随机数序列的值。
输入:密钥=0x2B7E151628AED2A6ABF7158809CF4F3C,计数器=0x0000000000000001
加密操作:AES(密钥, 计数器) = 0x3AD77BB40D7A3660A89ECAF32466EF97
伪随机数序列:0x6BC1BEE22E409F96E93D7E117393172A, 0x3AD77BB40D7A3660A89ECAF32466EF97
```
#### ANSI X9.17 PRNG
```
选择一个初始的密钥(128位)和初始向量(64位),假设它们分别为:
密钥(K):0x2B7E151628AED2A6ABF7158809CF4F3C
初始向量(IV):0xF0F1F2F3F4F5F6F7
Block = IV || CTR = 0xF0F1F2F3F4F5F6F7 || 0x00000001
PRB = AES_Encrypt(Block, K)
```
1. 安全性:使用块密码算法进行加密,块密码算法通常具有高度的安全性,可以提供较好的随机性和不可预测性。
2. 灵活性:可以根据需要选择不同的块密码算法,如AES、DES等,具有较高的灵活性。
3. 可扩展性:可以根据需要生成不同长度的伪随机数序列。
4. 高效性:利用块密码算法的高速加密/解密操作,可以快速生成伪随机数序列。
#### NIST CTR_DRBG
- 在內文中提到,NIST CTR_DRBG是一種基於CTR模式的偽隨機位元生成器,被廣泛實現並且是所有最近的Intel處理器芯片上實現的硬體隨機數生成器的一部分。
#### Stream Ciphers
- Stream Ciphers具有以下特点:
1. 高效性:流密码算法适用于对大量连续数据进行实时加密和解密,因为它可以按比特或字节的粒度处理数据。
2. 实时性:由于流密码算法只需要一次生成密钥流,然后与数据进行异或运算,因此可以实现实时的加密和解密操作。
3. 简单性:相对于块密码算法,流密码算法通常具有更简单的结构和实现,更容易理解和实现。
4. 适用性广泛:流密码算法可以应用于多种应用场景,如无线通信、网络通信、实时视频流加密等。
- 其中最主要的问题是密钥流的随机性和不可预测性。如果密钥流可以被预测或重建,攻击者可能能够破解密文并获取原始数据。因此,在设计和使用流密码算法时,确保生成的密钥流具有足够的随机性和不可预测性至关重要。
- 重要例子
- C4、Salsa20、ChaCha20等
#### RC4
- 優缺:
- 優點
- 非常适合用于加密和解密流式数据或需要实时处理的数据。
- 缺點
- 密钥周期问题和相关密钥攻击,因此在实际应用中,建议使用更现代和安全的加密算法来代替RC4。
- 要點
- RC4算法中的关键是密钥调度算法(KSA)和密钥流生成算法(PRGA)。通过KSA对S盒进行初始化置换和混合操作,生成具有密钥影响的S盒。然后,使用PRGA基于初始化后的S盒生成伪随机的密钥流序列,用于加密和解密操作。
- KSA
- 初始化S盒:创建一个长度为256的S盒,包含值从0到255的顺序序列。
- 密钥扩展:将密钥重复填充到与S盒相同的长度。
- 初始置换:使用密钥中的字节值对S盒进行初始置换。
- 混合操作:重复遍历S盒中的每个元素,并使用密钥中的字节值对其进行混合。
- 漏洞
1. 长期偏置(Long-term biases):RC4的密钥调度算法存在长期偏置,导致部分密钥流字节的概率分布不均匀。这种偏置可以被攻击者利用,通过分析密钥流中的统计特征来推断密钥或明文信息。
2. 临时偏置(Temporal biases):RC4的密钥调度算法在初始几个密钥流字节中也存在临时偏置,导致这些字节的概率分布不均匀。这种临时偏置同样可以被攻击者利用,从而降低了密钥的安全性。
3. 密钥重用(Key reuse):如果在不同的通信会话中使用相同的密钥进行加密,攻击者可以利用已知的密钥流和密文之间的关系来推断出密钥和明文信息。
4. 唯一性(Non-uniqueness):RC4的密钥调度算法可能生成相同的密钥流,即使使用不同的密钥。这种唯一性问题可能导致密文重用或其他安全问题。
### TRNGs
- LavaRnd是一個開源項目,使用廉價相機、開源代碼和廉價硬件創建真正隨機數字。
- TRNGs利用各种物理过程中的噪声源来获取随机性,例如热噪声、放射性衰变、电子器件的随机性等。这些噪声源产生的信号经过适当的处理和放大后,被转换成数字形式作为随机数输出。
- 由于TRNGs的随机性是基于物理过程的,因此生成的随机数在理论上是不可预测和不可重现的。这使得TRNGs在需要高度安全性和加密强度的应用中非常有用,例如密码学、随机性模拟、加密密钥生成等。
| none | PRNGs | TRNGs |
|------|--------|--------|
| 优点 | 高效性 | 真正的随机性|
| | 可重现性 | 高安全性 |
| | 周期性 | 多样性 |
|缺点 | 可预测性 | 低效性 |
| | 缺乏真正的随机性| 受环境影响 |
| | 安全性局限性| 可扩展性受限 |
## Chapter 9
### 9.1
- 介紹了公開金鑰密碼系統的原理。
- 公開金鑰密碼系統使用不同的密鑰(即公鑰和私鑰)來加密和解密數據。
- 在公開金鑰密碼系統中,公鑰可以被任何人使用來加密消息,但只有持有相應私鑰的接收方才能解密該消息。
- 公開金鑰密碼系統可以實現安全通信,因為即使攻擊者截獲了加密消息,也無法解密它,除非他們能夠破解相應的私鑰。
- 介紹了公開金鑰密碼系統的應用、要求和分析等相關內容。
#### Public-Key Cryptosystems
- 公開金鑰密碼系統(Public-Key Cryptosystems)是一種加密技術,使用一對密鑰(公鑰和私鑰)來加密和解密數據。公鑰可以公開分享,而私鑰則只有擁有者知道。發送方使用接收方的公鑰來加密消息,接收方使用自己的私鑰來解密消息。這種加密方式可以實現安全的通信,因為即使攻擊者截取了消息,也無法解密它,因為他們沒有私鑰。
#### Applications for Public-Key Cryptosystems
- 公開金鑰密碼系統的應用非常廣泛,其中一些應用包括:
1. 數字簽名:使用私鑰對數據進行簽名,以證明數據的完整性和真實性。
2. 數字證書:使用公鑰加密數字證書,以驗證網站或服務器的身份。
3. 金融交易:使用公鑰加密信用卡號碼等敏感信息,以保護交易安全。
4. 身份驗證:使用公鑰加密和解密來驗證用戶身份。
5. VPN和遠程訪問:使用公鑰加密來保護VPN和遠程訪問的安全。
- 這些只是公開金鑰密碼系統的一些應用案例,實際上還有很多其他的應用。
#### 公開金鑰密碼系統的需求
- 公開金鑰密碼系統的要求包括:
1. 安全性:公開金鑰密碼系統必須能夠保護數據免受未經授權的訪問和攻擊。
2. 可靠性:公開金鑰密碼系統必須能夠正確地加密和解密數據,並且不會出現錯誤或故障。
3. 效率:公開金鑰密碼系統必須能夠在合理的時間內加密和解密數據,而不會導致過多的延遲或資源消耗。
4. 可行性:公開金鑰密碼系統必須是可行的,即必須存在一種算法來生成公鑰和私鑰,以及加密和解密數據。
- 這些要求是保證公開金鑰密碼系統能夠實現安全通信的基礎。
#### 公開金鑰密碼系統的密碼分析
- 公開金鑰密碼系統的密碼分析是指對公開金鑰密碼系統進行攻擊的過程。攻擊者可能會試圖破解私鑰、截取加密消息或者對加密消息進行修改等。常見的攻擊方法包括:
- 窮舉攻擊:攻擊者通過枚舉所有可能的私鑰來破解加密消息。
- 中間人攻擊:攻擊者在通信過程中截獲加密消息,並將其解密後再重新加密並發送給接收方,從而實現竊聽和篡改。
- 旁路攻擊:通過監測電磁輻射、功耗等信息來獲取私鑰。
- 為了防止這些攻擊,公開金鑰密碼系統需要滿足一定的安全要求,如具有強大的數學難題、足夠長的密鑰長度、安全的隨機數生成等。此外,還可以採用數字簽名、數字證書等技術來增強系統的安全性。
### 9.2
#### 演算法描述
- RSA演算法的加密過程如下:
1. 選擇兩個不同的大質數p和q,計算n=p*q。
2. 計算歐拉函數φ(n)=(p-1)*(q-1)。
3. 選擇一個整數e,使得1<e<φ(n),並且e和φ(n)互質。
4. 計算整數d,使得d*e ≡ 1 (mod φ(n))。
5. 公開n和e作為加密金鑰,保持d作為解密金鑰。
6. 將明文m轉換為整數M,使得0≤M<n。
7. 加密:計算密文c=M^e (mod n)。
8. 解密:計算明文m=c^d (mod n)。
- RSA演算法的安全性基於大質數分解問題,因此當p和q越大時,攻擊者破解RSA演算法的難度就越大。RSA演算法廣泛應用於數字簽名、數字證書、安全通訊等領域。
#### 計算方面的考量
- 在使用RSA演算法進行計算時,需要考慮以下幾個因素:
1. 質數的選擇:RSA演算法的安全性基於大質數分解問題,因此需要選擇足夠大的質數p和q。通常建議選擇至少2048位的質數。
2. 指數的大小:RSA演算法中需要進行指數運算,因此指數的大小會影響計算效率。通常建議使用較小的指數,例如65537。
3. 模數的大小:模數n是兩個大質數p和q的乘積,其大小也會影響計算效率。通常建議使用較大的模數,例如2048位或4096位。
4. 加速技術:由於RSA演算法涉及到大量的指數運算,因此可以使用一些加速技術來提高計算效率,例如快速模幂、CRT加速等。
#### RSA的安全性
- 如果攻擊者能夠分解出n=p*q,則可以輕易地計算出私鑰d,進而解密加密過的訊息。因此,為了保護RSA系統的安全性,需要選擇足夠大的質數p和q,通常建議使用2048位或更長的質數。
- 此外,在實際應用中還需要注意其他安全問題,例如適當地管理私鑰、防止側信道攻擊等。綜合考慮這些因素,RSA仍然被廣泛使用並被認為是一種安全可靠的公開密碼系統。
- TODO
## Ch10
### 10.1 Diffie–Hellman Key Exchange
#### 算法描述
- Diffie-Hellman密鑰交換算法是一種公開金鑰加密算法,用於兩個人在不安全的網路上安全地交換密鑰。該算法的基本思想是,兩個人可以通過公開傳輸的方式交換信息,但是他們不會將實際的密鑰傳輸出去。相反,他們使用一些數學運算來生成一個共享的密鑰,並且只有他們兩個人知道這個密鑰。
#### 密鑰交換協議
- 密鑰交換協議是指在不安全的網路上,兩個或多個通信方安全地交換密鑰的過程。這些協議通常使用公開金鑰加密算法或者類似Diffie-Hellman算法的方法來實現。在這些協議中,通信方可以通過公開傳輸的方式交換信息,但是他們不會將實際的密鑰傳輸出去。相反,他們使用一些數學運算來生成一個共享的密鑰,並且只有他們兩個人知道這個密鑰。
- 常見的密鑰交換協議包括:
1. Diffie-Hellman密鑰交換:該協議已在上面介紹過。
2. RSA加密:該協議使用公開金鑰和私有金鑰來加密和解密信息。
3. ECDH(橢圓曲線Diffie-Hellman):該協議是Diffie-Hellman算法的變種,使用橢圓曲線代替大質數。
4. IKE(Internet Key Exchange):該協議用於建立虛擬私有網路(VPN)中的安全通道。
5. SSL / TLS:該協議用於在Web瀏覽器和Web服務器之間建立安全通道。
- 這些協議都是為了保護通信方之間的信息安全,防止攻擊者窺探或修改信息。
#### 中間人攻擊
- 中間人攻擊(Man-in-the-middle attack)是一種常見的網路攻擊方式,攻擊者通過在通信的兩端之間插入自己的設備或程序,使得通信雙方認為他們正在直接通信,實際上所有的信息都被攻擊者監聽、修改或者偽造。
- 中間人攻擊通常發生在沒有加密保護的網路上,例如公共無線網路、局域網等。攻擊者可以使用一些技術手段來實現中間人攻擊,例如ARP欺騙、DNS欺騙、IP欺騙等。當攻擊成功時,攻擊者可以輕易地窺探到所有的敏感信息,例如用戶名、密碼、信用卡號等。
- 防範中間人攻擊的方法包括:
1. 使用加密協議:例如SSL / TLS協議可以保護Web服務器和Web瀏覽器之間的通信安全。
2. 使用VPN:虛擬私有網路(VPN)可以建立安全通道來保護數據傳輸。
3. 檢查證書:在使用Web服務器時,應該檢查證書是否有效,以確保通信對象的身份。
4. 不使用公共無線網路:盡量避免在公共無線網路上進行敏感信息的傳輸。
5. 更新防病毒軟件:定期更新防病毒軟件可以幫助防止中間人
### 10.2 Elgamal 加密系統
#### Elgamal 密碼系統
- Elgamal 密碼系統是一種基於離散對數問題的公開密碼系統,由 Taher Elgamal 於1985年提出。它與 Diffie-Hellman 密鑰交換協議密切相關,但是 Elgamal 系統不僅可以用於密鑰交換,還可以用於加密和數字簽名。
- Elgamal 密碼系統的安全性基於離散對數問題的困難性,即在有限域上找到 a^x ≡ b (mod p) 中的 x。在 Elgamal 系統中,每個用戶都有一對公鑰和私鑰。公鑰包括一個大質數 p、一個原根 g 和另一個整數 y = g^x mod p,其中 x 是私鑰。要加密消息 m,發送者需要選擇一個隨機整數 k,然後計算 c1 = g^k mod p 和 c2 = m * y^k mod p。接收者使用自己的私鑰 x 來解密消息:m = c2 * (c1^(-x)) mod p。
- Elgamal 密碼系統也可以用於生成數字簽名。發送者使用自己的私鑰來對消息進行簽名,接收者使用發送者的公鑰來驗證簽名。Elgamal 系統的數字簽名方案被用於美國政府的數字簽名標準(DSS)。
- 儘管 Elgamal 密碼系統在理論上是安全的,但實際上它比其他公開密碼系統更複雜,因為它需要更多的計算和存儲空間。此外,Elgamal 系統還存在一些安全問題,例如密鑰洩漏和選擇明文攻擊。因此,在實際應用中,通常會使用其他公開密碼系統,如 RSA 或 ECC。
##### 選擇明文攻擊
- 選擇明文攻擊(Chosen Plaintext Attack,簡稱 CPA)是一種加密攻擊方式,攻擊者可以選擇明文並觀察其對應的密文,然後使用這些信息來推斷出加密算法的秘密鑰匙。這種攻擊方式通常需要大量的時間和計算資源,但如果成功了,就可以完全破解加密系統。因此,在設計加密系統時,必須考慮到 CPA 攻擊的可能性並採取相應的防範措施。
### 10.3 橢圓曲線算術
#### 阿貝爾群
- 交換群
- 封閉 => 由於運算是在有限域之上所以會有封閉性
- 結合
- 單位元素
- 反元素
- 交換性
### 10.4 橢圓曲線加密
#### Diffie–Hellman 密鑰交換的類比
- Diffie-Hellman密鑰交換的類比是橢圓曲線密碼學中的橢圓曲線Diffie-Hellman(ECDH)密鑰交換。ECDH與傳統的Diffie-Hellman密鑰交換非常相似,但是它使用橢圓曲線上的點來進行運算,而不是使用整數。
- 在ECDH中,兩個通信方首先選擇一個公開的橢圓曲線和一個基礎點。然後,每個人都選擇一個私有的隨機數作為他們的私鑰,並且根據基礎點和他們的私鑰計算出一個公開的點作為他們的公鑰。
- 接下來,每個人都將自己的公鑰發送給對方。然後,每個人使用對方公鑰和自己的私鑰計算出一個共享秘密。這兩個共享秘密是相同的,因此可以用於加密通信或生成數字簽名等安全操作。
- ECDH與傳統Diffie-Hellman相比具有更高的安全性和更短的密鑰長度,因此被廣泛應用於現代加密系統中。
#### 橢圓曲線加密/解密
- 橢圓曲線加密(ECC)是一種公開密鑰加密技術,它使用橢圓曲線上的點來進行運算。ECC與其他公開密鑰加密技術相比,具有更高的安全性和更短的密鑰長度。
- 在ECC中,每個用戶都有一對公私鑰。公鑰是一個橢圓曲線上的點,私鑰是一個隨機數。要加密一個消息,發送者使用接收者的公鑰和自己的私鑰計算出一個共享秘密,然後使用共享秘密對消息進行加密。接收者使用自己的私鑰和發送者的公鑰計算出相同的共享秘密,然後使用共享秘密對消息進行解密。
- ECC還可以用於生成數字簽名。要生成數字簽名,發送者使用自己的私鑰對消息進行簽名,然後接收者使用發送者的公鑰驗證簽名是否有效。
- 需要注意的是,在實現ECC時需要選擇合適的橢圓曲線和參數,否則可能會導致安全漏洞。因此,ECC的實現需要謹慎處理。
#### 橢圓曲線密碼系統的安全性
- 如果在ECC的實現中選擇了不安全的橢圓曲線或參數,可能會導致以下安全漏洞:
1. 私鑰泄露:如果私鑰被泄露,攻擊者可以使用私鑰對消息進行解密或生成偽造的數字簽名。
2. 中間人攻擊:攻擊者可以在傳輸過程中截取消息並篡改它,然後再將篡改後的消息發送給接收者。為了防止中間人攻擊,需要使用公開密鑰證書來驗證公鑰的真實性。
3. 選擇明文攻擊:如果相同的明文使用相同的公鑰進行加密,攻擊者可以通過比較加密後的結果來推斷出私鑰。
4. 離線字典攻擊:如果攻擊者能夠獲得足夠多的加密/解密數對,他們可以使用離線字典攻擊來推斷出私鑰。
- 因此,在實現ECC時需要遵循最佳實踐和安全建議,以確保安全性。
- 橢圓曲線密碼系統(ECC)是一種公開密鑰加密系統,其安全性基於橢圓曲線難題。ECC的安全性取決於選擇的橢圓曲線和參數,以及私鑰的保密性。
- 目前,ECC被廣泛認為是一種安全可靠的加密方法。相對於RSA等其他公開密鑰加密系統,ECC可以使用更短的金鑰長度實現相同的安全強度,這意味著它需要更少的計算資源和存儲空間。
- 然而,如果在ECC實現中選擇了不安全的橢圓曲線或參數,可能會導致安全漏洞。因此,在實現ECC時需要遵循最佳實踐和安全建議,以確保其安全性。
##### 最佳實踐和安全建議:
- 在實現橢圓曲線密碼系統(ECC)時,以下是一些最佳實踐和安全建議:
1. 選擇安全的橢圓曲線和參數:選擇安全的橢圓曲線和參數是實現ECC的關鍵。必須選擇已被廣泛接受且經過詳細測試的曲線和參數,以確保其安全性。
2. 密鑰管理:私鑰必須妥善保管,以防止未經授權的訪問。此外,必須使用足夠長度的金鑰來保護加密通信。
3. 密碼學協議:在使用ECC進行加密通信時,必須使用安全的密碼學協議來保護通信內容。例如,TLS協議可以用於保護Web服務器和客戶端之間的通信。
4. 密碼學實現:在實現ECC時,必須遵循最佳實踐和安全建議。例如,在生成隨機數時必須使用安全的隨機數生成器,以避免預測性攻擊。
- 總之,實現ECC需要遵循最佳實踐和安全建議,以確保其安全性。這包括選擇安全的曲線和參數、妥善管理私鑰、使用安全的密碼學協議以及實現安全的密碼學算法。
### 10.5 基於非對稱密碼的偽隨機數生成
#### 基於 RSA 的偽隨機數生成
- 具體而言,基於RSA的偽隨機數生成方法需要遵循以下步驟:
1. 選擇兩個大質數p和q,計算n=p*q。
2. 計算f(n)=(p-1)*(q-1),選擇一個整數e,使得e和f(n)互質。
3. 選擇一個種子x0作為起始值,並設置k和r,使得k*r等於n的位元組長度加1。
4. 通過以下循環生成偽隨機數序列:對於i從1到m,執行以下操作:
a. 計算yi=(xi-1)^e mod n
b. 將yi的r個最高位作為下一個xi
c. 將yi的k個最低位作為當前產生的偽隨機數zi
5. 返回產生的偽隨機數序列z1, z2, ..., zm。
#### 基於橢圓曲線密碼的偽隨機數生成
- 具體而言,基於ECC的偽隨機數生成方法需要遵循以下步驟:
1. 選擇一個安全的橢圓曲線E和一個基點G。
2. 選擇一個私有密鑰d,計算公開點Q=dG。
3. 選擇一個種子x0作為起始值,並設置k和r,使得k*r等於n的位元組長度加1。
4. 通過以下循環生成偽隨機數序列:對於i從1到m,執行以下操作:
a. 計算yi=x(i-1)Q的x座標
b. 將yi的r個最高位作為下一個xi
c. 將yi的k個最低位作為當前產生的偽隨機數zi
5. 返回產生的偽隨機數序列z1, z2, ..., zm。
### 11.1 密碼雜湊函數的應用
1. 訊息驗證:密碼雜湊函數可以用於訊息驗證,以確保訊息的完整性和真實性。具體而言,當發送方想要傳送一個訊息給接收方時,可以先將該訊息進行雜湊運算,得到一個固定長度的摘要值。然後,發送方可以將該摘要值附加在原始訊息的末尾一起傳送給接收方。當接收方收到該訊息時,也可以對原始訊息進行雜湊運算,得到一個新的摘要值。然後,接收方可以比較自己計算出的摘要值和發送方傳送過來的摘要值是否相同。如果兩者相同,則說明該訊息沒有被篡改或修改過;如果不同,則說明該訊息可能已經被篡改或修改過。
2. 數位簽章:數位簽章是一種用於驗證數據真實性和完整性的技術。它使用了密碼學中的公鑰加密和私鑰解密技術,以及密碼雜湊函數來保護數據的完整性。在使用數位簽章時,發送方會使用自己的私鑰對消息進行加密,生成一個數位簽章。接收方可以使用發送方的公鑰對這個簽章進行解密,從而驗證消息的真實性和完整性。如果消息被修改或篡改,那麼簽章也會失效,因為修改後的消息與原始消息不匹配。因此,數位簽章可以有效地防止信息被篡改或偽造。
3. 密碼學證明:密碼學證明是一種用於驗證某個實體是否具有某種特定權限或身份的技術。它使用了密碼學中的公鑰加密和私鑰解密技術,以及密碼雜湊函數來保護數據的完整性。
4. 密碼學隨機數生成:在某些情況下,需要生成高質量的隨機數。這時可以使用密碼雜湊函數來生成隨機數。
5. 密碼學金鑰生成:在某些情況下,需要生成安全可靠的金鑰。這時可以使用密碼雜湊函數來生成金鑰。
### 11.2 兩個簡單的雜湊函數
- 兩個簡單的雜湊函數是XOR和旋轉XOR(RXOR)。然而,這些函數在只加密雜湊碼而不加密明文消息時並不安全。因此,在使用這些函數時需要注意保護消息的安全性。如果消息和雜湊碼一起加密,則這些簡單的函數仍然可以用於保護消息完整性。
- 使用簡單的 XOR 或 RXOR 函數計算雜湊值並加密雜湊值而不是整個消息,容易受到攻擊。攻擊者可以通過製作一個新的消息來產生相同的雜湊值,然後將其替換原始消息。這種攻擊稱為碰撞攻擊。因此,如果只加密雜湊值而不加密整個消息,那麼這些簡單的函數就不安全了。
### 11.3 要求和安全性
- 密碼雜湊函數是一種將任意長度的消息轉換為固定長度的散列值的函數。它們被廣泛用於保護密碼和其他機密數據,以及在數字簽名和消息驗證中使用。
- 安全需求:
- 密碼雜湊函數需要滿足以下安全需求:
1. 抗碰撞性:對於不同的輸入,產生相同的雜湊值的概率非常小。
2. 難以反推:給定一個雜湊值,很難找到一個與之相對應的輸入。
3. 抗暴力攻擊:對於大量可能的輸入,攻擊者不能通過暴力搜索找到與特定雜湊值相關聯的輸入。
- 暴力攻擊:
- 暴力攻擊是指攻擊者嘗試使用所有可能的輸入來計算出特定雜湊值所對應的原始輸入。這種攻擊需要大量時間和計算資源,因此抗暴力攻擊是密碼雜湊函數最重要的安全需求之一。
- 密碼分析:
- 密碼分析是指攻擊者通過分析雜湊值來推斷出原始輸入。這種攻擊可以通過使用彩虹表等預先計算的數據庫來加速。為了防止密碼分析,密碼雜湊函數需要具有足夠的抗碰撞性和難以反推的特性,使得攻擊者無法通過分析雜湊值來推斷出原始輸入。
- 總之,密碼雜湊函數是保護密碼和其他機密數據的重要工具。為了保護數據的安全性,密碼雜湊函數需要滿足多個安全需求,包括**抗碰撞性、難以反推和抗暴力攻擊等特性**。
### 11.4 基於密碼區塊鏈的雜湊函數
- 基於密碼區塊鏈的雜湊函數是一種特殊的雜湊函數,它被用於加密貨幣和區塊鏈技術中。這種雜湊函數不僅提供了安全性,還具有可驗證性和不可變性。
- 在基於密碼區塊鏈的系統中,雜湊函數被用於計算區塊的識別符和區塊中的交易數據的摘要。它們將輸入的任意長度數據轉換為固定長度的唯一數字串,稱為雜湊值或摘要。這些雜湊值可以用於驗證區塊的完整性和確保數據的一致性。
- 基於密碼區塊鏈的雜湊函數具有以下特點:
1. 不可逆性:無法從雜湊值反推出原始輸入數據。
2. 唯一性:不同的輸入數據產生不同的雜湊值。
3. 快速計算:能夠在較短的時間內計算出雜湊值。
4. 抗碰撞性:極低的機率發生不同輸入數據產生相同的雜湊值。
### 11.5 安全雜湊算法(SHA)
- SHA是一種密碼學哈希函數,用於將任意大小的數據(消息)轉換為固定大小的數據(哈希值)。SHA-1是最早的版本,但由於其結構和基本數學運算與已被攻破的MD5和SHA-0非常相似,因此被認為不再安全。目前使用較多的是SHA-2系列,包括SHA-224、SHA-256、SHA-384和SHA-512等不同長度的哈希值。此外,還有一個新版本的哈希函數稱為SHA-3
#### 11.5.1 SHA-512 邏輯
- SHA-512是一種安全雜湊算法,用於將任意大小的數據(消息)轉換為固定大小的512位數據(哈希值)。其邏輯可以簡要地概括如下:
1. 初始化八個64位字的緩衝區abcdefgh,並設置初始值IV。
2. 將消息分成固定大小的塊Mi。
3. 對每個塊Mi進行一系列運算,包括填充、分組、壓縮和更新緩衝區等操作。
4. 最後得到最終哈希值MD。
- SHA-512使用了64輪循環運算和80個常數來實現哈希計算。在每輪循環中,它使用了四個非線性函數和一個位運算來處理當前塊Mi和上一次迭代後得到的哈希值Hi-1。最終得到的哈希值MD是由八個64位字組成的。
#### 11.5.2 SHA-512 輪函數範例
- SHA-512使用了四個非線性函數(σ0、σ1、σ2和σ3)和一個位運算(Σ0和Σ1)來實現哈希計算
- 在SHA-512的輪函數中,σ0、σ1、σ2和σ3是四個非線性函數,用於增加哈希值的隨機性和不可預測性;Σ0和Σ1是兩個位運算,用於增加哈希值的擴散性和混沌性。
### 11.6 SHA-3
#### 11.6.1 海綿構造
- 它是一種用於實現哈希函數的結構。海綿結構由兩個階段組成:吸收階段和擠壓階段。
- 在吸收階段中,輸入消息被分成若干個固定大小的塊,每個塊都被視為一個位元串。然後,每個塊都被填充為固定大小的位元串,這稱為“位元率”(bitrate)。填充後的塊與一個稱為“容量”(capacity)的固定大小位元串進行XOR運算。這樣得到的結果稱為“狀態”(state)。接下來,將該狀態作為輸入傳遞到一個非線性函數中,該函數稱為“迭代函數”(iteration function)。迭代函數將輸入分成若干小塊,在每個小塊上執行一系列非線性操作和位運算。最後,將迭代函數的輸出與狀態進行XOR運算,得到新的狀態。這個過程重複進行,直到所有消息塊都被處理完畢。
- 在擠壓階段中,將最後一個狀態作為輸入傳遞到迭代函數中,並重複執行若干次。每次在擠壓階段中,將最後一個狀態作為輸入傳遞到迭代函數f中,並重複執行若干次。每次迭代後,從更新後的狀態中提取一個固定大小的塊,稱為“輸出塊”,並將其附加到先前生成的輸出塊上。這個過程會持續進行,直到生成所需的密文輸出。如果需要更多的密文輸出,則可以繼續重複此過程。
- 需要注意的是,在擠壓階段中使用的函數f是SHA-3迭代函數f,在第370頁中有詳細介紹。
#### 11.6.2 SHA-3 迭代函數 f
- SHA-3 使用了一個稱為 Keccak 的算法作為其核心。這個算法是基於 SPONGE 架構,它將輸入數據進行分組處理,並通過迭代運算生成摘要。
- SHA-3 迭代函數 f 是 SHA-3 的核心部分,它接受一個固定長度的狀態和一個輸入塊作為輸入,然後進行一系列的運算來產生下一個狀態。這個過程是通過多輪的置換和混合步驟實現的,以達到混淆和擾亂數據的目的。
- SHA-3 迭代函數 f 的主要特點如下:
1. 置換步驟:使用非線性的置換函數對狀態進行混淆。
2. 混合步驟:通過對狀態進行位元級和字節級的混合操作,進一步擾亂數據。
3. 迭代運算:重複應用置換和混合步驟,使狀態進一步變化。
- SHA-3 迭代函數 f 的設計目的是確保安全性和防止攻擊者對數據進行破解。它具有抗碰撞性、隨機性、可逆性和運算效率等優點,使得 SHA-3 成為一種廣泛應用於數字安全領域的重要工具。
### 12.1 訊息驗證的要求
- Message Authentication Requirements是指在通過網絡進行通信時,需要保護消息免受各種攻擊的要求。在這個章節中,列舉了以下幾種攻擊:
1. 洩露:將消息內容洩露給未擁有相應密鑰的任何人或進程。
2. 改變:對消息進行未經授權的更改。
3. 重放:重複傳輸先前傳輸的消息。
4. 欺騙:對接收方偽裝成合法發送方,以獲取敏感信息或執行未經授權的操作。
- 因此,在保護消息時,需要實現以下要求:
1. 認證:確定消息是由合法發送方發送的。
2. 完整性:確定消息在傳輸過程中沒有被更改。
3. 不可否認性:確定發送方不能否認已發送的消息。
4. 抗否認性:確定接收方不能否認已接收到的消息。
### 12.2 訊息驗證函數
- Message Authentication Functions是指用於確定消息的完整性和真實性的函數。它可以使用數字簽名、消息摘要或消息認證碼等技術來實現。
- Message Encryption是指將消息轉換為密文,以保護其機密性。加密過程需要使用密鑰,只有擁有相應密鑰的人才能解密並讀取原始消息。
- Message Authentication Code(MAC)是一種用於確定消息完整性和真實性的技術。它使用一個秘密金鑰和一個訊息作為輸入,生成一個固定長度的代表該訊息完整性和真實性的值。接收方可以使用相同的金鑰來驗證該值是否與接收到的訊息匹配,從而確定該訊息是否被篡改或偽造。
### 12.3 訊息驗證碼的要求
- Requirements for Message Authentication Codes(MACs)是指確保MAC技術能夠達到其設計目的的一系列要求。這些要求包括:
1. 安全性:MAC必須能夠抵抗各種攻擊,包括偽造、修改和重放攻擊等。
2. 可靠性:MAC必須能夠在不出現錯誤的情況下正確地驗證消息的完整性和真實性。
3. 高效性:MAC必須能夠在合理的時間內生成和驗證,並且不會對系統性能產生過大影響。
4. 可擴展性:MAC必須能夠適應不同大小和類型的消息,並且可以用於各種應用場景。
5. 簡單性:MAC必須易於實現、使用和管理,以減少錯誤和風險。
### 12.4 訊息驗證碼的安全性
- Security of MACs可以從兩個方面進行攻擊:暴力攻擊和密碼分析。
- 暴力攻擊是指攻擊者嘗試使用所有可能的密鑰來生成MAC,直到找到與原始MAC匹配的密鑰。這種攻擊需要大量的時間和計算資源,因此通常只適用於較短的密鑰。
- 密碼分析是指利用數學和統計方法來分析MAC算法的弱點,以發現可以繞過或破解MAC的漏洞。這種攻擊通常需要對MAC算法進行深入的研究和分析,因此比暴力攻擊更複雜和困難。
- 為了保護MAC免受這些攻擊,必須使用足夠長度和強度的密鑰、安全的加密算法和哈希函數、以及其他安全措施來減少風險。此外,定期更新密鑰、監控系統活動並實施其他安全措施也是保護MAC安全性的重要步驟。
### 12.5 基於雜湊函數的訊息驗證碼:HMAC
- HMAC(基於哈希函數的消息認證碼)是一種基於加密哈希函數的MAC。其設計目標包括:
1. 使用可用的哈希函數,特別是在軟件中執行良好且代碼自由且廣泛可用的哈希函數。
2. 允許在發現或需要更快或更安全的哈希函數時輕鬆替換嵌入式哈希函數。
3. 在不產生顯著降級的情況下保留哈希函數的原始性能。
4. 以簡單的方式使用和處理密鑰。
5. 基於對嵌入式哈希函數合理假設的充分理解,具有良好的密碼分析強度。
- HMAC 算法涉及將秘密密鑰與消息組合,然後使用加密哈希函數對結果進行雜湊。然後將生成的雜湊值再次與秘密密鑰組合並再次進行雜湊以生成最終HMAC值。這個過程使攻擊者難以生成有效的HMAC值而不知道秘密密鑰。
- 在安全方面,當與強加密哈希函數(如SHA-256或SHA-512)一起使用時,HMAC對暴力攻擊和密碼分析具有抵抗力。但是,為了防止基於窮舉搜索或猜測的攻擊,應使用足夠長且隨機的密鑰。此外HMAC還可以用於確保消息的完整性和真實性,因為任何對消息的更改都會導致HMAC值的不匹配。它也可以用於驗證身份,因為只有知道秘密密鑰的人才能生成有效的HMAC值。
- 需要注意的是,哈希函數(如SHA)並不適合直接用作MAC,因為它們不依賴於秘密密鑰。因此,需要將秘密密鑰納入現有哈希算法中。其中一種方法是使用HMAC算法。
### 12.6 基於區塊密碼的訊息驗證碼:DAA 和 CMAC
- 基於區塊密碼的訊息驗證碼(MAC)是一種用於保護數據完整性和真實性的技術。DAA和CMAC都是基於區塊密碼的MAC算法。
- DAA是一種基於DES的MAC算法,曾經是最廣泛使用的MAC之一。然而,由於安全漏洞被發現,現在已經被視為過時算法。
- CMAC是一種新的MAC算法,旨在克服DAA的缺陷。它使用了一個稱為CBC-MAC(Cipher Block Chaining-MAC)模式的區塊密碼模式,可以處理可變長度的消息。CMAC已被證明在安全性方面比DAA更強大和可靠。
- 總體而言,CMAC比DAA更安全、更靈活,因此更適合當今需要高度安全性保護的應用場景。
### 12.7 認證加密:CCM 和 GCM
- 身份驗證加密是一種保護數據完整性、真實性和機密性的技術。CCM和GCM都是常用的身份驗證加密算法。
- CCM是一種基於區塊密碼的MAC算法,使用AES加密算法和CTR模式,以及CMAC身份驗證技術,實現了加密和身份驗證的結合。它可以處理可變長度的消息,並提供高度安全性保護。
- GCM是一種基於區塊密碼的身份驗證加密算法,使用了一個稱為Galois/Counter Mode(GCM)的區塊密碼模式。它可以處理可變長度的消息,同時提供高效率、高安全性和低延遲。
- 總體而言,CCM和GCM都是可靠、安全且高效的身份驗證加密算法,在各種網絡應用中得到廣泛應用。
### 12.8 金鑰封裝
#### 12.8.1 背景
- Key Wrapping的背景是為了在不安全的環境中安全地傳輸密鑰。它可以保護密鑰免受未經授權的訪問和攻擊。最近,NIST定義了一種新的區塊密碼模式,即Key Wrap(KW)模式,用於使用AES或Triple DEA作為底層加密算法進行金鑰包裝。該技術通常用於保護敏感信息(如金鑰)在不同系統之間進行安全傳輸。
#### 12.8.2 金鑰封裝演算法
- Key Wrapping Algorithm是一種基於區塊密碼的算法,它將64位明文密鑰分成多個64位塊,並使用64位常量進行加密。該算法需要進行多次加密運算,以生成最終的加密結果。
#### 12.8.3 金鑰解封
- Key Unwrapping是將被加密的密鑰解密回原始明文形式的過程。它需要使用相同的解密算法和金鑰來還原出原始明文金鑰。在解密過程中,必須確保金鑰不會被未經授權的訪問者所取得。
### 12.9 基於雜湊函數和訊息驗證碼的偽隨機數生成(Pseudorandom Number Generation Using Hash Functions and MACs)
- 這些技術都是用於生成安全且具有高度隨機性的偽隨機序列,以保護系統免受攻擊和未經授權訪問。
#### 12.9.1 基於雜湊函數的偽隨機數生成
- PRNG Based on Hash Function是基於哈希函數的偽隨機數生成技術,而PRNG Based on MAC Function則是基於MAC的偽隨機數生成技術。
- 在PRNG Based on Hash Function中,使用哈希函數來生成偽隨機序列。該方法通常使用SHA-1或SHA-2等安全的哈希函數來實現。
#### 12.9.2 基於訊息驗證碼的偽隨機數生成
- 在PRNG Based on MAC Function中,使用MAC來生成偽隨機序列。通常使用HMAC作為構建基於MAC的PRNG的算法。HMAC是一種廣泛使用的標準化MAC函數,在許多協議和應用程序中都有實現。
### 13.1 數位簽章
- 13.1 數位簽章是一種保護數據完整性、真實性和機密性的技術。它通常使用公開金鑰加密技術來實現,可以用於確定數據的來源和完整性,以及確保數據在傳輸過程中不被篡改。
#### 13.1.1 屬性
- 13.1.1 屬性:數位簽章具有保護數據完整性、真實性和機密性的屬性。它可以確定數據的來源和完整性,以及確保數據在傳輸過程中不被篡改。
#### 13.1.2 攻擊和偽造
- 13.1.2 攻擊和偽造:數位簽章可能會受到多種攻擊和偽造的威脅,例如中間人攻擊、重放攻擊、偽造攻擊等。為了保護數位簽章的安全性,需要使用安全的加密算法和金鑰管理技術。
#### 13.1.3 數位簽章的要求
- 13.1.3 數位簽章的要求:數位簽章需要滿足多種要求,例如可驗證性、不可否認性、完整性、真實性、可靠性等。為了滿足這些要求,需要使用安全的加密算法和金鑰管理技術。
#### 13.1.4 直接數位簽章
- 13.1.4 直接數位簽章:直接數位簽章是一種基於公開金鑰加密技術的數位簽章技術。它使用私有金鑰來對數據進行加密,以確定數據的來源和完整
### 13.2 Elgamal 數位簽章方案
- Elgamal 數位簽章方案是一種基於離散對數問題的公開金鑰加密技術,用於生成數位簽章。它是由Taher Elgamal於1985年提出的,是一種非對稱加密技術,使用公開金鑰進行加密,使用私有金鑰進行解密。
- Elgamal 數位簽章方案使用了和 Elgamal 公開金鑰加密方案相同的數學原理,即離散對數問題。它使用了一個大素數p和一個原根g,並將其作為公開參數。私有金鑰是一個隨機選擇的整數x,公開金鑰是一個與x有關的整數y。
- Elgamal 數位簽章方案的簽章過程包括以下步驟:
1. 選擇一個隨機數k,使得1 < k < p-1,並計算r = g^k mod p。
2. 計算s = (H(m) - x*r) * k^-1 mod (p-1),其中H(m)是消息m的哈希值。
3. 簽名是一對(r, s)。
- 驗證簽名的過程包括以下步驟:
1. 計算v1 = g^(H(m)*s^-1 mod (p-1)) * y^(r*s^-1 mod (p-1)) mod p。
2. 如果v1 = r,則簽名有效,否則簽名無效。
- 總之,Elgamal 數位簽章方案是一種基於離散對數問題的公開金鑰加密技術,它可以用于验证数字签名的真实性和完整性,以及确定数字签名的来源。与其他数字签名方案相比,Elgamal 数字签名方案具有较高的安全性和灵活性,可以适用于多种应用场景。但是,它的计算复杂度较高,需要进行多次模幂运算,因此在实际应用中需要进行优化。同时,为了保证数字签名的安全性,需要使用安全的加密算法和密钥管理技术,以及合理的数字签名方案设计。
### 13.3 Schnorr 數位簽章方案
- Schnorr 数字签名方案是一种数字签名技术,它可以用于验证数字签名的真实性和完整性。该方案的主要优点是计算效率高,安全性强。它基于使用一个素数模数p和一个适当大小的素因子q,可以在处理器的空闲时间内完成数字签名的生成。Schnorr 数字签名方案被广泛应用于各种加密和认证场景。
- 安全性
- Schnorr 数字签名方案还具有抗重放攻击、抗伪造攻击等特性,可以有效地防止各种攻击手段。因此,Schnorr 数字签名方案被广泛认为是一种安全可靠的数字签名方案。
### 13.4 NIST 數位簽章演算法
- NIST 数字签名算法是由美国国家标准与技术研究院(NIST)发布的数字签名标准,包括DSA、RSA和椭圆曲线密码学等多种数字签名算法。
#### 13.4.1 DSA 方法
- DSA方法是其中一种基于离散对数问题的数字签名方案,它使用SHA哈希算法来生成消息摘要,并使用公钥和私钥来生成和验证数字签名。DSA方法具有高度的安全性和效率,被广泛应用于各种加密和认证场景。
#### 13.4.2 數位簽章演算法
- 13.4.2 数字签名算法是一种用于验证数字签名的真实性和完整性的技术。它可以用于确定数字签名的来源和防止数字签名被篡改。数字签名算法包括多种不同的方案,如DSA、RSA和椭圆曲线密码学等。这些方案都基于不同的数学原理和算法,具有不同的优缺点和适用场景。在选择数字签名算法时,需要考虑安全性、效率、可靠性等因素,并根据具体的应用场景进行选择。
### 13.5 橢圓曲線數位簽章演算法
- 13.5 椭圆曲线数字签名算法是一种基于椭圆曲线密码学的数字签名方案,它使用椭圆曲线上的点来生成和验证数字签名。椭圆曲线数字签名算法具有高度的安全性和效率,被广泛应用于各种加密和认证场景。
#### 13.5.1 全域定義參數
- 13.5.1 全域定义参数是椭圆曲线数字签名算法中的一个重要概念,它定义了一个椭圆曲线和曲线上的一个基点,以及一个用于生成数字签名的随机数。全域定义参数包括一个素数q、两个整数a和b,它们定义了一个椭圆曲线方程y^2 = x^3 + ax + b mod q,以及一个基点G和一个阶数n,它们用于生成数字签名。
#### 13.5.2 金鑰生成
- 13.5.2 金钥生成是椭圆曲线数字签名算法中的一个重要步骤,它用于生成公钥和私钥。私钥是一个随机数,公钥是基于私钥和全域定义参数计算得到的椭圆曲线上的一个点。金钥生成的过程包括选择一个随机数k,计算公钥Q=kG,私钥为k。
#### 13.5.3 數位簽章的生成和驗證
- 13.5.3 数字签名的生成和验证是椭圆曲线数字签名算法的核心步骤。数字签名的生成包括选择一个随机数k,计算r=x1 mod n,s=k^-1 (H(m)+xr) mod n,其中x1和H(m)分别是消息m的哈希值和椭圆曲线上的一个点。数字签名的验证包括计算w=s^-1 mod n,u1=H(m)w mod n,u2=rw mod n,计算点X=u1G+u2Q,如果X的x坐标等于r,则数字签名有效,否则无效。
- 椭圆曲线数字签名算法的安全性基于椭圆曲线上的离散对数问题,即在椭圆曲线上求解离散对数的难度。相比于传统的RSA数字签名算法,椭圆曲线数字签名算法具有更高的安全性和更小的密钥长度,因此被广泛应用于各种加密和认证场景。
### 13.6 RSA-PSS 數位簽章演算法
- - RSA-PSS 數位簽章演算法通過使用掩碼生成函數和填充機制,提供了一種安全且強大的方法來生成和驗證數位簽章。它能夠抵抗多種攻擊和偽造行為,確保數位簽章的完整性和可靠性。
#### 13.6.1 掩碼生成函數
- 掩碼生成函數(Mask Generation Function,MGF)在 RSA-PSS 數位簽章演算法中扮演著重要的角色。掩碼生成函數使用哈希函數來生成一個隨機的掩碼值,以增加數位簽章的安全性。
- 在 RSA-PSS 中,掩碼生成函數通常使用 MGF1(Mask Generation Function 1),它使用哈希函數來將一個種子值轉換為一個長度可變的掩碼值。MGF1 適用於各種長度的種子值和掩碼值需求。
#### 13.6.2 簽章操作
- 在 RSA-PSS 數位簽章演算法中,簽章操作是生成數位簽章的過程。該操作包括以下步驟:
- 計算要簽章的消息的哈希值。
- 生成隨機的鹽值(salt),並將其與哈希值結合。
- 使用掩碼生成函數(MGF)對鹽值進行掩碼運算,生成一個掩碼值。
- 將掩碼值與鹽值和哈希值結合,並進行適當的填充。
- 使用 RSA 私鑰對填充後的數據進行加密,生成數位簽章。
#### 13.6.3 簽章驗證操作
- 簽章驗證操作是 RSA-PSS 數位簽章演算法中驗證數位簽章的過程。該操作包括以下步驟:
1. 從收到的數位簽章中提取出填充後的數據。
2. 使用 RSA 公鑰對填充後的數據進行解密,得到鹽值和哈希值。
3. 使用掩碼生成函數(MGF)對鹽值進行掩碼運算,生成一個掩碼值。
4. 將掩碼值與鹽值和哈希值結合,並進行適當的填充。
5. 比較填充後的數據與原始消息的哈希值,驗證數位簽章的有效性。
hash 除了資料完整性的保護,hash 函數可能會碰撞,如果可操作碰撞那就是為hash被攻破,hash輸入可能會是變動的,若應用於加密不適合,加密輸入是固定的
ECC 橢圓曲線給一個實際例子,