密碼學
DES加密流程
56比特長度的密鑰K,? 分組長度64比特,密文64比特
初始置換 (IP):將輸入的64位明文塊進行置換,打亂其順序。
分成左右兩半: 將置換后的64位數據分成左右兩部分,每部分32位。
16輪迭代加密: 這是DES的核心,每輪都會進行以下操作:
子密鑰生成: 從56位主密鑰中生成一個48位的子密鑰(每輪都不同)。
F函數運算: 右半部分數據與當前輪的子密鑰經過一系列的擴展(32->48)、異或(子密鑰)、S盒替換(48->32)、P盒置換等復雜操作,產生一個32位的輸出。
異或: 將F函數的輸出與左半部分數據進行異或操作。
左右交換: 將異或后的結果作為新的右半部分,原右半部分作為新的左半部分(最后一輪不交換)。
逆初始置換 (IP-1):16輪迭代完成后,將最終的左右兩半數據合并,再進行一個與初始置換相反的逆置換。
DES子密鑰生成
密鑰選擇置換 1 (PC-1):
首先,將輸入的64位DES主密鑰(雖然是64位,但實際只有56位是有效的,有8位是奇偶校驗位,會被丟棄)。
通過PC-1置換表,將其重排并選擇出56位有效密鑰。這56位密鑰會被分成兩個28位的半部分,分別命名為C0和D0。
16輪循環左移:
對于DES的16輪加密,每一輪都會對C和D進行循環左移操作。
每輪的左移位數是預先定義好的,通常是1位或2位。例如,在第1、2、9、16輪中,各部分左移1位;在其他輪中,各部分左移2位。
左移后得到的新的28位半部分,例如C_i 和 D_i,將用于下一輪的子密鑰生成。
密鑰選擇置換 2 (PC-2):
在每一輪中,將當前輪的C_i 和 D_i (共56位) 組合起來。
通過PC-2置換表,從中選擇出48位,生成本輪使用的48位子密鑰K_i。PC-2的作用是丟棄一部分位(8位)并重新排列剩下的位。
三重DES工作流程
加密過程:
第一次加密 (E1): 明文數據首先使用密鑰 K1 進行DES加密。
第一次解密 (D1): 加密后的數據再使用密鑰 K2 進行DES解密。
第二次加密 (E2): 解密后的數據最后再次使用密鑰 K1 進行DES加密。
為什么是解密而不是加密? 這種設計是為了兼容早期的單DES系統。如果 K1 = K2,那么 3DES 加密就等同于單DES加密(第一次加密和第一次解密會相互抵消,只剩下第二次加密)。
解密過程:
第一次解密 (D1): 密文數據首先使用密鑰 K1 進行DES解密。
第一次加密 (E1): 解密后的數據再使用密鑰 K2 進行DES加密。
第二次解密 (D2): 加密后的數據最后再次使用密鑰 K1 進行DES解密。
DES的缺陷
密鑰長度過短;潛在的后門和S盒設計爭議;DES存在一些弱密鑰和半弱密鑰
*IDEA
分組長度為64位 密鑰長度為128位(抗強力攻擊能力比DES強),同一算法既可加密也可解密。
基本上只要知道他的三種運算:異或運算;整數模2^16加; 整數模2^16+1乘(IDEA的S盒)
AES加密流程
分組長度128字節
10輪 用于128位密鑰
12輪 用于192位密鑰
14輪 用于256位密鑰
a. SubBytes(字節替代)混淆
這是一個非線性代換操作。
數據塊中的每個字節都會根據一個預定義的S盒(Substitution Box)進行獨立的替換。S盒是一個256個字節的查找表,將每個輸入字節映射到一個獨特的輸出字節。
b. ShiftRows(行位移)擴散
這是一個線性置換操作。
數據塊被視為一個4×4的字節矩陣(16字節數據塊,每行4字節)。
矩陣的行會進行循環左移操作,且每行的位移量不同:
第0行:不位移。
第1行:循環左移1字節。
第2行:循環左移2字節。
第3行:循環左移3字節。
列混合也是擴散,但是比較繁瑣
分組密碼工作模式
1. ECB (Electronic Codebook) 模式 - 電子密碼本模式
工作原理: 這是最簡單、最直接的模式。每個明文數據塊都獨立地用相同的密鑰進行加密。
主要缺陷(不安全):
不隱藏數據模式: 如果明文中存在重復的數據塊,加密后也會產生重復的密文塊。這會泄露明文的模式,使得攻擊者可以識別和操縱重復的數據,甚至進行替換攻擊。
不適合加密長數據: 尤其不適合加密圖像、視頻等具有大量重復模式的數據,因為加密后的圖像會保留原始圖像的輪廓。
2. CBC (Cipher Block Chaining) 模式 - 密碼分組鏈接模式
工作原理: CBC模式引入了反饋機制,使每個密文塊都依賴于之前的明文塊和密文塊。
關鍵概念: 初始化向量 (Initialization Vector, IV)。IV是一個與密鑰獨立、隨機且不重復的128位(或與分組大小相同)的隨機數。它在加密開始時與第一個明文塊進行異或。
主要缺陷:
- 誤差傳播: 加密時一個密文塊的錯誤會影響所有后續解密的明文塊。解密時一個密文塊的錯誤只會影響當前和下一個明文塊。
3. CFB (Cipher Feedback) 模式 - 密文反饋模式
工作原理: CFB模式將分組密碼轉換為流密碼(Stream Cipher)。它不直接加密整個明文塊,而是加密前面產生的密文,然后與明文進行異或。假設plaintext是j bit,那么他每次會移動IV寄存器里面的j bit,因此可能會造成錯誤傳播。
4. OFB (Output Feedback) 模式 - 輸出反饋模式
工作原理: OFB模式也把分組密碼轉換為流密碼,但與CFB不同的是,它將分組密碼的輸出反饋到移位寄存器中,而不是密文。
5. CTR (Counter) 模式 - 計數器模式
工作原理: CTR模式也是將分組密碼轉換為流密碼,但它使用一個不斷遞增的計數器(Counter)作為輸入,每次加密計數器的值來生成密鑰流。
RSA工作原理
Elgma工作原理
序列密碼工作原理
同步序列密碼: 密鑰流的生成獨立于明文和密文,只依賴于密鑰和IV。發送方和接收方必須保持密鑰流同步。
例子:RC4
自同步序列密碼: 密鑰流的生成依賴于密鑰和之前的密文位。這意味著接收方可以根據接收到的密文自動同步密鑰流。
?線性反饋移位寄存器和狀態轉移圖(自己勾起一下回憶)
以及對應的升級版
哈希函數工作原理以及作用
哈希函數(Hash Function),也稱為散列函數或摘要函數,是一種將任意長度的輸入數據(也稱為“消息”)映射為固定長度輸出(稱為“哈希值”、“散列值”、“消息摘要”或“指紋”)的算法。
作用:數據完整性驗證、口令(密碼)存儲、數字簽名、MAC
常見的哈希算法: MD5 (已不安全,僅用于完整性校驗)、SHA-1 (已不安全)、SHA-256、SHA-512 (SHA-2家族)、SHA-3。
Diffie-Hellman 密鑰交換過程
首先,愛麗絲和鮑勃(以及潛在的竊聽者伊芙)需要公開協商并同意使用兩個大的公共參數:
大素數 p: 一個非常大的素數,用作模數。
生成元 g
離散對數問題是什么、圓錐曲線問題、大整數分解
給定一個循環群 G、它的一個生成元 g,以及群中的一個元素 y,找到整數 x 使得 g^x=y
這是離散對數問題在橢圓曲線上的變體。給定一個定義在有限域上的橢圓曲線 E、曲線上的一個基點 G、以及曲線上的另一個點 Q,找到整數 k 使得 Q=kG(即點 G 自加 k 次得到點 Q)。
給定一個非常大的合數 N(它是兩個或多個大素數的乘積),找到它的所有素因子。
HMAC
完整性和認證性的機制
將密鑰填充或截斷到哈希函數塊大小。
將填充后的密鑰與一個內部填充(IPAD)進行異或。
將結果與消息進行拼接,然后進行一次哈希運算。
將填充后的密鑰與一個外部填充(OPAD)進行異或。
將上一步的結果與第一次哈希的輸出進行拼接,再進行第二次哈希運算。
數字簽名
簽名過程:
發送方(簽名者)首先對原始消息計算一個哈希值(消息摘要)。
然后,發送方使用自己的私鑰對這個哈希值進行加密。加密后的哈希值就是數字簽名。
發送方將原始消息和數字簽名一起發送給接收方。
驗證過程:
接收方收到消息和數字簽名后,首先用發送方的公鑰解密數字簽名,得到一個哈希值。
同時,接收方對接收到的原始消息也計算一個哈希值。
如果這兩個哈希值完全一致,則說明:
消息完整(未被篡改),因為任何篡改都會導致哈希值不同。
消息確實是由聲稱的發送方發送的(認證),因為只有擁有對應私鑰的人才能生成有效的簽名。
發送方無法否認自己發送過這條消息(不可否認性),因為只有他持有生成簽名的私鑰。
數字證書
用戶/實體生成密鑰對:一個用戶或服務器生成一個公鑰和私鑰對。
證書申請:用戶將自己的公鑰和身份信息(如域名、組織名稱等)提交給CA。
CA驗證并簽名:CA驗證申請者的身份。如果驗證通過,CA會用自己的私鑰對包含用戶公鑰和身份信息的整個數據塊進行數字簽名,形成數字證書。
證書發布:CA將簽發后的數字證書發給用戶。用戶可以將此證書(包含公鑰)公開給他人。
區塊鏈安全的技術
密碼學哈希函數:
工作原理: 區塊鏈中的每個區塊都包含前一個區塊的哈希值(頭部哈希)。任何對歷史數據的篡改都會改變對應區塊的哈希值,進而改變后續所有區塊的哈希值,這種變化很容易被檢測到。
作用: 確保數據完整性和不可篡改性。
數字簽名(非對稱加密):
工作原理: 區塊鏈上的每筆交易都由發起者使用其私鑰進行數字簽名。只有擁有正確私鑰的人才能發起有效交易。
作用: 確保交易的認證性和不可否認性。
去中心化與分布式共識:
工作原理: 區塊鏈沒有中央服務器,所有交易和區塊都分布在網絡中成千上萬的節點上。新區塊的添加需要通過共識機制(如工作量證明 PoW、權益證明 PoS)由網絡中的多數節點確認。
作用: 極大地提高了系統的抗審查性和抗單點故障能力。攻擊者需要控制網絡中絕大多數(如51%)的計算能力才能篡改數據,這在大型公共區塊鏈中幾乎不可能實現。
默克爾樹(Merkle Tree):
工作原理: 每個區塊中的所有交易都會被組織成一個默克爾樹,樹的根哈希(默克爾根)包含在區塊頭中。
作用: 允許高效地驗證區塊中某個交易的存在和完整性,而無需下載整個區塊的所有交易。
雙因素驗證
雙因素驗證 (2FA) 是一種安全機制,要求用戶提供兩種不同類型的憑證來驗證其身份,才能獲得對系統、應用程序或賬戶的訪問權限。這比單因素驗證(只使用密碼)更安全,因為即使一個因素被攻破,攻擊者也難以獲得訪問權限。
工作原理: 2FA通常結合以下三種類型中的兩種:
你所知道的: 密碼、PIN碼、安全問題答案等。
你所擁有的: 手機(接收短信驗證碼)、硬件令牌(U盾、YubiKey)、智能卡、認證器App(如Google Authenticator)。
你所是: 生物特征(指紋、面部識別、虹膜掃描)
零信任安全模型
零信任(Zero Trust) 是一種網絡安全理念和架構,其核心原則是**“永不信任,始終驗證”(Never Trust, Always Verify)**。
側信道攻擊
它不直接攻擊密碼算法本身,而是通過分析加密設備在執行密碼操作時泄漏的物理信息來推斷秘密密鑰或其他敏感數據。
電磁輻射、功耗分析
訪問控制
近世代數
群:封閉性、結合律、單位元、逆元
子群:一樣
環:
編譯原理六步驟
1. 詞法分析(將代碼分割成token);2. 語法分析(構建語法樹);3. 語義分析(進行類型檢查等);4. 中間代碼生成與優化;5. 目標代碼生成。
訪問控制
信息安全中的一個核心概念,指的是“在計算機系統中,誰(主體)可以對什么(客體)執行何種操作(權限)”。它的目標是確保系統資源只能被授權的用戶或進程,以授權的方式進行訪問。常見的訪問控制模型包括:自主訪問控制(DAC)、強制訪問控制(MAC)以及目前最廣泛使用的基于角色的訪問控制(RBAC),后者通過為用戶分配角色來簡化權限管理。
軟件安全
一種主動的安全理念和實踐,強調在軟件開發的整個生命周期(SDLC)中構建安全,而不是在開發完成后進行“修補”。它涉及在需求、設計、編碼、測試和部署等各個階段融入安全活動,例如:在設計階段進行威脅建模,在編碼階段遵循安全編碼規范以避免常見漏洞(如緩沖區溢出、SQL注入),以及在測試階段使用靜態/動態代碼分析(SAST/DAST)和滲透測試,部署階段采用審計。其目標是交付本身就具有安全彈性的軟件。
Paxos共識 (Paxos Consensus)
它通過一個“兩階段提交”式的協議(Prepare-Accept階段)來實現,引入了提案者(Proposer)和接受者(Acceptor)等角色。
棧溢出
棧上的局部變量(緩沖區)被溢出后,最常覆蓋的目標是存儲在它高地址處的函數返回地址。
ROP
操作系統引入了 NX (No-Execute) / DEP (Data Execution Prevention) 保護,使得棧、堆等數據區域的內存不可執行。
利用程序本身已有的、位于代碼段(可執行)的代碼片段。這些代碼片段通常以 ret
指令結尾,被稱為 gadget。
常見保護機制及其繞過
NX / DEP (數據執行保護)
作用:禁止數據頁(如棧、堆)的代碼執行。
繞過:使用 ROP 技術。
Canary (棧金絲雀)
作用:在函數序言(prologue)中,向棧上返回地址前的位置插入一個隨機的數值(稱為 Canary)。在函數返回前,檢查這個數值是否被改變。
繞過:泄露 Canary:如果存在格式化字符串等漏洞,可以先泄露出 Canary 的值,然后在溢出時用同樣的值覆蓋回去,欺騙檢查機制
ASLR (Address Space Layout Randomization - 地址空間布局隨機化)
作用:程序每次啟動時,其棧、堆、共享庫(如
libc.so
)的基地址都會被隨機化。這使得攻擊者無法預知 ROP gadgets 或system
函數的絕對地址。繞過:計算偏移:由于同一個庫文件內部函數之間的相對偏移是固定的,一旦知道了其中一個函數的實際地址,就可以通過減去它在原文件中的偏移,計算出這個庫的基地址。之后,就可以計算出
system
等任何其他函數的實際地址。
PIE (Position-Independent Executable - 位置無關可執行文件)
作用:這是針對程序主文件的 ASLR。如果開啟了 PIE,程序自身的代碼段(
.text
)基地址也會被隨機化。繞過:方法與繞過 ASLR 類似,需要先泄露出程序自身的某個地址,然后計算出主程序的基地址,才能找到主程序中的 gadgets。
國密
SM2 - 橢圓曲線公鑰密碼算法:屬于非對稱加密算法,用于替代 RSA 算法。它主要用于數字簽名、密鑰交換和公鑰加密。
SM3 - 哈希算法:屬于密碼雜湊算法,用于替代 MD5/SHA-1/SHA-256。它產生一個 256 位的哈希值,用于驗證數據完整性、數字簽名等。
SM4 - 分組密碼算法:屬于對稱加密算法,用于替代 DES/AES。它是一個分組密碼,用于無線局域網、數據加密等場景,保障數據保密性。
SM9 - 標識密碼算法:一種特殊的公鑰密碼體系,用戶的公鑰可以直接是其身份標識(如郵箱、手機號),無需提前申請數字證書,簡化了密鑰管理。
bcrypt
自動加鹽 (Salting):在哈希計算前,bcrypt 會自動生成一個隨機的“鹽值”(Salt),并將其與密碼結合。這意味著即使兩個用戶設置了完全相同的密碼,由于鹽值不同,他們存儲在數據庫中的哈希值也是完全不同的。這有效抵御了“彩虹表”攻擊。
橢圓曲線密碼 (Elliptic Curve Cryptography, ECC) 工作原理
定義一條曲線和基點:首先,所有參與者都公開約定使用一條特定的橢圓曲線方程(如
y2 = x3 + ax + b
)和一個曲線上的起始點,稱為基點G
。生成私鑰:用戶 Bob 隨機選擇一個非常大的整數
k
作為自己的私鑰。這個k
是絕對保密的。生成公鑰:Bob 通過在橢圓曲線上對基點
G
進行k
次“點加”運算,得到一個新的點P
。即P = k * G
(這里的乘法是橢圓曲線上的特殊運算,不是常規乘法)。這個點P
就是 Bob 的公鑰,可以公開給任何人。
零知識證明
零知識證明(常被誤稱為零知識加密)是一種密碼學協議,它允許一方(證明者 Prover)向另一方(驗證者 Verifier)證明自己知道某個秘密信息,而無需透露這個秘密信息本身以及任何其他相關信息。
可驗證計算
可驗證計算是一種允許一個計算能力較弱的客戶端(驗證者 Verifier)將一個復雜的計算任務外包給一個強大的、但可能不被信任的服務器(證明者 Prover),并能夠高效地驗證服務器返回結果是否正確的技術。
差分隱私
通過向查詢結果中添加經過精確計算的隨機噪聲 (Noise),使得“包含某個特定用戶的數據集”和“不包含該用戶的數據集”在進行相同查詢時,其返回結果的概率分布幾乎沒有差別。
群簽名
群簽名是一種特殊的數字簽名方案,它允許一個群組中的任何一個成員,以匿名的方式代表整個群組對消息進行簽名。
密鑰生命周期
生成;分發;存儲;使用;備份;更新;停用;撤銷