日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

移动客户端与服务器端安全通信方案

發(fā)布時(shí)間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动客户端与服务器端安全通信方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

公鑰加密私鑰解密是密送,保證消息即使公開(kāi)也只有私鑰持有者能讀懂。

私鑰加密公鑰解密是簽名,保證消息來(lái)源是私鑰持有者。

數(shù)字簽名只能驗(yàn)證數(shù)據(jù)的完整性,數(shù)據(jù)本身是否加密不屬于數(shù)字簽名的控制范圍

CS

C客戶端,S服務(wù)器端

在客戶端軟件發(fā)布前,客戶端保存一個(gè)公鑰,服務(wù)器保存一個(gè)私鑰;客服端and服務(wù)器都保存一個(gè)固態(tài)key : solid_key

步驟1:

客戶端隨機(jī)生成一個(gè)對(duì)稱密鑰,稱為動(dòng)態(tài)key : dynamic_key,使用公鑰加密內(nèi)容(dynamic_key+賬戶+密碼+其他需要的參數(shù))。發(fā)送給服務(wù)器

步驟2:

服務(wù)器收到后使用私鑰解密,并驗(yàn)證用戶和密碼是否正確,正確的話保存此dynamic_key在用戶的信息中(如果原先已經(jīng)有了dynamic_key就替換掉舊的); 返回?cái)?shù)據(jù):包括客戶端登錄成功的信息,返回一個(gè)Token(令牌,以后見(jiàn)牌如見(jiàn)人)和其他需要返回的參數(shù)(傳輸過(guò)程中不攜帶uid,用token標(biāo)識(shí)用戶唯一身份,更安全)。

步驟3:

使用本地保存的dynamic_key解密得到token和其他參數(shù)。 安全傳輸準(zhǔn)備工作做完了。

步驟4:

每次傳輸數(shù)據(jù)對(duì)于加密的內(nèi)容一律使用dynamic_key進(jìn)行加密,按照協(xié)商好的簽名規(guī)則進(jìn)行簽名signature(需要dynamic_key參與到簽名規(guī)則中,以保障安全),并附以明文參數(shù)token、明文參數(shù)signature、密文參數(shù)params這三部分,然后把此內(nèi)容發(fā)送給服務(wù)器。

signature = sha1(rawData + dynamic_key),服務(wù)器利用用戶對(duì)應(yīng)的 dynamic_key 使用相同的算法計(jì)算出簽名 signature2 ,比對(duì) signature 與 signature2 即可校驗(yàn)數(shù)據(jù)的完整性。 (貌似在數(shù)據(jù)全部加密的情況下,不需要簽名的)

步驟5:

根據(jù)token找到保存的dynamic_key,然后進(jìn)行解密(dynamic_key僅僅用來(lái)解密,對(duì)于解密的內(nèi)容無(wú)法驗(yàn)證),然后根據(jù)簽名規(guī)則驗(yàn)證簽名;查看token是否匹配,如果匹配的話那么此次請(qǐng)求就是有效的,否則無(wú)效,需要重新登錄;如果驗(yàn)證簽名失敗,直接返回錯(cuò)誤。

更新公鑰通知服務(wù)

服務(wù)器端首先需要用原來(lái)的私鑰簽名,客服端有原來(lái)的公鑰驗(yàn)證簽名,如果簽名通過(guò),客服端方可更新公鑰;簽名不通過(guò),需要重新下載最新客戶端安裝包(包含新的公鑰);

如果被網(wǎng)絡(luò)截獲,還需要知道固態(tài)key,才能夠修改客戶端本地公鑰

優(yōu)點(diǎn):

安全性,除非入侵服務(wù)器拿到私鑰,或者破解久經(jīng)考驗(yàn)的非對(duì)稱加解密算法,沒(méi)有其他辦法大規(guī)模攻破,相比其他單純使用對(duì)稱加密和非對(duì)稱加密方法效果都要好。

缺點(diǎn):

用戶第一次握手驗(yàn)證時(shí)使用非對(duì)稱加密的內(nèi)容,服務(wù)器非對(duì)稱解密消耗資源比較多,如果攻擊者發(fā)送大量此類信息,容易導(dǎo)致服務(wù)器DDoS攻擊。個(gè)人覺(jué)得暫時(shí)無(wú)法從根本上避免這個(gè)問(wèn)題的發(fā)生,只能夠加上一些措施增加其難度,從而過(guò)濾掉一部分攻擊者,具體措施有很多種,比如自己軟件寫(xiě)個(gè)加密算法,服務(wù)器會(huì)根據(jù)解密算法進(jìn)行計(jì)算從而驗(yàn)證是否有效,再比如android的話把這些算法寫(xiě)在jni層,增加反編譯破解的難度。

其他

下表解決“根據(jù)token獲取對(duì)應(yīng)用戶uid”在redis中如果做持久存儲(chǔ)的話,token失效無(wú)法被有效清除,導(dǎo)致占用內(nèi)存的風(fēng)險(xiǎn);

CREATE TABLE `lee_user_token` (`uid` int(11) NOT NULL DEFAULT '0' COMMENT '用戶UID',`token` char(36) NOT NULL COMMENT 'uuid 生產(chǎn)的36位字符串',PRIMARY KEY (`uid`),UNIQUE KEY `i_token` (`token`,`uid`) USING BTREE ) ENGINE=MEMORY DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='這里只是存儲(chǔ) token 與 uid 的映射關(guān)系,不做登錄過(guò)期有效性判斷';

參考信息:

  • http://segmentfault.com/q/1010000000156701
  • http://baike.baidu.com/view/356572.htm
  • http://baike.baidu.com/view/1982056.htm#2
  • http://www.dewen.org/q/2005
  • https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

轉(zhuǎn)載于:https://my.oschina.net/leeyisoft/blog/1828736

總結(jié)

以上是生活随笔為你收集整理的移动客户端与服务器端安全通信方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。