楊武帥 萬啟元 桑賢伯
摘 要:針對目前日益增多的智能設(shè)備提出了兼容性好,穩(wěn)定性高,易于管理的管理系統(tǒng)的設(shè)計方法。在服務(wù)器端使用Python和Django框架進行與設(shè)備的數(shù)據(jù)交互及設(shè)備管理網(wǎng)站的構(gòu)架,以手表為例說明整個管理系統(tǒng)的設(shè)計。
關(guān)鍵詞:Python;物聯(lián)網(wǎng);Django;智能設(shè)備
中圖分類號:TP311 文獻標志碼:A
Abstract: In view of the increasing number of intelligent equipment, the design method of the management system with good compatibility, high stability and easy management is put forward. At the server side, we use Python and Django framework to interact with device and manage the website of device management. We take watch as an example to illustrate the design of the whole management system.
Keywords:Python;Internet of things;Django;intelligent equipment
1 編程語言與開發(fā)框架
1.1 Python介紹
Python是一種廣泛使用的高級編程語言,其擁有可讀性強、語法簡潔和跨平臺等特點。支持包括面向?qū)ο?、命令式、函?shù)式和過程式編程等編程范式。同時Python是社區(qū)驅(qū)動的開源編程語言。Python程序可讀性高,開發(fā)周期短,可靠性強,適于網(wǎng)絡(luò)通信需要。同時Python開發(fā)的程序具有很強的可移植性,可以在很多不同發(fā)行版本的Linux、Windows、Mac OS X等操作系統(tǒng)間完美移植,使用Python可以很大幅度地增強服務(wù)器程序的適應(yīng)性,使服務(wù)器程序能最大限度地在現(xiàn)有的服務(wù)器上運行而不需要更換服務(wù)器操作系統(tǒng)。
1.2 Django介紹
Django是一個由Python編寫的開源Web應(yīng)用框架,它采用模型(Model),視圖(View)和模板(Template)即MVT開發(fā)模式,支持眾多中間件并有豐富的內(nèi)建應(yīng)用。Django使原本復(fù)雜的網(wǎng)站后臺開發(fā)和維護變得更簡單,并在執(zhí)行效率、安全性等方面有很大提升。
1.3 版本選擇
基于以上,管理系統(tǒng)使用Python語言和Django框架開發(fā)。經(jīng)過版本比較,最終使用了目前發(fā)行的最新穩(wěn)定版本,即Python3.6.4與Django2.0.1。為了使最終的設(shè)備管理終端可以適用于各種平臺并便于維護(如:Android、MAC OS X等移動平臺或PC平臺)管理系統(tǒng)采用B/S模式,即客戶使用瀏覽器通過網(wǎng)頁管理智能設(shè)備。
在開發(fā)時整個系統(tǒng)被劃分為設(shè)備接口部分、數(shù)據(jù)庫部分,數(shù)據(jù)處理與加密算法部分、管理網(wǎng)頁部分。每個部分分別開發(fā)。
2 設(shè)備接口部分
2.1 設(shè)備接口部分簡介
設(shè)備接口部分主要提供服務(wù)器與智能設(shè)備間的數(shù)據(jù)交互接口。智能設(shè)備通過網(wǎng)絡(luò)訪問服務(wù)器的設(shè)備接口來進行。在手表端手表需要實時上傳使用者的運動及健康數(shù)據(jù),并且服務(wù)器可能會不定時地向手表發(fā)送信息,通知手表使用者一些消息,手表管理者也會通過服務(wù)器向手表發(fā)送命令或者消息。
2.2 實施方案
基于以上所述數(shù)據(jù)交互模式,只能選用便于隨時互相發(fā)送可靠數(shù)據(jù)的TCP長連接。TCP長連接占用服務(wù)器資源較大,但是數(shù)據(jù)發(fā)送靈活,可靠性高。在手表的應(yīng)用中手表的管理者可以隨時向手表發(fā)送身體狀態(tài)查詢的命令和通知信息,并且當手表使用者身體有恙時手表可以迅速地將身體狀況信息發(fā)送到服務(wù)器,通知手表管理者,快速響應(yīng)手表使用者的身體狀況以便采取相應(yīng)措施。
2.3 設(shè)備接口的安全性
對于設(shè)備接口可能遭受的TCP長連接洪水攻擊,設(shè)備接口的TCP連接有相應(yīng)的鑒權(quán)掉線機制。在每次商定密鑰后手表與服務(wù)器之間會相互鑒權(quán),手表中的客戶與服務(wù)器鑒權(quán)密碼是根據(jù)手表的序列號和當前固件自帶的健全密鑰算法得出。在服務(wù)器對手表鑒權(quán)前,服務(wù)器會發(fā)送針對該手表的服務(wù)器鑒權(quán)密碼讓手表對服務(wù)器鑒權(quán),防止攻擊者偽造服務(wù)器騙取手表鑒權(quán)密碼。手表與服務(wù)器的鑒權(quán)通信是協(xié)商密鑰并加密后進行的,所以通信中的密鑰不會受到中間人攻擊。在固件升級時服務(wù)器鑒權(quán)密碼與手表鑒權(quán)密碼算法均改變,既防止了由于手表固件太過陳舊導(dǎo)致的功能問題,又防止使用同一鑒權(quán)密碼時間太長導(dǎo)致的安全隱患。
3 數(shù)據(jù)處理與加密算法部分
3.1 數(shù)據(jù)處理與加密部分簡介
數(shù)據(jù)處理部分是位于接口部分之后,處理手表發(fā)送到服務(wù)器的數(shù)據(jù)或者打包服務(wù)器向手表發(fā)送的數(shù)據(jù)。
為了保證手表用戶數(shù)據(jù)安全,防止健康數(shù)據(jù)位置數(shù)據(jù)等隱私的泄露,服務(wù)器必須采取加密措施。在與手表通信時加密,在與手表管理者通信時加密,在數(shù)據(jù)庫中存儲加密。
3.2 數(shù)據(jù)處理部分實施方案
在數(shù)據(jù)處理部分中要將數(shù)據(jù)打包解包發(fā)送到設(shè)備接口或者存入數(shù)據(jù)庫,要使用便于發(fā)送,便于調(diào)試,不易出錯的打包解包方案,于是選用JSON數(shù)據(jù)交換方式。JSON是一種輕量級數(shù)據(jù)交換格式,它語言簡潔,層次清晰,實現(xiàn)簡單,便于在嵌入式設(shè)備中操作。JSON生成的字符串極具可讀性,很大程度上方便了調(diào)試。手表制作時采用了JSON的數(shù)據(jù)交換格式,所以在手表與服務(wù)器傳遞數(shù)據(jù)時,數(shù)據(jù)處理部分將傳遞的信息以JSON打包(解包)來進行數(shù)據(jù)傳遞。
3.3 加密部分實施方案
在與手表的數(shù)據(jù)交互中需要采取加密防止中間人攻擊等攻擊方式導(dǎo)致的使用者信息泄露。在手表這樣的嵌入式設(shè)備中運行復(fù)雜的加密算法無疑是非常耗時的,而添加硬件加密模塊會增大手表的體積影響便攜性,所以采用了TEA加密算法,TEA算法實現(xiàn)簡單,消耗資源少,極其容易通過軟件實現(xiàn)。于是在服務(wù)器端,與手表通信的數(shù)據(jù)也采用了TEA加密技術(shù),并確定加密輪數(shù)為32輪。存入數(shù)據(jù)庫的密碼類數(shù)據(jù)也是需要加密的,防止拖庫帶來的用戶信息泄露。存入數(shù)據(jù)庫的數(shù)據(jù)并不需要完整,只需要通過驗證即可,因此采用了MD5摘要算法,因為用戶名不可更改并與密碼一一對應(yīng),于是取用戶名為鹽值添加到密碼后面整體進行MD5運算,如圖1所示。
3.4 加密密鑰的確定
在與手表通信時加密需要約定密鑰才能完成。在每次發(fā)起長連接時發(fā)起交換密鑰來約定密鑰,每次更換密鑰,使通信具有前向安全性。在每次密鑰交換時,先進行RSA協(xié)商來協(xié)商兩個素數(shù),再通過DH交換來交換通信密鑰。在TCP長連接握手后發(fā)送RSA素數(shù)協(xié)商,每次RSA協(xié)商由服務(wù)器發(fā)起先由服務(wù)器發(fā)送公鑰給手表。服務(wù)器等待手表返回加密后的素數(shù),返回并用私鑰解密后服務(wù)器發(fā)起DH密鑰協(xié)商,服務(wù)器將對數(shù)明文發(fā)送到手表并等待手表返回對數(shù),當手表返回明文對數(shù)后服務(wù)器經(jīng)過運算取得密碼。
4 數(shù)據(jù)庫部分
Django 默認數(shù)據(jù)庫是SQLite3數(shù)據(jù)庫,于是項目采用SQLite3數(shù)據(jù)庫。
4.1 數(shù)據(jù)庫各項關(guān)系
數(shù)據(jù)庫中的用戶分為3種:普通用戶、網(wǎng)站管理員、超級管理員。
普通用戶具有其唯一ID、用戶名、密碼、注冊時間、郵箱。
每個手表設(shè)備具有唯一序列號、持有者。
每個手表會不定時返回心率、血壓、坐標。
每個手表會在使用者運動狀態(tài)改變時返回運動狀態(tài)改變情況。
管理員具有唯一管理員ID、用戶名、密碼。
超級管理員只有一位,具有用戶名和密碼。
具體數(shù)據(jù)庫設(shè)計如圖2所示。
經(jīng)驗證,該數(shù)據(jù)庫設(shè)計滿足巴斯范式,在正常使用中不存在插入異常、刪除異常和修改異常。
5 管理網(wǎng)頁部分
5.1 管理網(wǎng)頁部分介紹
管理網(wǎng)頁部分是手表使用者的家人查看手表使用者的健康情況,發(fā)送消息給手表使用者時使用的,能將數(shù)據(jù)庫中對應(yīng)手表的數(shù)據(jù)圖形化輸出到網(wǎng)頁上。網(wǎng)頁有登陸、綁定手表,查看已綁定手表返回的各項信息與發(fā)送信息到已綁定手表功能。
5.2 網(wǎng)頁前端
人性化的圖形界面有助于用戶更方便地管理手表的信息。在網(wǎng)頁前臺使用了HTML5和Bootstrap開源前端來組織頁面。Bootstrap更強調(diào)響應(yīng)式設(shè)計,會根據(jù)不同設(shè)備的視窗寬度來組織頁面,使頁面可以同時適用于移動終端與PC終端,減少客戶端開發(fā)成本,增強易維護性。
5.3 網(wǎng)站后臺
網(wǎng)站后臺使用Django框架開發(fā),Django框架可以與Python開發(fā)的其他部分無縫結(jié)合,與其他部分共用數(shù)據(jù)庫,縮減開發(fā)時間,降低維護成本。
網(wǎng)站后臺承擔著管理網(wǎng)站和其他部分之間的交互工作。在網(wǎng)頁登陸時后臺會根據(jù)數(shù)據(jù)庫判斷用戶名密碼是否正確,向用戶發(fā)送包含SessionID的Cookie使用戶可以保持登陸。并根據(jù)用戶當前所綁定的手表向用戶提供該手表返回的使用者信息。
5.4 網(wǎng)站安全性
網(wǎng)站可以查看手表使用者的健康狀態(tài)、位置等數(shù)據(jù),網(wǎng)站需要擁有足夠的安全性保證用戶的數(shù)據(jù)不泄露。在登陸時添加圖形驗證碼和IP黑名單機制防止分布式碰撞攻擊。在操作數(shù)據(jù)庫的接口加入字符串格式化防止SQL注入攻擊。利用Django本身防止XSS注入攻擊和防止CSRF跨站攻擊的特性防止相應(yīng)攻擊。需要加密的數(shù)據(jù)也會提交到處理與加密部分減少由于數(shù)據(jù)泄露造成的二次危害。
結(jié)語
本文結(jié)合了Python以及Django框架開發(fā)了一個B/S結(jié)構(gòu)的物聯(lián)網(wǎng)設(shè)備管理系統(tǒng)。在功能方面完全滿足智能手表管理的需求,并能很方便地移植到其他的物聯(lián)網(wǎng)智能設(shè)備上。希望在未來管理系統(tǒng)可以改進并管理多種不同的設(shè)備,并能承載更大的壓力。
參考文獻
[1]王冉陽.基于Django和Python的Web開發(fā)[J].電腦編程技巧與維護,2009(2):56-58.
[2]劉志凱.基于Web的Python編程環(huán)境研究[D].新疆農(nóng)業(yè)大學,2015.
[3]羅霄,任勇,山秀明.基于Python的混合語言編程及其實現(xiàn)[J].計算機應(yīng)用與軟件,2004(12):17-18,112.