app與后臺的token、sessionId、RSA加密登錄認證與安全解決方案

http://blog.csdn.net/jack85986370/article/details/51362278

一、登錄機制

粗略地分析, 登錄機制主要分為登錄驗證、登錄保持、登出三個部分。登錄驗證是指客戶端提供用戶名和密碼,向服務器提出登錄請求,服務器判斷客戶端是否可以登錄并向客戶端確認。 登錄認保持是指客戶端登錄后, 服務器能夠分辨出已登錄的客戶端,并為其持續提供登錄權限的服務器。登出是指客戶端主動退出登錄狀態。容易想到的方案是,客戶端登錄成功后, 服務器為其分配sessionId, 客戶端隨后每次請求資源時都帶上sessionId。

1.1 登錄驗證

上述簡易的登錄驗證策略存在明顯的安全漏洞,需要優化。


1.1.1 密碼的傳輸

客戶端第一次發出登錄請求時, 用戶密碼以明文的方式傳輸, 一旦被截獲, 后果嚴重。因此密碼需要加密,例如可采用RSA非對稱加密。具體流程如下:

客戶端向服務器第一次發起登錄請求(不傳輸用戶名和密碼)。

服務器利用RSA算法產生一對公鑰和私鑰。并保留私鑰, 將公鑰發送給客戶端。

客戶端收到公鑰后, 加密用戶密碼, 向服務器發起第二次登錄請求(傳輸用戶名和加密后的密碼)。

服務器利用保留的私鑰對密文進行解密,得到真正的密碼。

1.1.2 登錄狀態token

再仔細核對上述登錄流程, 我們發現服務器判斷用戶是否登錄, 完全依賴于sessionId, 一旦其被截獲, 黑客就能夠模擬出用戶的請求。于是我們需要引入token的概念: 用戶登錄成功后, 服務器不但為其分配了sessionId, 還分配了token, token是維持登錄狀態的關鍵秘密數據。在服務器向客戶端發送的token數據,也需要加密。于是一次登錄的細節再次擴展。

客戶端向服務器第一次發起登錄請求(不傳輸用戶名和密碼)。

服務器利用RSA算法產生一對公鑰和私鑰。并保留私鑰, 將公鑰發送給客戶端。

客戶端收到公鑰后, 加密用戶密碼,向服務器發送用戶名和加密后的用戶密碼; 同時另外產生一對公鑰和私鑰,自己保留私鑰, 向服務器發送公鑰; 于是第二次登錄請求傳輸了用戶名和加密后的密碼以及客戶端生成的公鑰。

服務器利用保留的私鑰對密文進行解密,得到真正的密碼。 經過判斷, 確定用戶可以登錄后,生成sessionId和token, 同時利用客戶端發送的公鑰,對token進行加密。最后將sessionId和加密后的token返還給客戶端。

客戶端利用自己生成的私鑰對token密文解密, 得到真正的token。

1.2 登錄保持

在最原始的方案中, 登錄保持僅僅靠服務器生成的sessionId: 客戶端的請求中帶上sessionId, 如果服務器的redis中存在這個id,就認為請求來自相應的登錄客戶端。 但是只要sessionId被截獲, 請求就可以為偽造, 存在安全隱患。

引入token后,上述問題便可得到解決。 服務器將token和其它的一些變量, 利用散列加密算法得到簽名后,連同sessionId一并發送給服務器; 服務器取出保存于服務器端的token,利用相同的法則生成校驗簽名, 如果客戶端簽名與服務器的校驗簽名一致, 就認為請求來自登錄的客戶端。


1.3 TOKEN失效

用戶登錄出系統

失效原理:

在服務器端的redis中刪除相應key為session的鍵值對。

二、 散列算法

散列是信息的提煉,通常其長度要比信息小得多,且為一個固定長度。加密性強的散列一定是不可逆的,這就意味著通過散列結果,無法推出任何部分的原始信息。任何輸入信息的變化,哪怕僅一位,都將導致散列結果的明顯變化,這稱之為雪崩效應。散列還應該是防沖突的,即找不出具有相同散列結果的兩條信息。具有這些特性的散列結果就可以用于驗證信息是否被修改。

散列算法可以用來加密token生成簽名, 以便token信息不暴露在網絡同時還能驗證登錄的有效性。

2.1 md5

全寫: Message Digest Algorithm MD5(中文名為消息摘要算法第五版)

輸出: 128bit

MD5算法具有以下特點:

1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。

2、容易計算:從原數據計算出MD5值很容易。

3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。

4、弱抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

5、強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD5值,是非常困難的。

缺陷:

Md5一度被認為十分靠譜。

2004年8月17日的美國加州圣巴巴拉的國際密碼學會議(Crypto’2004)上,來自中國山東大學的王小云教授做了破譯MD5、HAVAL-128、 MD4和RIPEMD算法的報告,公布了MD系列算法的破解結果。

2009年,馮登國、謝濤二人利用差分攻擊,將MD5的碰撞算法復雜度從王小云的2^42進一步降低到2^21,極端情況下甚至可以降低至2^10。僅僅2^21的復雜度意味著即便是在2008年的計算機上,也只要幾秒便可以找到一對碰撞。

Md5已老, 在安全性要求較高的場合,不建議使用。

2.2 sha1

全名: 安全哈希算法(Secure Hash Algorithm)

輸出: 160bit

2.2.1 與Md5比較

相同點:

因為二者均由MD4導出,SHA-1和MD5彼此很相似。相應的,他們的強度和其他特性也是相似。

不同點:

1. 對強行攻擊的安全性:最顯著和最重要的區別是SHA-1摘要比MD5摘要長32 位。使用強行技術,產生任何一個報文使其摘要等于給定報摘要的難度對MD5是2^128數量級的操作,而對SHA-1則是2^160數量級的操作。這樣,SHA-1對強行攻擊有更大的強度。

2. 對密碼分析的安全性:由于MD5的設計,易受密碼分析的攻擊,SHA-1顯得不易受這樣的攻擊。

3. 速度:在相同的硬件上,SHA-1的運行速度比MD5慢。

2.3 加鹽

所謂加鹽, 就是在原本需要加密的信息基礎上,糅入其它內容salt。簽名的生成就是一次加鹽。

三、對稱加密

本系統使用對稱加密對用戶密碼進行加密以及生成token字符串。

3.1 AuthCode加密

AuthCode是康盛科技發明的加密方式, 開源產品Discuz的密碼是用這個算法進行加密。但是有點遺憾,這個函數所有權屬于康盛創想,并不能自由使用的。不知使用是否有風險??

3.2 AES加密

高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府采用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。

四、非對稱加密

RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被ISO推薦為公鑰數據加密標準。RSA的安全基于大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價于分解兩個大素數之積(這是公認的數學難題)。

算法描述:

(1)選擇一對不同的、足夠大的素數p,q。

(2)計算n=pq。

(3)計算f(n)=(p-1)(q-1),同時對p, q嚴加保密,不讓任何人知道。

(4)找一個與f(n)互質的數e(公鑰指數),且1

(5)計算d(私鑰指數),使得de≡1 mod f(n)。這個公式也可以表達為d ≡e-1 mod f(n)

注,≡是數論中表示同余的符號。

(6)公鑰KU=(e,n),私鑰KR=(d,n)。

(7)加密時,先將明文變換成0至n-1的一個整數M。若明文較長,可先分割成適當的組,然后再進行交換。設密文為C,則加密過程為:

(8)解密過程為:

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

推薦閱讀更多精彩內容