成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何加密傳輸和存儲用戶密碼

存儲 存儲軟件
客戶端和服務端進行通信,采用對稱加密,如果只使用一個秘鑰,很容易破解;如果每次用不同的秘鑰,海量秘鑰的管理和傳輸成本又會比較高。

為什么寫這篇文章

近期,Github被爆出,在內部日志中記錄了明文密碼。

雖然據說影響面很小(因為日志外部訪問不到),但是網絡和數據安全問題又一次被放到臺面上。大多數用戶的常用密碼就那么幾個,一旦被黑客拿到,去其他網站“撞庫”,可能會造成用戶的財產損失。

本篇文章主要介紹如何加密傳輸和存儲用戶密碼,并講解相關原理。

[[230936]]

加密傳輸

加密主要有兩種方式:對稱加密和非對稱加密。

對稱加密

對稱加密算法在加密和解密時使用的是同一個秘鑰。

對稱加密的模式是:

- 甲方選擇某一種加密規則,對信息進行加密

- 乙方使用同一種規則,對信息進行解密

客戶端和服務端進行通信,采用對稱加密,如果只使用一個秘鑰,很容易破解;如果每次用不同的秘鑰,海量秘鑰的管理和傳輸成本又會比較高。

非對稱加密

非對稱加密算法需要兩個密鑰來進行加密和解密,這兩個秘鑰是公開密鑰(public key,簡稱公鑰)和私有密鑰(private key,簡稱私鑰)。

非對稱加密的模式則是:

- 乙方生成兩把密鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的

- 甲方獲取乙方的公鑰,然后用它對信息加密

- 乙方得到加密后的信息,用私鑰解密。

即使黑客拿到了公鑰,沒有私鑰也是沒有辦法解密,不考慮彩虹表的情況,完全可以長期使用一對秘鑰。

RSA算法

最經典的非對稱加密算法是RSA算法。

RSA公鑰加密算法是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。公鑰私鑰成對出現,用其中一個加密只能用另一個解密,通常用公鑰加密私鑰解密。

為什么RSA能夠做到非對稱加密呢?

互質關系:如果兩個正整數,除了1以外,沒有其他公因子,我們就稱這兩個數是互質關系

簡單來說,RSA利用的原理是,如果兩個互質關系的正整數的乘積足夠大,是極難進行因式分解的(目前被破解的最長RSA密鑰是768個二進制位,而正常使用的至少是1024位的密鑰)。

通過一定的運算,把某計算結果和乘積作為公鑰,另一個計算結果和乘積作為私鑰,即可以實現,利用公鑰進行加密,并利用私鑰進行解密。具體的數學公式推導和證明可以參考RSA算法原理。

github的登錄方式

傳輸層面的加密解密原理講的差不多了,我們來看看github是如何傳輸賬號密碼的。

抓包看一下登錄請求的request,赫然發現,密碼是通過明文傳輸的……

那么,這種傳輸方式安全嘛?還可以,因為使用了https,但還不夠安全。

http和https

常規的http請求,所有信息明文傳播,只要中間人在鏈路中的任意階段進行劫持,就會帶來三大風險:

  • 竊聽風險(eavesdropping):第三方可以獲知通信內容。
  • 篡改風險(tampering):第三方可以修改通信內容。
  • 冒充風險(pretending):第三方可以冒充他人身份參與通信。

怎么解決這些問題?用https。

https 可以認為是 http + TLS,TLS 是傳輸層加密協議,它的前身是 SSL 協議。

SSL/TLS協議是為了解決http的三大風險而設計的,希望達到:

- 內容加密。所有信息都是加密傳播,第三方無法竊聽。

- 身份認證。配備身份證書,防止身份被冒充。即使被 DNS 劫持到了第三方站點,也會提醒用戶有可能被劫持

- 數據完整性。防止內容被第三方冒充或者篡改。具有校驗機制,一旦被篡改,通信雙方會立刻發現。

說了這么多,https到底做了什么?結合以下流程圖,講解一次https請求都發生了什么:

1、客戶端發起https請求

2、服務端的配置

一般需要向權威機構申請一個證書(也可以自己制作,這個會在之后的中間人攻擊中講到,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會提示),證書會生成RSA加密使用的一對公鑰A和私鑰B。

3、傳送證書

這個證書主要內容是公鑰A,也包含了其他信息,如證書的頒發機構,過期時間等等。

4、客戶端解析證書

由客戶端的TLS來完成的,主要是驗證公鑰A是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那么就生成一個隨機值。之后就進入了不對稱加密(RSA)的過程,用證書對該隨機值進行加密,生成私鑰C。

5、傳送加密信息

這部分傳送的是用證書加密后的隨機值(即私鑰C),目的就是讓服務端得到這個私鑰,后續所有的數據都可以用私鑰C,進行對稱加密和解密。

6、服務端解密信息

服務端用私鑰B解密后,得到了客戶端傳過來的私鑰C,到此RSA非對稱加密的過程結束了。

7、傳輸加密后的信息

服務端用私鑰C加密信息。

8、客戶端解密信息

客戶端用之前生成的私鑰C解密服務端傳過來的信息,于是獲取了解密后的內容。

中間人攻擊(MITM)

上面的過程,看起來似乎無懈可擊?并不是,因為“人”才是安全系統中最脆弱的環節。

https信息的安全,完全建立在證書可信的基礎上,如果中間人偽造證書怎么辦?

黑客自己偽造的證書需要客戶端驗證通過,才可以繼續訪問,只要客戶端驗證通過,那么公鑰A,私鑰B和私鑰C對黑客來說都是透明的,也有沒有數據安全可言了,所以黑客只要誘導用戶安裝自己偽造的證書即可,例如使用各種釣魚的不可描述網站。

所以即使使用https傳輸明文密碼,也不是絕對安全的。那怎么樣才能保證密碼安全呢?

百度的登錄方式

抓包看一下百度的登錄請求發現,密碼是加密過的:

怎么加密的?我們發現,有這么一個關鍵請求:

response里有pubkey,意味著,密碼使用RSA進行加密和解密處理的,這個請求傳輸的是公鑰。那么流程是什么樣的呢?

查了一下github中,關鍵詞RSA,star數最多的JavaScript庫jsencrypt,驚喜的發現,百度登錄的加密方式和使用的函數名都和這個庫一致,那我們是不是可以大膽假設百度整套登錄請求時的流程和這個開源庫基本一致呢,那jsencrypt的流程又是什么樣的呢,如下圖:

加密存儲

到這里,加密傳輸的過程已經完結了,現在服務端已經收到了用戶真實的密碼(解密后的),那怎么存儲這個密碼呢?

千萬不要用明文存儲密碼

如果用明文存儲密碼(不管是存在數據庫還是日志中),一旦數據泄露,所有用戶的密碼就毫無保留地暴露在黑客的面前,開頭提到的風險就可能發生,那我們費半天勁加密傳輸密碼也失去了意義。

用哈希算法加密密碼

單向加密算法:只能從明文生成一個對應的哈希值,不能反過來根據哈希值得到對應的明文。

常用的給密碼加密的算法是幾種單向的哈希算法。

經常被大家用來加密的算法有MD5和SHA系列(如SHA1、SHA256、SHA384、SHA512等)。

雖然用哈希算法能提高密碼存儲的安全性,但還是不夠安全。

通常黑客在侵入保存密碼的數據庫之后,他會隨機猜測一個密碼,生成一個哈希值。如果該哈希值在數據庫中存在,那么他就猜對了一個用戶的密碼。如果沒有猜中也沒有關系,他可以再次隨機猜測下一個密碼進行嘗試。

事實上黑客為了提高破解密碼的效率,他們會事先計算大量密碼對應的各種哈希算法的哈希值,并把密碼及對應的哈希值存入一個表格中(這種表格通常被稱為彩虹表),在破解密碼時只需要到事先準備的彩虹表里匹配即可。因此現在黑客們破解僅僅只用哈希算法加密過的密碼事實上已是不費吹灰之力。

加“鹽”提高安全性

鹽:一個隨機的字符串,往明文密碼里加鹽就是把明文密碼和一個隨機的字符串拼接在一起。

為了應對黑客們用彩虹表破解密碼,我們可以先往明文密碼加鹽,然后再對加鹽之后的密碼用哈希算法加密。由于鹽在密碼校驗的時候還要用到,因此通常鹽和密碼的哈希值是存儲在一起的。

采用加鹽的哈希算法對密碼加密,要確保要往每個密碼里添加隨機的唯一的鹽,而不是讓所有密碼共享一樣的鹽。

雖然加鹽的算法能有效應對彩虹表的破解法,但它的安全級別并不高,因為計算哈希值耗時極短,黑客仍然可以用窮舉法來破解,只是增加了一些耗時。

用BCrypt或者PBKDF2增加破解的難度

為了應對暴力破解法,我們需要非常耗時的而不是非常高效的哈希算法。BCrypt和PBKDF2算法應運而生。

這兩個算法最大的特點是我們可以通過參數設置重復計算的次數,重復計算的次數越多耗時越長。如果計算一個哈希值需要耗時1秒甚至更多,那么黑客們采用暴利法破解密碼將幾乎不再可能。破解一個6位純數字密碼需要耗時11.5天,更不要說高安全級別的密碼了。

總結

如果我們想要盡可能保證用戶的信息安全,我們需要做以下的工作

- 使用https請求

- 利用RSA加密密碼并傳輸數據

- 用BCrypt或者PBKDF2單向加密,并存儲

責任編輯:武曉燕 來源: 搜云庫
相關推薦

2011-09-07 14:43:24

2022-11-21 10:49:29

Nacos配置加密

2024-05-27 09:52:00

Nacos加密配置

2009-11-07 14:29:40

2013-07-11 14:50:51

2015-05-20 13:19:23

文件加密影線加密

2014-03-14 09:45:18

2013-08-21 09:58:05

2011-12-16 17:07:22

安全事件

2020-07-20 14:03:03

Chrome 86加密信息

2009-06-18 15:05:11

2023-10-04 11:03:30

Java技術

2012-11-30 13:43:30

2023-05-12 15:03:42

安全云平臺加密

2015-03-05 15:01:52

2020-12-13 17:57:16

加密密碼Python

2010-04-23 17:14:59

Aix用戶

2010-06-17 22:16:48

2020-12-21 16:00:07

Pythonzip文件密碼

2019-08-28 07:05:45

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲男人天堂网 | 秋霞在线一区 | 黄a免费网络 | 天天躁日日躁狠狠很躁 | 久久国产精品精品国产色婷婷 | 久热精品视频 | 91久久精品国产免费一区 | 国产一区二区av | 狠狠的干 | 国产精品欧美一区二区三区不卡 | 91视频一区 | 亚洲另类春色偷拍在线观看 | 成人性视频免费网站 | 亚洲精品久久久一区二区三区 | cao在线 | 日韩免费高清视频 | 欧美夜夜 | 91精品国产日韩91久久久久久 | 91精品国产日韩91久久久久久 | 99精品网| 亚洲小视频在线播放 | 欧美成人精品欧美一级 | 免费亚洲视频 | 免费毛片网站 | 美女在线一区二区 | 精品国产一区二区国模嫣然 | 日本精品一区二区三区四区 | 99综合网 | 天堂中文在线播放 | 国内成人免费视频 | 久久四虎 | 久久亚洲一区二区三 | 国产一区二区三区免费 | 欧洲亚洲一区 | 久久久国产一区二区三区四区小说 | 国产黑丝在线 | 国产免费一区 | 日本久久福利 | 日本粉嫩一区二区三区视频 | 精品国产91亚洲一区二区三区www | 日韩看片 |