Mobile BI 移動商務(wù)智能的加密算法

這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密算法。

文章的具體內(nèi)容包括:序言對稱密鑰加密(分組密碼、DES、3DES、AES),非對稱密鑰加密(RSA、ECC、數(shù)字簽名),消息摘要算法(MD5、SHA、MAC、HMAC),編碼(Base64),破解(暴力破解法、字典攻擊、彩虹表、旁道攻擊、中間人攻擊、長度擴展攻擊、重放攻擊、碰撞攻擊、代數(shù)攻擊),引用

序言

BI應(yīng)用的主要對象是對數(shù)據(jù)安全非常敏感的企業(yè),這就要求我們在Mobile BI的開發(fā)過程中要特別注意對數(shù)據(jù)的存儲、通信、驗證等進行保護,而加密算法可以防止數(shù)據(jù)的讀取確保數(shù)據(jù)的完整性以及實現(xiàn)身份認證,這篇文章對應(yīng)用普遍的加密算法進行簡單的介紹,以便在后繼Mobile BI安全功能的講解中可以對安全功能實現(xiàn)的理論基礎(chǔ)有一個清晰的認知。

加密算法可以簡單的分為“對稱密鑰加密算法”和“非對稱密鑰加密算法”,這是以加解密過程中使用的密鑰是否相同來區(qū)分的:

  • “對稱加密算法”是指加密和解密使用同一個密鑰,一般而言,算法的強度與密鑰的長度成正比,涉及的加密算法包括:AES、DES、Triple DES、RC2、RC4、IDEA、Camellia等。
  • “非對稱密鑰加密算法”是指加密和解密使用不同的密鑰,通常包括兩個密鑰,一個公鑰,可以對外公開,一個私鑰,只有自己知道,這種算法現(xiàn)在的主要應(yīng)用是在開放且不安全的網(wǎng)絡(luò)上認證身份。這里涉及的加密算法包括:RSA、DSA、Diffie-Hellman等。

此外,如果不需要保證消息可以被完整的讀取出來,只需要驗證消息本身,還有消息摘要這類算法。摘要算法多用于信息的比對和驗證,使得在不暴露原始信息,以及縮小比對量的情況下保證結(jié)果的正確性,這里涉及的算法包括:MAC、MD5、SHA1、SHA256等。

對稱密鑰加密

對稱密鑰加密 Symmetric Key Algorithm 又稱為對稱加密、私鑰加密、共享密鑰加密:這類算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單的相互推算的密鑰,對稱加密的速度一般都很快。

分組密碼

分組密碼 Block Cipher 又稱為“分塊加密”或“塊加密”,將明文分成多個等長的模塊,使用確定的算法和對稱密鑰對每組分別加密解密。這也就意味著分組密碼的一個優(yōu)點在于可以實現(xiàn)同步加密,因為各分組間可以相對獨立。

與此相對應(yīng)的是流密碼:利用密鑰由密鑰流發(fā)生器產(chǎn)生密鑰流,對明文串進行加密。與分組密碼的不同之處在于加密輸出的結(jié)果不僅與單獨明文相關(guān),而是與一組明文相關(guān)。

分組密碼的工作模式 Block cipher mode of operation 描述加密每一個數(shù)據(jù)塊的過程,包括加密和認證的過程:

初始化向量
初始化向量 IV Initialization Vector 用于將加密隨機化,以便同樣的明文被多次加密也會產(chǎn)生不同的密文。

IV通常不需要保密,但不應(yīng)該在使用同一密鑰的情況下使用同一個IV。重用IV在CBC和CFB下會導(dǎo)致泄露明文首個塊的某些信息,而在OFB和CTR下會導(dǎo)致完全失去安全性。

填充
填充 Padding,塊密碼只能對確定長度的數(shù)據(jù)塊進行處理,而消息的長度通常都是可變的,因此在一些模式下,比如ECB、CBC,需要對最后一塊數(shù)據(jù)在加密前進行填充。

位填充:在信息后添加一個“設(shè)定”位"1",再添加“重設(shè)”位"0"至要求大小。此方法可用于填充任意長度的信息。... | 1011 1001 1101 0100 0010 0111 0000 0000 |

字節(jié)填充:用于可編碼為整數(shù)字節(jié)大小的信息

  • ANSI X.923:使用"0"填充,直到最后一個字節(jié)定義填充的界限或者填充的字節(jié)數(shù) ... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
  • ISO 10126:使用隨機數(shù)填充,直到最后一個字節(jié)定義填充的界限 ... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
  • PKCS7:使用需要填充的字節(jié)數(shù)為值來填充 ... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |
  • Zero Padding:直接使用"0"來填充 ... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |

電子密碼本
電子密碼本 ECB Electronic Codebook 模式:需要加密的消息按照塊密碼的塊大小被分為數(shù)個塊,并對每個塊進行獨立加密。這個模式的優(yōu)點在于模式簡單、有利于并行計算、誤差也不會被傳遞;但問題在于同樣的明文塊會被加密成相同的密文塊,因此不能很好的隱藏數(shù)據(jù)模式。

可以參考下圖,這種模式比較容易受到重放攻擊[Replay attack]:(https://en.wikipedia.org/wiki/Replay_attack)的威脅

密文分組鏈接
密文分組鏈接 CBC Cipher Block Chaining 模式:這種模式要求消息填充,以便保證每一個明文塊都是完整的一塊,每個明文塊先與前一個密文塊進行異或后加密,這樣每個密文塊都依賴于它前面的所有明文塊,而對于第一個塊,需要使用初始化向量。這種模式的優(yōu)點在于較好的安全性,但是加密過程是串行的,也就是不利于并行運算,可導(dǎo)致誤差傳遞,但是反過來的話,從相鄰的兩個密文塊即可得到一個明文塊,所以解密的過程是可以并行的。

填充密碼塊鏈接
填充密碼塊鏈接 PCBC Propagating Cipher Block Chaining, 或稱為明文密碼塊鏈接 Plaintext Cipher Block Chaining:可以使密文中的微小更改在解密時導(dǎo)致明文大部分錯誤的模式,并在加密的時候也具有相同的特性,這種方式主要用于Kerberos V4。

密文反饋
密文反饋 CFB Cipher Feedback 模式類似于CBC,可以將塊密碼變?yōu)樽酝降牧髅艽a,工作過程也類似,CFB的解密過程即使顛倒的CBC的加密過程。這種模式隱藏了明文模式,使得分組密碼轉(zhuǎn)化成了流模式,可以及時加密傳送小于分組的數(shù)據(jù),而不需要數(shù)據(jù)填充。而缺點與CBC類似,加密不能并行化,但解密可以。

輸出反饋
輸出反饋模式 OFB Output Feedback 將塊密碼變成同步的流密碼,用產(chǎn)生的密碼流的塊,與明文塊做異或,得到密文。同樣的,這種模式隱藏了明文模式,使得分組密碼轉(zhuǎn)化成了流模式,可以及時加密傳送小于分組的數(shù)據(jù),而不需要數(shù)據(jù)填充,而缺點是不能并行化。

計數(shù)器模式
計數(shù)器模式 CTR Counter Mode 同樣將塊密碼變?yōu)榱髅艽a,通過遞增一個加密計數(shù)器以產(chǎn)生連續(xù)的密鑰流,加解密過程均可以進行并行處理。

DES、3DES

數(shù)據(jù)加密標(biāo)準 DES Data Encryption Standard 是由IBM在美國國家安全局NSA授權(quán)下研制的一種使用56位密鑰的分組密碼算法,并于1977年被美國國家標(biāo)準局NBS公布成為美國商用加密標(biāo)準。但是因為DES固定的密鑰長度,逐漸的不再符合在開放式網(wǎng)絡(luò)中的安全要求,已經(jīng)于1998年被移出商用加密標(biāo)準,被更安全的AES標(biāo)準替代。

DES使用的Feistel Network網(wǎng)絡(luò)屬于對稱的密碼結(jié)構(gòu),對信息的加密和解密的過程極為相似或趨同,使得相應(yīng)的編碼量和線路傳輸?shù)囊笠矞p半。

DES是塊加密算法,將消息分成64位,即16個十六進制數(shù)為一組進行加密,加密后返回相同大小的密碼塊,這樣,從數(shù)學(xué)上來說,64位0或1組合,就有2^64種可能排列。DES密鑰的長度同樣為64位,但在加密算法中,每逢第8位,相應(yīng)位會被用于奇偶校驗而被算法丟棄,所以DES的密鑰強度實為56位。

3DES Triple DES,使用不同Key重復(fù)三次DES加密,加密強度更高,當(dāng)然速度也就相應(yīng)的降低。

AES

高級加密標(biāo)準 AES Advanced Encryption Standard 為新一代數(shù)據(jù)加密標(biāo)準,速度快,安全級別高。由美國國家標(biāo)準技術(shù)研究所NIST選取Rijndael于2000年成為新一代的數(shù)據(jù)加密標(biāo)準。

AES的區(qū)塊長度固定為128位,密鑰長度可以是128位、192位或256位。AES算法基于Substitution Permutation Network代換置列網(wǎng)絡(luò),將明文塊和密鑰塊作為輸入,并通過交錯的若干輪代換"Substitution"和置換"Permutation"操作產(chǎn)生密文塊。

AES加密過程是在一個4*4的字節(jié)矩陣(或稱為體State)上運作,初始值為一個明文區(qū)塊,其中一個元素大小就是明文區(qū)塊中的一個Byte,加密時,基本上各輪加密循環(huán)均包含這四個步驟:

AddRoundKey


“合并”:矩陣中的每個字節(jié)與該回合密鑰做XOR亦或運算,其中回合密鑰由主密鑰通過Rijndael密鑰生成方案生成,這個密鑰大小跟原矩陣一致。

SubBytes


“替換”:矩陣中的每個字節(jié)通過一個8位查找表對應(yīng)的特定字節(jié)所替換。這里的8位查找表為S-box(Substitution-box, 置換盒),用來模糊密鑰與密文之間的關(guān)系,實現(xiàn)輸入輸出的非線性特征。

ShiftRows


“行混淆”:矩陣中的每一行的各個字節(jié)循環(huán)向左方位移,位移量隨行數(shù)遞增。

MixColumns


“列混淆”:每一列的四個字節(jié)通過線性變換互相結(jié)合,即與一個固定的多項式做乘法。

安全性
已知的針對AES唯一的成功攻擊是旁道攻擊,2005年時使用緩存時序攻擊法,破解了一個裝載OpenSSL AES加密系統(tǒng)的客戶服務(wù)器。

針對區(qū)塊加密系統(tǒng)最常見的方式,是通過對加密循環(huán)次數(shù)較少的版本嘗試攻擊,然后改進算法后繼續(xù)攻擊高級版本,目前這個破解方法還不太實用。

另外由于AES的數(shù)據(jù)結(jié)構(gòu)具有井然有序的代數(shù)結(jié)構(gòu),有一個擔(dān)心就是相關(guān)的代數(shù)攻擊,目前基于此的有效攻擊方法也暫時沒有出現(xiàn)。

非對稱密鑰加密

非對稱密鑰加密 Asymmetric Key Cryptography 也可稱為 Public Key Cryptography 公開密鑰加密:需要兩個密鑰,分為公鑰和私鑰,一個用作加密而另外一個只能用于解密,而加密的密鑰并不能用來解密。

根據(jù)此特性,除了加解密的應(yīng)用外,還可以確保數(shù)字簽名的功能:某用戶用私鑰加密明文,任何人都可以用該用戶的公鑰解密密文,以此判定身份。

對稱密鑰需要一個安全的渠道可以交換共用的密鑰,而非對稱密鑰可以講加密公鑰公開發(fā)布;不過公鑰加密在計算上相當(dāng)復(fù)雜,性能遠比不上對稱加密,所以一般會利用公鑰加密來交換對稱密鑰,然后依靠對稱密鑰來傳輸具體的信息。

RSA

RSA是由三個人的名字組成 Ron Rivest、Adi Shamir、Leonard Adleman于1977年在MIT提出,并于1987年公布,是目前最常用的公鑰加密算法。

RSA算法的核心是極大整數(shù)的因式分解,理論基礎(chǔ)在于由兩個大質(zhì)數(shù)算出乘積很容易,但是要從一個極大整數(shù)因式分解得出兩個質(zhì)數(shù)卻很難。

RSA算法

隨機選取兩個不相等的質(zhì)數(shù) p、q
計算p、q的乘積 n = p*q
計算n的歐拉函數(shù) ??(n) = (p-1)(q-1)
p、q會被銷毀
隨機選取整數(shù)e,滿足條件 1<e<??(n),且e與??(n) 互質(zhì)
計算e對于??(n)的模反元素,整數(shù)d: ed ≡ 1 (mod ??(n))
這樣n、e、d即為密鑰相關(guān)數(shù)值,而通過冪運算取余實現(xiàn)加解密:
  公鑰 (n, e): 信息 m 實現(xiàn)加密 c   m? ≡ c (mod n)
  私鑰 (n, d): 密文 c 實現(xiàn)解密 m   c? ≡ m (mod n)

歐拉函數(shù):??(n)是指小于n的正整數(shù)中與n互質(zhì)的數(shù)的數(shù)目,而歐拉函數(shù)符合積性函數(shù),這也就意味著??(n)=??(pq)=??(p)??(q),而p\q為質(zhì)數(shù),也就意味著所有小于p\q的數(shù)都與p\q互質(zhì),也就是??(p)=p-1, ??(q)=q-1,這樣最終可以得到公式??(n) = (p-1)(q-1)

模算數(shù)的同余關(guān)系 a≡b(mod n) 是指對于正整數(shù)n,兩個整數(shù)a和b對于模n同余。

模反元素、模逆元是指存在整數(shù)d,使得ed被??(n) 除的余數(shù)為1,即ed ≡ 1 (mod φ(n)),等價于ed - 1 = kφ(n),而一般為得到d,即是對ex + φ(n)y = 1這個二元一次方程求解。

歐拉定理表明若n、a為正整數(shù)且互質(zhì),則a^φ(n) ≡ 1(mod n)。具體的證明加解密函數(shù)的正確性可以參見RSA算法原理

相比其他對稱算法,RSA要慢得多。在密鑰分配過程中,信息可能通過“中間人攻擊”被截取,所以一般需要通過可靠的第三方機構(gòu)簽發(fā)證書來防止這種攻擊。另外一種被稱為“時間攻擊”的方法,根據(jù)對特定消息加密時所需要的時間來判斷對應(yīng)的加密信息,這是因為RSA里面加密時所作的模指數(shù)運算是一個比特一個比特進行的,而比特為1時所花的運算比比特為0時的運算多很多,利用這個特性可以推導(dǎo)私鑰的內(nèi)容。當(dāng)然,最通用的破解是大數(shù)因式分解,這個取決于計算機的計算能力。

ECC

ECC即 Elliptic Curve Cryptography 橢圓曲線密碼學(xué),是基于橢圓曲線數(shù)學(xué)建立公開密鑰加密的算法。ECC的主要優(yōu)勢是在提供相當(dāng)?shù)陌踩燃壡闆r下,密鑰長度更小。

ECC的原理是根據(jù)有限域上的橢圓曲線上的點群中的離散對數(shù)問題ECDLP,而ECDLP是被因式分解問題更難的問題,是指數(shù)級的難度。而ECDLP定義為:給定素數(shù)p和橢圓曲線E,對Q=kP,在已知P,Q 的情況下求出小于p的正整數(shù)k。可以證明由k和P計算Q比較容易,而由Q和P計算k則比較困難。

是不是有點繞,好吧,我數(shù)學(xué)也差不多忘光了,了解一下是什么就可以了~~

數(shù)字簽名

數(shù)字簽名 Digital Signature 又稱公鑰數(shù)字簽名是一種用來確保數(shù)字消息或文檔真實性的數(shù)學(xué)方案。一個有效的數(shù)字簽名需要給接收者充足的理由來信任消息的可靠來源,而發(fā)送者也無法否認這個簽名,并且這個消息在傳輸過程中確保沒有發(fā)生變動。

數(shù)字簽名的原理在于利用公鑰加密技術(shù),簽名者將消息用私鑰加密,然后公布公鑰,驗證者就使用這個公鑰將加密信息解密并對比消息。一般而言,會使用消息的散列值來作為簽名對象。

消息摘要算法

散列函數(shù) Hash Function 又可稱為散列算法、哈希函數(shù),是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字“指紋”的方法。散列函數(shù)具有一個基本特性:如果兩個散列值是不相同的,那么這兩個散列值的原始輸入也是不相同的。這個特性是散列函數(shù)具有確定性的結(jié)果,而相應(yīng)的散列函數(shù)即被稱為單向散列函數(shù)。但是如果散列值相同,兩個輸入值可能相同也可能不同,這種情況成為散列碰撞。

密碼散列函數(shù) Cryptographic Hash Function 又可稱為加密散列函數(shù)、密碼散列函數(shù),屬于散列函數(shù)的一種,是一種單向函數(shù),它將一個不定長的輸入數(shù)據(jù)轉(zhuǎn)換成固定大小的結(jié)果,并且以這個結(jié)果很難回推輸入的數(shù)據(jù)。這種散列函數(shù)的輸入數(shù)據(jù),通常被稱為消息Message,而輸出的結(jié)果,經(jīng)常被稱為消息摘要Message Digest或摘要Digest。總的來說,密碼散列函數(shù)具有如下的重要特征:

  • 具有確定性,即同樣的消息輸入具有同樣的散列結(jié)果。
  • 對于任何一個給定的消息,能夠快速運算出散列數(shù)值
  • 難以由一個已知的散列數(shù)值,去推算原始的消息
  • 對于消息的任何微小的改動,都會導(dǎo)致散列結(jié)果的巨大改變
  • 兩個不同的消息輸入,一定會產(chǎn)生不同的散列數(shù)值

除了被用作傳統(tǒng)的哈希函數(shù),而在數(shù)據(jù)索引、指紋等方面應(yīng)用外,密碼散列函數(shù)在信息安全方面有很多的應(yīng)用,包括數(shù)字簽名、消息認證碼、以及各種形式的認證。

MD5

消息摘要算法 MD5 Message Digest Algorithm 是一種密碼散列函數(shù),可以產(chǎn)生出一個128位,即16字節(jié)的散列值,用于確保信息的完整性。MD5由MD4、MD3、MD2改進而來,主要是增強了算法的復(fù)雜度和不可逆性。MD5目前已被證實無法防止碰撞攻擊,所以不適用于安全性認證,即不可用于SSL公開密鑰認證、數(shù)字簽名等方面。但是MD5具有簡單、穩(wěn)定、快速的特征,所以在一些普通數(shù)據(jù)的錯誤檢查應(yīng)用中依然被廣泛應(yīng)用,比如文件下載的MD5校驗和。

MD5以512位分組處理輸入的信息,每一組又被劃分為16個32位子分組,經(jīng)過特定的程序流程,生成四個32位分組數(shù)據(jù),最終這四組數(shù)據(jù)結(jié)合成128位的散列值作為最終的結(jié)果。

具體的算法過程為:

信息填充:使用起始1依次0的填充方式,將信息填充為對512求余為448,再加上最后一個64位的數(shù)字代表填充前的信息長度,最終結(jié)果為512的整數(shù)倍。

鏈接變量:MD5擁有4個32位的鏈接變量Chaining Variable作為整數(shù)參數(shù) A=0x01234567, B=0x89abcdef, C=0xfedcba98, D=0x76543210 這其實是一個固定的常量狀態(tài)

四輪循環(huán):每輪循環(huán)的次數(shù)即是信息中512位信息分組的數(shù)目,而每輪循環(huán)分別采用如下圖中的一種函數(shù)

如圖所示為一次MD5運算:MD5的四輪循環(huán)共包括64次此種運算,每輪由16次MD5運算構(gòu)成。這里的F是一個非線性函數(shù),一個函數(shù)用在一次循環(huán)中。Mi代表32位的輸入消息塊,Kj代表32位的常量,<<<s代表左位移s位,"田"字代表模加運算。

簡單地說,MD5算法的核心其實就是用512位的信息塊來改變128位鏈接變量的狀態(tài),最終的狀態(tài)即是128輸出散列值。

SHA

安全散列算法 SHA Secure Hash Algorithms 包括一個密碼散列函數(shù)家族,是FIPS所認證的安全散列算法。

SHA-0:1993年發(fā)布,160位散列函數(shù),存在嚴重缺陷被很快撤回,為SHA-1的前身。

SHA-1:1995年發(fā)布,160位散列函數(shù),類似于MD5的算法,在很多安全協(xié)議中廣為使用,比如TLS、SSL、SSH等,被視為MD5的后繼者,2015年被Google正式宣布攻破。

SHA-2:2001年發(fā)布,擁有兩組散列函數(shù),包括32位字的SHA-256以及64位字的SHA-512,它還包括各種變種SHA-224、SHA-384、SHA-512/224、SHA-512/256(后綴數(shù)字即散列位數(shù)),尚未被有效攻破,但算法與SHA-1類似。

SHA-3:2005年發(fā)布,支持SHA-2的相同散列長度,但內(nèi)部結(jié)構(gòu)得到很大的更新,作為一個未來可替換的加密散列算法存在。

目前主流使用SHA-2,比如SHA-256,其算法過程與MD5類似:

  • 首先SHA-256對于輸入報文有最大不超過2^64位的限制,輸入依然按照512位分組,產(chǎn)生的是256位的報文摘要。
  • 填充比特位以1開始順位0,直至模512至448位,最后64位位原始報文的長度。
  • 初始狀態(tài)變量為256位,為8個32位 A=0x6A09E667, B=0xBB67AE85, C=0x3C6EF372, D=0xA54FF53A, E=0x510E527F, F=0x9B05688C, G=0x1F83D9AB, H=0x5BE0CD19
  • 循環(huán)計算處理512位輸入報文分組,每組迭代64次計算

與MD5類似,簡單地說,SHA256算法的核心就是用512位的信息塊來改變256位鏈接變量的狀態(tài),最終的狀態(tài)即是256輸出散列值。

MAC

消息認證碼 MAC Message Authentication Code,又稱為消息鑒別碼、文件消息認證碼、訊息鑒別碼、信息認證碼等,是指經(jīng)過特定算法后產(chǎn)生的一小段信息,通過驗證消息傳遞過程中是否遭到更改以檢查某段消息的完整性,以及作為消息來源的身份驗證的一種方式,確認消息的來源。

MAC不會對信息保密,若要同時實現(xiàn)保密認證,需要同時對信息進行加密。在實際應(yīng)用中,通常會使用帶密鑰的散列函數(shù)HMAC,或者塊密碼的帶認證工作模式CBC-MAC。

這幅圖示表明消息的發(fā)送者通過MAC算法生成一個MAC的數(shù)據(jù)標(biāo)簽,然后隨原始消息一同發(fā)給接收者,而接收者通過同樣的MAC算法生成另外一個MAC數(shù)據(jù)標(biāo)簽,比較這兩者就可以判定消息是否在傳輸過程中被修改,從而判定數(shù)據(jù)傳輸?shù)耐暾浴?/p>

在這里需要避免重放攻擊 Replay Attacks,消息本身需要包含一些信息以便保證同樣的消息不會被重復(fù)發(fā)送,這種信息可以是時間戳、序號碼、或者一次性MAC等。

MAC與數(shù)字簽名的不同之處在于,MAC值的生成和驗證都是通過同一個密鑰實現(xiàn)的,所以發(fā)送者和接收者在建立連接前就需要確認密鑰,這與對稱密鑰類似。這也就意味著驗證法同樣可以生成簽名,所以簽名認證的意義就沒有了。

HMAC

密鑰散列消息認證碼 HMAC Keyed Hash Message Authentication Code 使用密碼散列函數(shù),結(jié)合一個加密密鑰,計算生成消息認證碼。HMAC既可以用來保證數(shù)據(jù)的完整性,也可以用作某個消息的身份驗證。

MD5、SHA都可以作為HMAC的散列算法被使用,相應(yīng)的HMAC算法就可以被稱為 HMAC-MD5, HMAC-SHA。

如圖所示,HMAC-SHA1的生成由兩個散列計算過程構(gòu)成,首先密鑰會被用來生成兩個密鑰 (Inner、Outer),第一個計算過程利用輸入消息和Inner密鑰生成內(nèi)部散列值,而第二個計算過程會利用內(nèi)部散列值和outer密鑰生成最終的散列值作為結(jié)果。這種方式可以有效地抵制長度擴展攻擊。

編碼

Base64

Base64 是一種基于64個可打印字符來表示二進制數(shù)據(jù)的表示方法,2的6次方為64,即以6個比特為一個單元,對應(yīng)某個可打印字符。三個字節(jié)有24個比特,對應(yīng)于4個Base64單元,即三個字節(jié)可表示4個可打印字符。

Base64嚴格意義不能算是一種加密方式,只是將文本變得不那么可以直接看出來而已。

在Base64中可打印字符包括A-Z、a-z、0-9,總計62,再加上可能因系統(tǒng)而不同的兩個可打印字符。Base64常用于處理文本數(shù)據(jù)的場合,處理一些二進制數(shù)據(jù),比如MIME的email、在XML中存儲數(shù)據(jù)等。

MIME
在MIME格式的電子郵件中,Base64可以將二進制的字節(jié)序列數(shù)據(jù)編碼成ASCII字符序列構(gòu)成的文本,使用時除了字母和數(shù)字外,加上加號"+"和斜杠"/",共計64個字符,等號"="用作后綴。另外,在電子郵件中,每76個字符后需要加一個回車換行,另外使用"="補足尾部不足3字節(jié)的部分。

破解

暴力破解法
暴力破解法 Brute-force attack 又可稱為窮舉法,即攻擊者會系統(tǒng)性的嘗試所有可能的密碼,直到找到真正的密碼為止。暴力破解的有效性取決于密碼的長度、復(fù)雜度等,如果暴力破解的耗時過長,就會導(dǎo)致破解沒有意義。與此相對應(yīng),為避免受到暴力破解的攻擊,我們可以添加一些防護手段,比如:增加密碼的長度與復(fù)雜度、在系統(tǒng)中限制密碼試錯的次數(shù)、定時修改密碼等。

字典攻擊
比暴力破解優(yōu)化點的一種方式叫做字典攻擊Dictionary Attack,這種方法就是給密碼鎖定某個范圍,比如英文單詞、生日的數(shù)字組合等,所有的英文單詞大約10萬個左右,這樣就可以大大縮小密碼的查找范圍,相比暴力破解可以縮短破譯時間。

字典攻擊是根據(jù)現(xiàn)有或常用的組合測試破解密碼。

彩虹表
彩虹表 Rainbow Table 是一個用于加密散列函數(shù)逆運算的預(yù)先計算好的表,常用于破解加密過的密碼散列。這種方式常用于包含有限字符固定長度純文本密碼的加密,是一種典型的以空間換時間的方式,相比暴力破解使用較少的計算能力而更多的存儲空間。它可以針對各種散列算法,已被確認有效的包括MD5和SHA-1,一般主流的彩虹表都在100G以上。

彩虹表是針對特定的算法,尤其是不對稱算法,比如MD5,進行有效破解的一種方法。

彩虹表采用哈希鏈的存儲方式存儲字典,它只需要保存這個鏈的首位的值,而中間值是通過哈希函數(shù)進行推算,這樣可以對時間和空間進行平衡。一種比較好的理解方式是:暴力破解是將所有可能都列出來一一嘗試,而彩虹表是按照某些規(guī)律和特征分組,當(dāng)發(fā)現(xiàn)某個特征符合當(dāng)前情況時,在這一個方向上細化繼續(xù)嘗試相關(guān)的可能性。

哈希鏈

假設(shè)存在哈希函數(shù)H和有限密碼集合P
`H(p) = h`表示P集合里的元素p經(jīng)哈希函數(shù)生成結(jié)果

歸約函數(shù)R:影射散列值h在集合P中對應(yīng)的密碼p,非H的反函數(shù)

哈希鏈:使用歸約函數(shù)和哈希函數(shù)行程交替鏈
aaaaaa -H-> 281DAF40 -R-> sgfnyd -H-> 920ECF10 -R-> kiebgt
存儲時只保存起點aaaaaa和終點kiebgt

對于需要破解的哈希值920ECF10
應(yīng)用函數(shù)R得到 920ECF10 -R-> kiebgt
因為對應(yīng)終點,可以得到起點aaaaaa
再計算哈希鏈
aaaaaa -H-> 281DAF40 -R-> sgfnyd -H-> 920ECF10 -R
從而確認密碼為sgfnyd

實際使用中,哈希鏈并不總會包含所需要查找的哈希值,并且以h開始的鏈可能會和起點在h鏈之后的某個查找鏈重合。這種無法查找的情況被稱為誤報。這種簡單的哈希鏈存在很多缺陷,其中有一個問題就是,如果兩條鏈中的任何兩個點碰撞了,他們后續(xù)的所有點都將重合,這會導(dǎo)致查找表不能夠覆蓋足夠多的密碼。

為了解決簡單的哈希鏈中的碰撞問題,彩虹表選用一系列相關(guān)的衰減函數(shù)R1、R2... Rk來代替原先的衰減函數(shù)R。這樣如果發(fā)生碰撞后,可以找出重點相同的鏈,并生成新的鏈來補充表。從而避免鏈的重合而降低碰撞的次數(shù)。不過這也意味著我們需要計算k條不同的鏈。

實際應(yīng)用方面,某些網(wǎng)站的用戶密碼數(shù)據(jù)庫泄露,攻擊者就可以通過使用彩虹表破解數(shù)據(jù)庫中存儲的密碼散列值,當(dāng)然,如果存的是明文密碼的話~~~ 就無話可說了。對于彩虹表的防御,一般可以使用加鹽Salt的方式,改變哈希函數(shù)的形式,如果函數(shù)形式變了,而彩虹表是針對特定哈希函數(shù)而生成的,那么現(xiàn)有的彩虹表就無效了。

旁道攻擊
旁道攻擊 Side-Channel Attacks 又稱為旁路攻擊、側(cè)信道攻擊:一種針對密碼設(shè)備的新型攻擊技術(shù),基于從密碼系統(tǒng)的物理視線中獲取信息,比如時間信息、功率消耗、電磁泄露、聲音等額外的信息來源。通過功率分析嘗試破解RSA的實例就是通過RSA迭代是是否有懲罰而導(dǎo)致處理器功率發(fā)生變化的差異而用來分析加密密鑰。

中間人攻擊
中間人攻擊 MITM Middle in the Middle Attack 是指攻擊者秘密的傳遞并可能改變兩方的通信,而通信雙方仍然相信他們是直接通信的。

為了抵御在不安全的通道的通信需求,我們需要一些抵御中間人攻擊的一些認證技術(shù)方案:公鑰基礎(chǔ)建設(shè)PKI使用公認的數(shù)字證書認證機構(gòu)CA認證通信端;延遲測試的預(yù)估時間的超出等。

長度擴展攻擊
長度擴展攻擊 Length Extension Attack 針對某些允許包含額外信息的加密散列函數(shù)的攻擊手段。該攻擊方法適用于在消息與密鑰長度已知的情況下,所有采取了H(密鑰||消息)此類構(gòu)造的散列函數(shù),包括MD5、SHA-1、SHA-2等,而HMAC、SHA-3不受此影響。

攻擊的原理在于散列函數(shù)的算法會使用輸入消息改變內(nèi)部處理函數(shù)的狀態(tài),而這個狀態(tài)最終生成輸出的散列摘要,因此存在著從散列摘要重新構(gòu)建內(nèi)部狀態(tài)、并用于處理攻擊者偽造的數(shù)據(jù)的可能性。從而,攻擊者得以擴充消息的長度,并為新的偽造消息計算出合法的散列摘要。

重放攻擊
重放攻擊 Replay Attack 是一種通過欺騙性的重復(fù)發(fā)送或者延遲有效消息的網(wǎng)絡(luò)攻擊手段。

防止重放攻擊的一個手段是使用在加密信息片段上附上會話ID和編號,使用這種唯一且隨機的標(biāo)簽,使得攻擊者不能簡單的重放信息。其他的方法包括一次性密碼、時間戳等。

碰撞攻擊
碰撞攻擊 Collision Attack 是指找出兩個不同的輸入值卻導(dǎo)致同樣的散列值的一種方式,目前已經(jīng)可以有效地攻擊MD5和SHA-1。

有效地利用碰撞,可以使得所有數(shù)據(jù)全部碰撞,人為的將哈希表變成一個退化的單鏈表,使得各種操作的時間均提升了一個數(shù)量級,因此大量消耗CPU資源,導(dǎo)致系統(tǒng)無法快速響應(yīng)請求,從而達到拒絕服務(wù)供給Dos的目的。

代數(shù)攻擊
與傳統(tǒng)的“統(tǒng)計”攻擊方法不同,使用代數(shù)方法對密碼體制進行密碼分析的攻擊方法叫做代數(shù)攻擊:將加密活動描述為輸入密鑰和輸出之間的多元方程組,并通過求解低次超定稀疏方程組來回復(fù)密鑰。它的優(yōu)勢在于所需要的數(shù)據(jù)量非常少。

代數(shù)攻擊適用于所有的加密方式,前景很好,但是現(xiàn)有的研究還不太充分。

又是一個需要深厚數(shù)學(xué)功底的例子~~

引用

加密算法介紹

Wikipedia Block Cipher

Wikipedia DES

Wikipedia AES

Wikipedia RSA

Wikipedia ECC

Wikipedia MD5

Wikipedia SHA-2

Wikipedia MAC

Wikipedia HMAC

Wikipedia Base64

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內(nèi)容

  • 在開發(fā)應(yīng)用過程中,客戶端與服務(wù)端經(jīng)常需要進行數(shù)據(jù)傳輸,涉及到重要隱私安全信息時,開發(fā)者自然會想到對其進行加密,即使...
    閑庭閱讀 3,288評論 0 11
  • 本文主要介紹移動端的加解密算法的分類、其優(yōu)缺點特性及應(yīng)用,幫助讀者由淺入深地了解和選擇加解密算法。文中會包含算法的...
    蘋果粉閱讀 11,537評論 5 29
  • 所有貨幣都需要一些方法來控制供應(yīng),并強制執(zhí)行各種安全屬性以防止作弊。在法定貨幣方面,像中央銀行這樣的組織控制貨幣供...
    Nutbox_Lab閱讀 3,135評論 1 3
  • 前言 《圖解密碼技術(shù)》一書介紹了很多關(guān)于密碼的知識,通讀一遍需要不少時間。為了方便學(xué)習(xí),我對書中關(guān)鍵的部分進行了總...
    咖枯閱讀 7,235評論 1 25