密碼的一些存儲(chǔ)方式和安全傳輸建議
密碼是軟件系統(tǒng)中非常常見的屬性,密碼保存和傳遞都需要考慮如何才能不泄漏。
密碼存儲(chǔ)
密碼在服務(wù)器都需要加密保存,根據(jù)用途不一樣,有可逆加密(AES)和非可逆加密(PBKDF2)算法。
可逆加密方式存儲(chǔ)
可逆加密一般是客戶端保存密碼,客戶端需要還原出密碼然后使用密碼訪問服務(wù)器??赡婕用艿腁ES算法需要一個(gè)密鑰,通過密鑰加密和解密。因此AES算法的關(guān)鍵就是密鑰。
通常的做法是密鑰也加密存儲(chǔ),如果這么做,就是一個(gè)雞和蛋的問題了。
解決這個(gè)問題的一個(gè)方法是提供一個(gè) 根密鑰 和 工作密鑰 。
1.根密鑰 根密鑰不加密存儲(chǔ),文件權(quán)限為600
2.工作密鑰 工作密鑰由根密鑰加密得到,文件權(quán)限為600
3.密碼使用工作密鑰加密,不使用根密鑰加密
3.密鑰建議可以替換,以便及時(shí)修復(fù)密鑰泄漏問題(最好沒問題,有問題了盡量把影響降低到最小,有問題了能盡快修復(fù))
非可逆加密方式存儲(chǔ)
非可逆加密一般是服務(wù)端存儲(chǔ)密碼方式,因?yàn)榉?wù)端不需要逆向密碼明文,服務(wù)端在校驗(yàn)密碼的時(shí)候,有很多種方式。最常見的是把客戶端發(fā)送過來的明文密碼加密得到密文,與服務(wù)器保存的密文對(duì)比是否相等。
非可逆加密一般有一個(gè)隨機(jī)鹽值,保護(hù)好隨機(jī)鹽值,比可逆加密算法防護(hù)措施要簡單。
密碼傳輸
在很多場景下,需要在不同系統(tǒng)或進(jìn)程之間傳輸密碼,特別是不同的系統(tǒng),傳輸密碼比較麻煩。
1.不同系統(tǒng)之間,不能共享密鑰(如果需要共享密鑰的話非常復(fù)雜,讀者們可以結(jié)合實(shí)際場景思考),所以不能傳輸加密之后的密碼
2.如果通過命令行參數(shù)方式傳輸明文密碼的話,又很容易通過操作系統(tǒng)的 ps 命令查看到(低權(quán)限級(jí)別的用戶可以 ps 到高權(quán)限級(jí)別用戶的進(jìn)程)
3.將明文密碼寫到一個(gè)文件?密碼不能明文存儲(chǔ)??!
一個(gè)典型的場景是調(diào)用mysql客戶端連接mysql服務(wù)器時(shí)候,命令行參數(shù)傳遞密碼。
當(dāng)然,細(xì)心的讀者發(fā)現(xiàn)這個(gè)例子不合適,因?yàn)槟鉷s不到mysql客戶端的密碼!
mao 59402 9674 0 Apr29 pts/4 00:00:00 mysql -u root -px xxxxxxxx
對(duì)的,mysql 客戶端是專門考慮了這種場景的。這也是一種解決這個(gè)問題的方案哦。
環(huán)境變量 ,對(duì)就是用環(huán)境變量傳遞明文密碼。每個(gè)進(jìn)程的環(huán)境變量保存在:
/proc/${pid}/environ
-r--------1 root root 0 May 1 22:00 environ
文件中,這個(gè)文件權(quán)限是 400 ,屬主是當(dāng)前運(yùn)行進(jìn)程的用戶。也就是說,只有當(dāng)前用戶才可以看到此環(huán)境變量值,而其他用戶是無法查看的,即使權(quán)限比當(dāng)前用戶高(root除外)!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。