app與后臺的token呆奕、sessionId、RSA加密登錄認(rèn)證與安全解決方案

一绳泉、登錄機(jī)制

粗略地分析姆泻, 登錄機(jī)制主要分為登錄驗(yàn)證拇勃、登錄保持潜秋、登出三個(gè)部分。登錄驗(yàn)證是指客戶端提供用戶名和密碼罗售,向服務(wù)器提出登錄請求,服務(wù)器判斷客戶端是否可以登錄并向客戶端確認(rèn)穆碎。 登錄認(rèn)保持是指客戶端登錄后所禀, 服務(wù)器能夠分辨出已登錄的客戶端放钦,并為其持續(xù)提供登錄權(quán)限的服務(wù)器操禀。登出是指客戶端主動退出登錄狀態(tài)。容易想到的方案是斤寂,客戶端登錄成功后遍搞, 服務(wù)器為其分配sessionId, 客戶端隨后每次請求資源時(shí)都帶上sessionId器腋。


image.png

1.1 登錄驗(yàn)證

上述簡易的登錄驗(yàn)證策略存在明顯的安全漏洞,需要優(yōu)化蒂培。

1.1.1 密碼的傳輸

客戶端第一次發(fā)出登錄請求時(shí)护戳, 用戶密碼以明文的方式傳輸, 一旦被截獲抗悍, 后果嚴(yán)重钳枕。因此密碼需要加密鱼炒,例如可采用RSA非對稱加密指蚁。具體流程如下:

  • 客戶端向服務(wù)器第一次發(fā)起登錄請求(不傳輸用戶名和密碼)凝化。
  • 服務(wù)器利用RSA算法產(chǎn)生一對公鑰和私鑰。并保留私鑰瞧哟, 將公鑰發(fā)送給客戶端。
  • 客戶端收到公鑰后遣疯, 加密用戶密碼缠犀, 向服務(wù)器發(fā)起第二次登錄請求(傳輸用戶名和加密后的密碼)辨液。
  • 服務(wù)器利用保留的私鑰對密文進(jìn)行解密箱残,得到真正的密碼被辑。
1.1.2 登錄狀態(tài)token

再仔細(xì)核對上述登錄流程, 我們發(fā)現(xiàn)服務(wù)器判斷用戶是否登錄谈山, 完全依賴于sessionId, 一旦其被截獲奏路, 黑客就能夠模擬出用戶的請求鸽粉。于是我們需要引入token的概念: 用戶登錄成功后抓艳, 服務(wù)器不但為其分配了sessionId, 還分配了token, token是維持登錄狀態(tài)的關(guān)鍵秘密數(shù)據(jù)儡首。在服務(wù)器向客戶端發(fā)送的token數(shù)據(jù)椒舵,也需要加密笔宿。于是一次登錄的細(xì)節(jié)再次擴(kuò)展。

  • 客戶端向服務(wù)器第一次發(fā)起登錄請求(不傳輸用戶名和密碼)涝动。
  • 服務(wù)器利用RSA算法產(chǎn)生一對公鑰和私鑰醋粟。并保留私鑰重归, 將公鑰發(fā)送給客戶端鼻吮。
  • 客戶端收到公鑰后椎木, 加密用戶密碼,向服務(wù)器發(fā)送用戶名和加密后的用戶密碼漱竖; 同時(shí)另外產(chǎn)生一對公鑰和私鑰馍惹,自己保留私鑰, 向服務(wù)器發(fā)送公鑰烤礁; 于是第二次登錄請求傳輸了用戶名和加密后的密碼以及客戶端生成的公鑰脚仔。
  • 服務(wù)器利用保留的私鑰對密文進(jìn)行解密,得到真正的密碼们颜。 經(jīng)過判斷窥突, 確定用戶可以登錄后阻问,生成sessionId和token, 同時(shí)利用客戶端發(fā)送的公鑰,對token進(jìn)行加密凳谦。最后將sessionId和加密后的token返還給客戶端衡未。
  • 客戶端利用自己生成的私鑰對token密文解密缓醋, 得到真正的token改衩。
image.png

1.2 登錄保持

在最原始的方案中葫督, 登錄保持僅僅靠服務(wù)器生成的sessionId: 客戶端的請求中帶上sessionId, 如果服務(wù)器的redis中存在這個(gè)id橄镜,就認(rèn)為請求來自相應(yīng)的登錄客戶端冯乘。 但是只要sessionId被截獲裆馒, 請求就可以為偽造, 存在安全隱患翔横。
引入token后禾唁,上述問題便可得到解決丐枉。 服務(wù)器將token和其它的一些變量瘦锹, 利用散列加密算法得到簽名后弯院,連同sessionId一并發(fā)送給服務(wù)器; 服務(wù)器取出保存于服務(wù)器端的token,利用相同的法則生成校驗(yàn)簽名锭沟, 如果客戶端簽名與服務(wù)器的校驗(yàn)簽名一致抽兆, 就認(rèn)為請求來自登錄的客戶端

image.png

1.3 TOKEN失效

用戶登錄出系統(tǒng)

失效原理:
在服務(wù)器端的redis中刪除相應(yīng)key為session的鍵值對。

二族淮、 散列算法

散列是信息的提煉辫红,通常其長度要比信息小得多,且為一個(gè)固定長度祝辣。加密性強(qiáng)的散列一定是不可逆的贴妻,這就意味著通過散列結(jié)果,無法推出任何部分的原始信息蝙斜。任何輸入信息的變化,哪怕僅一位孕荠,都將導(dǎo)致散列結(jié)果的明顯變化娩鹉,這稱之為雪崩效應(yīng)。散列還應(yīng)該是防沖突的稚伍,即找不出具有相同散列結(jié)果的兩條信息弯予。具有這些特性的散列結(jié)果就可以用于驗(yàn)證信息是否被修改。

散列算法可以用來加密token生成簽名个曙, 以便token信息不暴露在網(wǎng)絡(luò)同時(shí)還能驗(yàn)證登錄的有效性锈嫩。

2.1 md5

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

輸出: 128bit

MD5算法具有以下特點(diǎn):
1、壓縮性:任意長度的數(shù)據(jù)垦搬,算出的MD5值長度都是固定的呼寸。
2、容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易猴贰。
3对雪、抗修改性:對原數(shù)據(jù)進(jìn)行任何改動,哪怕只修改1個(gè)字節(jié)糟趾,所得到的MD5值都有很大區(qū)別慌植。
4甚牲、弱抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的蝶柿。
5丈钙、強(qiáng)抗碰撞:想找到兩個(gè)不同的數(shù)據(jù),使它們具有相同的MD5值交汤,是非常困難的雏赦。

缺陷:
Md5一度被認(rèn)為十分靠譜。
2004年8月17日的美國加州圣巴巴拉的國際密碼學(xué)會議(Crypto’2004)上芙扎,來自中國山東大學(xué)的王小云教授做了破譯MD5星岗、HAVAL-128、 MD4和RIPEMD算法的報(bào)告戒洼,公布了MD系列算法的破解結(jié)果俏橘。
2009年,馮登國圈浇、謝濤二人利用差分攻擊寥掐,將MD5的碰撞算法復(fù)雜度從王小云的 242 進(jìn)一步降低到 221,極端情況下甚至可以降低至210磷蜀。僅僅221的復(fù)雜度意味著即便是在2008年的計(jì)算機(jī)上召耘,也只要幾秒便可以找到一對碰撞。
Md5已老褐隆, 在安全性要求較高的場合污它,不建議使用。

2.2 sha1

全名: 安全哈希算法(Secure Hash Algorithm)
輸出: 160bit

2.2.1 與Md5比較

相同點(diǎn):
因?yàn)槎呔蒑D4導(dǎo)出庶弃,SHA-1和MD5彼此很相似衫贬。相應(yīng)的,他們的強(qiáng)度和其他特性也是相似歇攻。

不同點(diǎn):

  • 對強(qiáng)行攻擊的安全性:最顯著和最重要的區(qū)別是SHA-1摘要比MD5摘要長32 位祥山。使用強(qiáng)行技術(shù),產(chǎn)生任何一個(gè)報(bào)文使其摘要等于給定報(bào)摘要的難度對MD5是2128數(shù)量級的操作掉伏,而對SHA-1則是2160數(shù)量級的操作。這樣澳窑,SHA-1對強(qiáng)行攻擊有更大的強(qiáng)度斧散。
  • 對密碼分析的安全性:由于MD5的設(shè)計(jì),易受密碼分析的攻擊摊聋,SHA-1顯得不易受這樣的攻擊鸡捐。
  • 速度:在相同的硬件上登刺,SHA-1的運(yùn)行速度比MD5慢搞疗。

2.3 加鹽

所謂加鹽撕彤, 就是在原本需要加密的信息基礎(chǔ)上渔欢,糅入其它內(nèi)容salt。簽名的生成就是一次加鹽色迂。

三香缺、對稱加密

本系統(tǒng)使用對稱加密對用戶密碼進(jìn)行加密以及生成token字符串。

3.1 AuthCode加密

AuthCode是康盛科技發(fā)明的加密方式歇僧, 開源產(chǎn)品Discuz的密碼是用這個(gè)算法進(jìn)行加密图张。但是有點(diǎn)遺憾,這個(gè)函數(shù)所有權(quán)屬于康盛創(chuàng)想诈悍,并不能自由使用的祸轮。不知使用是否有風(fēng)險(xiǎn)?侥钳?

3.2 AES加密

高級加密標(biāo)準(zhǔn)(英語:Advanced Encryption Standard适袜,縮寫:AES),在密碼學(xué)中又稱Rijndael加密法舷夺,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)苦酱。這個(gè)標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用冕房。

四躏啰、非對稱加密

RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊耙册,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)给僵。RSA的安全基于大數(shù)分解的難度。其公鑰和私鑰是一對大素?cái)?shù)(100到200位十進(jìn)制數(shù)或更大)的函數(shù)详拙。從一個(gè)公鑰和密文恢復(fù)出明文的難度帝际,等價(jià)于分解兩個(gè)大素?cái)?shù)之積(這是公認(rèn)的數(shù)學(xué)難題)。

算法描述:

(1)選擇一對不同的饶辙、足夠大的素?cái)?shù)p蹲诀,q。
(2)計(jì)算n=pq弃揽。
(3)計(jì)算f(n)=(p-1)(q-1)脯爪,同時(shí)對p, q嚴(yán)加保密,不讓任何人知道矿微。
(4)找一個(gè)與f(n)互質(zhì)的數(shù)e(公鑰指數(shù))痕慢,且1<e<f(n)。
(5)計(jì)算d(私鑰指數(shù))涌矢,使得de≡1 mod f(n)掖举。這個(gè)公式也可以表達(dá)為d ≡e-1 mod f(n)
注,≡是數(shù)論中表示同余的符號娜庇。
(6)公鑰KU=(e,n)塔次,私鑰KR=(d,n)方篮。
(7)加密時(shí),先將明文變換成0至n-1的一個(gè)整數(shù)M励负。若明文較長藕溅,可先分割成適當(dāng)?shù)慕M,然后再進(jìn)行交換熄守。設(shè)密文為C蜈垮,則加密過程為:

image

(8)解密過程為:

image

MAC上生成公鑰、私鑰的方法裕照,及使用

  • 1.打開終端攒发,切換到自己想輸出的文件夾下

  • 2.輸入指令:openssl(openssl是生成各種秘鑰的工具,mac已經(jīng)嵌入)

  • 3.輸入指令:genrsa -out rsa_private_key.pem 1024 (生成私鑰晋南,java端使用的)

  • 4.輸入指令:rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout(生成公鑰)

  • 5.輸入指令:pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt(私鑰轉(zhuǎn)格式惠猿,在ios端使用私鑰解密時(shí)用這個(gè)私鑰)

    注意:在MAC上生成三個(gè).pem格式的文件,一個(gè)公鑰负间,兩個(gè)私鑰偶妖,都可以在終端通過指令vim xxx.pem 打開,里面是字符串政溃,第三步生成的私鑰是java端用來解密數(shù)據(jù)的趾访,第五步轉(zhuǎn)換格式的私鑰iOS端可以用來調(diào)試公鑰、私鑰解密

    詳細(xì)步驟

本文轉(zhuǎn)載自:https://blog.csdn.net/jack85986370/article/details/51362278

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末董虱,一起剝皮案震驚了整個(gè)濱河市扼鞋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愤诱,老刑警劉巖云头,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淫半,居然都是意外死亡溃槐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門科吭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昏滴,“玉大人,你說我怎么就攤上這事对人∮吧妫” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵规伐,是天一觀的道長。 經(jīng)常有香客問我匣缘,道長猖闪,這世上最難降的妖魔是什么鲜棠? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮培慌,結(jié)果婚禮上豁陆,老公的妹妹穿的比我還像新娘。我一直安慰自己吵护,他們只是感情好盒音,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馅而,像睡著了一般祥诽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓮恭,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天雄坪,我揣著相機(jī)與錄音,去河邊找鬼屯蹦。 笑死维哈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的登澜。 我是一名探鬼主播阔挠,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼脑蠕!你這毒婦竟也來了购撼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤空郊,失蹤者是張志新(化名)和其女友劉穎份招,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狞甚,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锁摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哼审。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谐腰。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖涩盾,靈堂內(nèi)的尸體忽然破棺而出十气,到底是詐尸還是另有隱情,我是刑警寧澤春霍,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布砸西,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芹枷。R本人自食惡果不足惜衅疙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸳慈。 院中可真熱鬧饱溢,春花似錦、人聲如沸走芋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翁逞。三九已至肋杖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熄攘,已是汗流浹背兽愤。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挪圾,地道東北人浅萧。 一個(gè)月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像哲思,于是被迫代替她去往敵國和親洼畅。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容