亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我的密碼腳本加密有多安全?(Golang, AES256, pbkdf2, hmac)

我的密碼腳本加密有多安全?(Golang, AES256, pbkdf2, hmac)

Go
呼喚遠方 2021-12-06 16:35:04
首先,我想說這只是一個學習練習,我不打算在生產中使用它。我用 Golang 寫了一個小應用程序,有兩個功能:encrypt(plaintext string, password string)和decrypt(encrypted string, password string)加密步驟如下:生成隨機 256 位用作鹽生成 128 位用作初始化向量使用 PDKDF2 從密碼和鹽生成 32 位密鑰用密鑰和明文生成一個 32 位的 HMAC,并將其附加到明文的開頭在CFB模式下用AES加密hmac+plaintext返回的字節數組如下所示:[256 bit salt] [128 bit iv] encrypted([256 bit hmac] [plaintext])解密時:提取鹽并使用提供的密碼來計算密鑰提取IV并解密密文的加密部分從解密值中提取mac用明文驗證mac我還不夠瘋狂,無法在任何生產項目中使用我自己的加密腳本,所以請向我指出任何為我執行此操作的庫(相對安全的簡單密碼/消息加密)
查看完整描述

1 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

請注意,因為問題是關于加密消息而不是密碼:如果您要加密小消息而不是散列密碼,那么 Go 的secretbox包(作為其 NaCl 實現的一部分)是要走的路。如果您打算推出自己的產品——我強烈建議不要這樣做,除非它留在您自己的開發環境中——那么 AES-GCM 是您的最佳選擇。

否則,以下大部分內容仍然適用:

  1. 對稱加密對密碼沒有用。您應該沒有理由需要返回明文——您應該只關心比較哈希值(或者更準確地說,派生鍵)。

  2. 與 scrypt 或 bcrypt 相比,PBKDF2 并不理想(2015 年的 10002 輪也可能有點低)。scrypt 是內存困難的,并且更難在 GPU 上并行化,并且在 2015 年,它的壽命足夠長,使其比 bcrypt 更安全(如果您的語言的 scrypt 庫不是很好,您仍然會使用 bcrypt )。

  3. MAC-then-encrypt有問題- 您應該先加密 MAC。

  4. 鑒于#3,您應該在 AES-CBC + HMAC 上使用 AES-GCM(伽羅華計數器模式)。

Go 有一個很棒的bcrypt包和一個易于使用的 API(為你生成鹽;安全地比較)。

我還編寫了一個鏡像該包的scrypt包,因為底層 scrypt 包要求您驗證自己的參數并生成自己的鹽。


查看完整回答
反對 回復 2021-12-06
  • 1 回答
  • 0 關注
  • 295 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號