GaussDB(DWS) 數(shù)據(jù)庫(kù)加解密
GaussDB(DWS) 數(shù)據(jù)庫(kù)加密
在GaussDB(DWS) 中,用戶可以選擇為集群?jiǎn)⒂脭?shù)據(jù)庫(kù)加密,以保護(hù)靜態(tài)數(shù)據(jù)。當(dāng)集群?jiǎn)⒂眉用軙r(shí),該集群及其快照的數(shù)據(jù)都會(huì)得到加密處理。
用戶可以在創(chuàng)建集群時(shí)啟用加密。加密是集群的一項(xiàng)可選且不可變的設(shè)置。要從未加密的集群更改為加密集群(或反之),必須從現(xiàn)有集群導(dǎo)出數(shù)據(jù),然后在已啟用數(shù)據(jù)庫(kù)加密的新集群中重新導(dǎo)入這些數(shù)據(jù)。數(shù)據(jù)庫(kù)加密是在數(shù)據(jù)落盤(pán)時(shí)進(jìn)行加密,即在往GaussDB(DWS) 寫(xiě)入數(shù)據(jù)時(shí)GaussDB(DWS) 會(huì)對(duì)數(shù)據(jù)進(jìn)行加密,而在用戶查詢數(shù)據(jù)時(shí)GaussDB(DWS) 會(huì)將數(shù)據(jù)自動(dòng)進(jìn)行解密后再將結(jié)果返回給用戶。
使用KMS服務(wù)加密GaussDB(DWS) 數(shù)據(jù)庫(kù)
當(dāng)選擇KMS(密鑰管理服務(wù))對(duì)GaussDB(DWS)進(jìn)行密鑰管理時(shí),加密密鑰層次結(jié)構(gòu)有三層。按層次結(jié)構(gòu)順序排列,這些密鑰為主密鑰(CMK)、集群加密密鑰(CEK)、數(shù)據(jù)庫(kù)加密密鑰(DEK)。
主密鑰用于給CEK加密,保存在KMS中。
CEK用于加密DEK,CEK明文保存在GaussDB(DWS)集群內(nèi)存中,密文保存在GaussDB(DWS)服務(wù)中。
DEK用于加密數(shù)據(jù)庫(kù)中的數(shù)據(jù),DEK明文保存在GaussDB(DWS)集群內(nèi)存中,密文保存在GaussDB(DWS)服務(wù)中。
密鑰使用流程如下:
1.用戶選擇主密鑰。
2.GaussDB(DWS) 隨機(jī)生成CEK和DEK明文。
3.KMS使用用戶所選的主密鑰加密CEK明文并將加密后的CEK密文導(dǎo)入到GaussDB(DWS)服務(wù)中。
4.GaussDB(DWS) 使用CEK明文加密DEK明文并將加密后的DEK密文保存到GaussDB(DWS)服務(wù)中。
5.GaussDB(DWS)將DEK明文傳遞到集群中并加載到集群內(nèi)存中。
當(dāng)該集群重啟時(shí),集群會(huì)自動(dòng)通過(guò)API向GaussDB(DWS)請(qǐng)求DEK明文,GaussDB(DWS)將CEK、DEK密文加載到集群內(nèi)存中,再調(diào)用KMS使用主密鑰CMK來(lái)解密CEK,并加載到集群內(nèi)存中,最后用CEK明文解密DEK,并加載到集群內(nèi)存中,返回給集群。
加密密鑰輪轉(zhuǎn)
加密密鑰輪轉(zhuǎn)是指更新保存在GaussDB(DWS)服務(wù)的密文。在GaussDB(DWS)中,可以輪轉(zhuǎn)已加密集群的加密密鑰CEK。
密鑰輪轉(zhuǎn)流程如下:
1.GaussDB(DWS)集群?jiǎn)?dòng)密鑰輪轉(zhuǎn)。
2.GaussDB(DWS)根據(jù)集群的主密鑰來(lái)解密保存在GaussDB(DWS) 服務(wù)中的CEK密文,獲取CEK明文。
3.用獲取到的CEK明文解密保存在GaussDB(DWS)服務(wù)中的DEK密文,獲取DEK明文。
4.GaussDB(DWS)重新生成新的CEK明文。
5.GaussDB(DWS)用新的CEK明文加密DEK并將DEK密文保存在GaussDB(DWS) 服務(wù)中。
6.用主密鑰加密新的CEK明文并將CEK密文保存在GaussDB(DWS)服務(wù)中。
用戶可以根據(jù)業(yè)務(wù)需求和數(shù)據(jù)類型計(jì)劃輪轉(zhuǎn)加密密鑰的時(shí)間。為了提高數(shù)據(jù)的安全性,建議用戶定期執(zhí)行輪轉(zhuǎn)密鑰以避免密鑰被破解的風(fēng)險(xiǎn)。一旦發(fā)現(xiàn)密鑰可能已泄露,請(qǐng)及時(shí)輪轉(zhuǎn)密鑰。
GaussDB(DWS) 數(shù)據(jù)加解密函數(shù)
GaussDB(DWS)主要提供了哈希函數(shù)和對(duì)稱密碼算法來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)列的加解密。哈希函數(shù)支持sha256,sha384,sha512和國(guó)密sm3。對(duì)稱密碼算法支持aes128,aes192,aes256和國(guó)密sm4。
哈希函數(shù)
哈希函數(shù)又稱為摘要算法,對(duì)于數(shù)據(jù)data,Hash函數(shù)會(huì)生成固定長(zhǎng)度的數(shù)據(jù),即Hash(data)=result。這個(gè)過(guò)程是不可逆的,即Hash函數(shù)不存在反函數(shù),無(wú)法由result得到data。在不應(yīng)保存明文場(chǎng)景(比如口令password屬于敏感信息),系統(tǒng)管理員用戶也不應(yīng)該知道用戶的密碼,就應(yīng)該使用哈希算法存儲(chǔ)口令的單向哈希值。
實(shí)際使用中會(huì)加入鹽值和迭代次數(shù),避免相同口令生成相同的哈希值,以防止彩虹表攻擊。
對(duì)稱密碼算法
對(duì)稱密碼算法使用相同的密鑰來(lái)加密和解密數(shù)據(jù)。對(duì)稱密碼算法分為分組密碼算法和流密碼算法。
分組密碼算法將明文分成固定長(zhǎng)度的分組,用密鑰對(duì)每個(gè)分組加密。由于分組長(zhǎng)度固定,當(dāng)明文長(zhǎng)度不是分組長(zhǎng)度的整數(shù)倍時(shí),會(huì)對(duì)明文做填充處理。由于填充的存在,分組密碼算法得到的密文長(zhǎng)度會(huì)大于明文長(zhǎng)度。
流加密算法是指加密和解密雙方使用相同偽隨機(jī)加密數(shù)據(jù)流作為密鑰,明文數(shù)據(jù)依次與密鑰數(shù)據(jù)流順次對(duì)應(yīng)加密,得到密文數(shù)據(jù)流。實(shí)踐中數(shù)據(jù)通常是一個(gè)位(bit)并用異或(xor)操作加密。流密碼算法不需要填充,得到的密文長(zhǎng)度等于明文長(zhǎng)度。