一種面向Android系統(tǒng)移動終端的語音端到端加密方法
【專利摘要】本發(fā)明提供了一種面向Android系統(tǒng)的語音端到端加密方法,命名為ERTP。當用戶選擇加密模式進行通信時,雙方在會話初始階段完成身份認證和密鑰協(xié)商。當通話建立后,會話雙方使用自己的私鑰以及協(xié)商好的會話密鑰,對發(fā)送的載有語音的RTP包進行DSA簽名,然后用AES算法進行加密,最后發(fā)送。對于接收到的RTP包,先用AES解密,再進行DSA簽名驗證,驗證通過后再對RTP包進行處理。此時若有第三方監(jiān)聽會話,則無法聽到加密后的內(nèi)容,有效的防止了第三方攻擊。本發(fā)明通過采用一次一密的語音端到端加密方法,保證端到端的語音通信安全。
【專利說明】一種面向Android系統(tǒng)移動終端的語音端到端加密方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明是一種基于加密RTP (Real-time Transport Protocol,實時傳輸協(xié)議)傳輸?shù)囊苿咏K端語音端到端加密方法,命名為ERTP (Encrypted Real-time TransportProtocol,加密的實時傳輸協(xié)議)。本發(fā)明屬于信息安全領(lǐng)域。
【背景技術(shù)】
[0002]隨著Android操作系統(tǒng)的移動終端受到越來越多人們的青睞,它的安全性也引起了人們的關(guān)注。尤其在VoIP (Voice over Internet Protocol,網(wǎng)絡(luò)電話)電話通信方面,一些不法分子利用安全漏洞,通過非法手段竊聽甚至篡改他人通話內(nèi)容,侵害他人隱私及利益,擾亂社會秩序。美國專利商標局公開的一份文件顯示,微軟2009年12月曾申請一項VoIP竊聽技術(shù)專利,能夠暗中記錄雙方或多方之間的語音和視頻通話。微軟在申請中稱,這種技術(shù)能夠滿足政府和司法部門的竊聽互聯(lián)網(wǎng)語音通話的需求。它不僅適用于封閉網(wǎng)絡(luò),更適用于包括“Skype及類似應(yīng)用”在內(nèi)的服務(wù)。專利申請顯示,這種技術(shù)的“錄音客戶端”可被植入各種設(shè)備,包括路由器等。此外,它還可以被“事件”或“事件序列”觸發(fā),如在特定通話者加入后開始竊聽。
[0003]目前,進行語音數(shù)據(jù)加密的方法主要有以下兩種:一種是利用硬件設(shè)備進行加密,一種是軟件實現(xiàn)加密。
[0004]利用硬件設(shè)備加密的技術(shù)申請?zhí)枮?00710136782.1的發(fā)明,提供一種客戶/服務(wù)器型分布式系統(tǒng),服務(wù)器裝置的SIP接口從客戶裝置接收SIP呼叫連接消息,當識別出客戶裝置之間采用加密方式,并能夠確定密鑰格式時,在通信客戶裝置之間使用端到端密碼進行加密。該發(fā)明的加密方法因密鑰空間有限,因而容易受到暴力破解。此外,該方法在服務(wù)器、通信用戶端、控制臺都需部署,所需成本高昂。
[0005]利用硬件實現(xiàn)加密的技術(shù)申請?zhí)枮?00710195390.2的發(fā)明,實時提供一種RTP報文的密鑰協(xié)商方法,利用RTCP報文,協(xié)商用于加密RTP報文的密鑰。該方法在通話開始后協(xié)商密鑰,所以密鑰協(xié)商完成是在通話開始2.5秒之后,安全性不強,且容易受到監(jiān)聽。而其協(xié)商方法是不經(jīng)身份認證的D-H交換,極易受到中間人攻擊。
[0006]利用軟件實現(xiàn)加密的技術(shù)申請?zhí)枮?00810068567.7的發(fā)明,將得到待發(fā)送的語音數(shù)據(jù)幀周期性地向加密模塊傳輸,加密模塊對接收到的語音數(shù)據(jù)幀進行加密后,發(fā)送加密的語音數(shù)據(jù),通過解密模塊對接收的語音數(shù)據(jù)進行解密后播放。該發(fā)明針對CDMA網(wǎng)絡(luò)提出加解密方法,只對語音數(shù)據(jù)幀進行加密而沒有進行身份驗證,容易受到第三方攻擊。且該發(fā)明并未說明具體加密方法,也沒有進行密鑰協(xié)商,也即密鑰是固定的。這樣的加密極易遭受暴力破解,是不安全的。
[0007]論文《橢圓曲線密碼與SHA-1算法在VOIP語音加密中的研究與應(yīng)用》闡述了一種方法,聲音數(shù)據(jù)根據(jù)公式D0=d*k*P計算得到D0,經(jīng)過不斷地SHA-1運算生成哈希驗證數(shù)據(jù),然后與聲音數(shù)據(jù)進行合成,再經(jīng)UDP協(xié)議將數(shù)據(jù)發(fā)送出去。在接收端接收到數(shù)據(jù)后,要先根據(jù)事先約定的橢圓曲線參數(shù)計算出DO值,然后根據(jù)數(shù)據(jù)的信息頭進行相應(yīng)的SHA-1計算,最后將數(shù)據(jù)進行分解得到壓縮后的聲音數(shù)據(jù)。然而,該方法并未提出密鑰協(xié)商的具體實現(xiàn)方法及過程,且未形成專利。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的目的是解決現(xiàn)有技術(shù)的安全問題,通過基于Android系統(tǒng)的移動終端進行安全VoIP (Voice over Internet Protocol)會話,使得在RTP通路建立之前,即SIP (Session Initiation Protocol,會話初始協(xié)議)會話協(xié)商部分進行通話雙方的密鑰協(xié)商和身份認證,并且基于ERTP協(xié)議,實現(xiàn)通話語音數(shù)據(jù)的端到端加密功能,達到通信保密的目的。
[0009]本發(fā)明的原理為:通過對SIP媒體棧進行改進,并結(jié)合SIP協(xié)議來完成包含DSA數(shù)字簽名的D-H(Diffie-Hellman)密鑰交換協(xié)議,協(xié)商會話密鑰并對會話雙方進行身份認證,做到一次一密且抗中間人攻擊。會話部分使用128位密鑰的AES (Advanced EncryptionStandard)算法對語音數(shù)據(jù)進行加密。當主叫用戶使用加密會話模式呼叫被叫時,提示被叫采用加密模式通信。如果被叫同樣采用加密模式,則進行密鑰協(xié)商;如果被叫方拒絕加密會話模式,則通過彈出對話框的方式向主叫方提示會話未被加密,并掛斷電話。
[0010]當被叫接受會話邀請后,通話建立,雙方的語音數(shù)據(jù)經(jīng)過DSA(Digital SignatureAlgorithm)數(shù)字簽名后,使用協(xié)商好的密鑰進行加密后傳送給對方。當對方收到數(shù)據(jù)后先進行解密,然后進行DSA簽名驗證操作。
[0011]本發(fā)明的功能實現(xiàn)基于動態(tài)鏈接庫完成,界面操作及人機交互部分在Android系統(tǒng)中的Java程序框架層完成,兩者依靠JNI (Java Native Interface, Java本地調(diào)用)模塊進行通信。
[0012]本發(fā)明提出的面向Android系統(tǒng)移動終端語音端到端加密方法包括以下步驟:
[0013]I)用戶注冊:主叫和被叫用戶在服務(wù)器注冊,包括注冊請求和服務(wù)器認證兩個步驟。注冊完成后,用戶可以用注冊賬號完成SIP電話的通信。
[0014]2)發(fā)起呼叫:主叫用戶使用加密會話模式發(fā)起呼叫,向服務(wù)器發(fā)起會話邀請。月艮務(wù)器確認用戶已通過認證后,檢查Via頭域,若沒有問題插入自身地址,并向Invite消息的To域所指示的被叫終端代理轉(zhuǎn)送Invite請求。該部分內(nèi)容通過Java程序框架層與動態(tài)鏈接庫間的通信來實現(xiàn)。
[0015]3)密鑰協(xié)商:主叫方與被叫方通過SIP協(xié)議進行會話協(xié)商。在會話協(xié)商的同時雙方進行D-H交換,協(xié)商會話密鑰并對會話雙方進行身份認證。密鑰協(xié)商過程依靠動態(tài)鏈接庫實現(xiàn)。
[0016]4)會話建立:被叫接受呼叫,密鑰協(xié)商完成,則通話建立。
[0017]5)加密通信:使用協(xié)商好的公鑰進行簽名,然后利用會話密鑰加密發(fā)送給對端。通話雙方使用協(xié)商好的會話密鑰,利用AES算法對會話內(nèi)容進行端到端的加解密,以達到防止篡改的目的。加密語音通信過程由動態(tài)鏈接庫進行功能實現(xiàn)。
[0018]6)會話結(jié)束:通信雙方結(jié)束會話,本次會話密鑰清零。
[0019]密鑰協(xié)商包含身份認證和會話密鑰協(xié)商兩個部分。通過密鑰協(xié)商,達到安全協(xié)商并計算本次通話會話密鑰的目的。其實現(xiàn)的方法:
[0020]I)身份認證:采用雙向認證,會話雙方使用各自的ID進行認證,保證消息來源于本人且未被篡改。當用戶作為主叫用戶發(fā)起會話時,服務(wù)器會將被叫用戶的公鑰發(fā)送給主叫用戶,并向被叫用戶發(fā)送主叫用戶的公鑰。主叫用戶與被叫用戶在通話時利用自己的私鑰,對所發(fā)送的信息進行DSA簽名。
[0021]2)會話密鑰協(xié)商:使用D-H交換,在利用對方的公鑰對發(fā)送的內(nèi)容進行加密的情況下,通過兩次交互完成會話密鑰的協(xié)商,并在公鑰后附上一個隨機數(shù)。兩次交互后,主叫方回復被叫發(fā)送的隨機數(shù),表示密鑰協(xié)商完成。
[0022]所述加密通信包括DSA數(shù)字簽名、語音加密、語音解密和DSA簽名驗證四個方法,具體實現(xiàn)為:
[0023]I) DSA數(shù)字簽名:對于生成的語音數(shù)據(jù),用協(xié)商好的自身私鑰對語音數(shù)據(jù)進行簽名,然后將語音幀連同簽名一起封裝到RTP包中。對于收到的語音幀,驗證其簽名,若符合則繼續(xù)進行解碼,若不符合則丟棄。
[0024]2)語音加密:包括RTP包的提取、RTP包加密、封裝成UDP包三個步驟。語音經(jīng)過采樣編碼后以語音幀的格式封裝到RTP包中。語音加密時,將RTP包提取出來,然后對RTP包進行加密。加密后的包則封裝到UDP包內(nèi),進行網(wǎng)絡(luò)傳輸。
[0025]3)語音解密:包括UDP包解封裝、RTP包解密、DSA簽名驗證三個步驟。接收端對UDP包解封后,取出載有語音數(shù)據(jù)的RTP包,對其解密后再進行DSA簽名的驗證。
[0026]4)DSA簽名驗證:對接收到的解密后的數(shù)據(jù),用戶使用對方公鑰進行DSA簽名驗證。若驗證結(jié)果相符,則繼續(xù)對RTP包操作;若不符,則丟棄該包。
[0027]采用了上述技術(shù)方案后,本發(fā)明提供了一種面向Android系統(tǒng)移動終端的語音端到端加密方法,該方法通過軟件實現(xiàn)了移動終端VoIP電話的語音加密功能。在用戶完成SIP注冊之后,發(fā)起呼叫,在被叫接聽之前完成雙方密鑰協(xié)商和身份認證。會話建立后,載有通信語音的RTP包首先經(jīng)過自身私鑰DSA簽名,再使用協(xié)商好的密鑰進行AES加密后傳遞。在接收端接收到語音包后,解密恢復出語音包,使用對方公鑰驗證DSA簽名的有效性后再送回緩沖區(qū)。本發(fā)明提供的基于ERTP包的加密方式,與現(xiàn)有的加密方式相比,語音加密算法是基于RTP包的,不需要額外引入?yún)f(xié)議支持,具有開銷小,可移植性高,易于實現(xiàn)的特點。其中密鑰協(xié)商過程可以在信令部分進行會話協(xié)商的同時完成。本發(fā)明無需額外硬件支持,也不需要對服務(wù)器進行調(diào)整。此外用戶界面友好,易于操作。
【專利附圖】
【附圖說明】:
[0028]圖1是本發(fā)明的應(yīng)用場景;
[0029]圖2是本發(fā)明的軟件結(jié)構(gòu)框圖;
[0030]圖3是本發(fā)明的端到端語音加解密流程圖;
[0031]圖4是本發(fā)明的使用加密模式發(fā)起呼叫的流程圖;
[0032]圖5是本發(fā)明的密鑰協(xié)商流程圖;
[0033]圖6是本發(fā)明的密鑰協(xié)商的具體實現(xiàn)交互圖;
[0034]圖7是本發(fā)明的會話建立的流程圖;
[0035]圖8是本發(fā)明的語音通信的流程圖;
[0036]圖9是本發(fā)明的DSA簽名的計算圖;
[0037]圖10是本發(fā)明的AES加密的計算圖;[0038]圖11是本發(fā)明的AES解密的計算圖;
[0039]圖12是本發(fā)明的DSA簽名驗證的計算圖;
[0040]圖13是本發(fā)明的通話結(jié)束的流程圖。
[0041]具體實現(xiàn)方式
[0042]圖1所示為本發(fā)明的應(yīng)用場景,本發(fā)明主要用于可以進行SIP通話的Android系統(tǒng)手機。首先,用戶完成服務(wù)器注冊。當服務(wù)器注冊完成后,若用戶需要進行加密通話,則摘機撥號,并選擇使用加密模式發(fā)起呼叫102。在會話初始階段,雙方使用SIP進行會話初始協(xié)商,并同時完成身份認證301及會話密鑰協(xié)商302過程。身份認證301過程使用用戶ID進行雙向認證:若身份認證301成功,則進行會話密鑰協(xié)商302 ;若不成功,則返回身份認證301失敗錯誤。在會話密鑰協(xié)商302過程中,若協(xié)商不成功,則通話結(jié)束并返回錯誤;若協(xié)商成功,則用戶保存各自的私鑰X、對方的公鑰Y以及本次會話密鑰Ks。在協(xié)商完成后,會話建立,首先進行初始化,然后通信雙方進行加密的語音通信。對于發(fā)送的載有語音數(shù)據(jù)的RTP包,首先使用本人的私鑰X進行DSA數(shù)字簽名,然后使用協(xié)商好的會話密鑰Ks進行AES加密,再封裝成m)P包傳輸;對于收到的UDP包,先解封裝,使用會話密鑰Ks解密后,再進行簽名驗證。若驗證成功,則取出該RTP包;若不成功,則丟棄該包。當會話結(jié)束后,本次會話密鑰清零604。
[0043]圖2所示為本發(fā)明的軟件結(jié)構(gòu)框圖。本發(fā)明的軟件結(jié)構(gòu)主要由三個部分組成:Java程序框架、JNI模塊及動態(tài)鏈接庫。
[0044]l)Java程序框架是針對Android操作系統(tǒng)開發(fā)的程序架構(gòu),包括UI界面、Utility設(shè)備、API接口、Service服務(wù)、DB數(shù)據(jù)庫、SIP協(xié)議棧、Widget外觀、Model模型及Wizard向?qū)Ь艂€部分。UI界面是本發(fā)明軟件在終端操作系統(tǒng)的操作界面設(shè)計;Utility設(shè)備針對撥號鍵盤、手機聽筒等設(shè)備進行調(diào)用;API接口用來進行媒體層的狀態(tài)描述及配置管理等內(nèi)容,Service服務(wù)管理后臺運行和跨進程訪問;DB數(shù)據(jù)庫用來存儲聯(lián)系人、手機信息等內(nèi)容;SIP協(xié)議棧在Java程序框架內(nèi)實現(xiàn)動態(tài)鏈接庫;Widget外觀為程序提供皮膚管理;Model模型對數(shù)據(jù)庫進行操作;Wizard向?qū)擒浖峁┙o用戶的操作提示。
[0045]2) JNI模塊定義了一套接口,當標準的Java程序框架不支持程序所需的特性時,供Java程序框架和動態(tài)鏈接庫之間進行相互調(diào)用。
[0046]3)動態(tài)鏈接庫是對Java程序框架的功能支持,對程序的基本功能進行實現(xiàn),包括聲音器件庫、SIP協(xié)議棧JNI庫和音頻編碼庫。聲音器件庫用來實現(xiàn)對硬件設(shè)備的調(diào)用;SIP協(xié)議棧JNI庫用來實現(xiàn)協(xié)議棧的功能及與Java程序框架的相互調(diào)用和通信;音頻編碼庫用來實現(xiàn)VoIP軟件電話的寬帶音頻編解碼。
[0047]圖3所示為本發(fā)明的端到端語音加解密流程圖。主要包括用戶注冊101、使用加密模式發(fā)起呼叫102、密鑰協(xié)商103、會話建立104、加密通話105、通話結(jié)束106六個步驟:
[0048]I)用戶注冊101:用戶向服務(wù)器發(fā)送注冊請求。若數(shù)據(jù)庫中未包含用戶信息,則返回質(zhì)詢信息。終端提示用戶輸入其標識和密碼后,向服務(wù)器發(fā)送該消息。服務(wù)器驗證其合法性后,將用戶信息寫入數(shù)據(jù)庫中。
[0049]2)使用加密模式發(fā)起呼叫102:主叫用戶完成注冊后,選擇使用加密模式對被叫用戶發(fā)起呼叫;否則使用正常模式發(fā)起呼叫。在Android系統(tǒng)的Java程序框架層完成人機交互,隨后將得到的結(jié)果通過JNI模塊傳到動態(tài)鏈接庫。[0050]3)密鑰協(xié)商103:雙方使用SIP協(xié)議進行會話初始協(xié)商的同時進行身份認證301及會話密鑰協(xié)商302。若身份認證301成功,則進行會話密鑰協(xié)商302 ;若不成功,則返回身份認證301失敗錯誤。若會話密鑰協(xié)商302不成功,則通話結(jié)束并返回錯誤。若會話密鑰協(xié)商302成功,則會話建立104。該部分在動態(tài)鏈接庫中進行功能實現(xiàn)。
[0051]4)會話建立104:終端收到確認會話的消息后,存儲本次會話密鑰401。在對緩沖區(qū)初始化402、參數(shù)及定時器初始化403和啟動聲音器件404后,會話建立104完成。
[0052]5)加密通話105:呼叫連接建立后,通信雙方使用自己的私鑰對載有語音數(shù)據(jù)的RTP包進行簽名,之后用協(xié)商好的會話密鑰對RTP包及簽名進行加密。對方收到數(shù)據(jù)包后,首先對加密好的數(shù)據(jù)包進行解密,然后比對發(fā)送的RTP包和簽名是否一致。若一致,則取出RTP包,進行進一步操作。該步驟在動態(tài)鏈接庫中進行功能實現(xiàn)。
[0053]6)通話結(jié)束106:通信雙方當中一方掛斷電話,呼叫釋放603,本次會話密鑰清零604。
[0054]圖4所示為使用加密模式發(fā)起呼叫的流程圖,其主要步驟如下:
[0055]I)用戶撥號201:用戶作為主叫發(fā)起通話。
[0056]2)選擇通話模式202:當發(fā)起呼叫時,用戶首先進行模式選擇:加密模式或非加密模式,在Android系統(tǒng)的應(yīng)用框架層完成用戶與終端的交互。隨后將得到的結(jié)果通過JNI模塊傳到動態(tài)鏈接庫。
[0057]3)加密模式初始化203:終端調(diào)用動態(tài)鏈接庫,判斷是否使用加密模式。若為加密模式,則進行加密模式初始化,加密狀態(tài)置1,并提示被叫采用加密模式通信204 ;若選擇普通模式,加密狀態(tài)置0,則進行普通模式初始化,用戶進行正常的語音通話。
[0058]4)提示被叫采用加密模式通信204:被叫若同意使用加密模式,則雙方進行密鑰協(xié)商;若不同意使用加密模式,則通過彈出對話框的方式向主叫方提示會話未被加密,則本次通話掛斷。被叫用戶的加密模式判斷在Java程序框架層完成,之后把結(jié)果同樣通過JNI模塊傳到動態(tài)鏈接庫,進行配置及調(diào)用;主叫用戶提示:本次通話未加密,則是由動態(tài)鏈接庫將狀態(tài)上傳到JNI模塊,然后在界面給出提示的。
[0059]圖5所示為密鑰協(xié)商103的流程圖。首先,會話雙方進行雙向的身份認證301,若身份認證301不成功,則呼叫結(jié)束并返回錯誤:身份認證301失敗。若身份認證301成功,則會話雙方進行密鑰協(xié)商302。若協(xié)商不成功,則呼叫結(jié)束并返回錯誤:會話密鑰協(xié)商302失敗;若會話密鑰協(xié)商302成功,則會話建立104。該步驟的內(nèi)容在動態(tài)鏈接庫進行功能實現(xiàn)。
[0060]圖6所示為密鑰協(xié)商的具體實現(xiàn)交互圖,包含以下步驟:
[0061]I)用戶A發(fā)起呼叫,取隨機數(shù)乂4作為自己的私鑰,計算公鑰Ki,其中p
為公開的長度在512到1024之間的素數(shù),α為其本原根。A向被叫B發(fā)送Invite請求,同時在SDP(Session Description Protocol,會話描述協(xié)議)部分向?qū)Ψ桨l(fā)送用固定密鑰Kfixed進行AES加密的公鑰Ya、身份信息IDa和隨機數(shù)N1,即發(fā)送Invite | | E (Kfixed, Ya | | IDa | | N1)。服務(wù)器收到后確認用戶認證301已通過后,檢查請求中的Via頭域中是否已包含其地址:若已包含,說明發(fā)生環(huán)回,則返回錯誤應(yīng)答;若不包含,則服務(wù)器在請求的Via頭域插入自身地址,修改Invite請求為Invite ',并轉(zhuǎn)發(fā)該消息,即向B用戶發(fā)送Invite '
E (Kfixed, Ya I IDa INJ。然后服務(wù)器向終端A發(fā)送呼叫處理中的應(yīng)答消息:100Tryingo[0062]2)終端B在收到轉(zhuǎn)發(fā)消息Invite丨| E (Kfixed, Ya| IDa N1)后,驗證終端A的身份信息IDa與From頭域的是否吻合,并保存公鑰Ya和隨機數(shù)N1,然后向服務(wù)器發(fā)送呼叫處理中的應(yīng)答消息:100Trying。
[0063]3)終端B指示被叫用戶振鈴,振鈴后,終端B向服務(wù)器發(fā)送振鈴消息:180Ringing。服務(wù)器向終端A轉(zhuǎn)發(fā)該振鈴消息:180Ringing。
[0064]4)被叫用戶摘機,終端B取隨機數(shù)Xb作為自己的私鑰,計算公鑰= Ox.,' mod p
和本次會話密鑰Ks = (Ki) '-''' mod P。終端B向服務(wù)器返回表示連接成功的應(yīng)答2000K,并在
SDP中包含固定密鑰Kfixed加密的公鑰Yb、身份信息IDb、終端A發(fā)送的隨機數(shù)N1及自己產(chǎn)生的隨機數(shù)N2,即發(fā)送 2000KI IE (Kfixed, Yb I I IDb | | N11 | N2)。服務(wù)器向終端A轉(zhuǎn)發(fā)該成功指示。
[0065]5)終端A收到消息后,檢驗終端B的身份信息IDb與From頭域的是否吻合,并檢
查&是否正確。若條件都滿足,則保存隨機數(shù)隊,計算本次會話密鑰/?' = (Λ)_ν' mod P ;否
則返回錯誤:會話密鑰協(xié)商302失敗。由于Ks=Ks',所以雙方得到的會話密鑰相同。
[0066]6)終端A向服務(wù)器發(fā)送確認消息ACK和用固定密鑰Kfixed加密的隨機數(shù)N2,即發(fā)送ACKI IE (Kfixed, N2)。代理服務(wù)器將該確認消息轉(zhuǎn)發(fā)給終端B。終端B檢查隨機數(shù)N2的正確性:若正確,則主被叫用戶之間建立通信連接,開始通話;若不正確,則返回錯誤:會話密鑰協(xié)商302失敗。
[0067]圖7所示為會話建立104的流程圖。當被叫收到會話確認信息ACK后,會話建立,會話雙方存儲本次會話密鑰401,然后對緩沖區(qū)初始化402、參數(shù)及定時器初始化403、啟動聲音器件404。
[0068]圖8所示為語音通信105的流程圖。聲音首先經(jīng)過聲音器件后采樣為語音數(shù)據(jù)(聲音器件處理501 ),然后對數(shù)據(jù)進行PCM編碼(編碼/解碼502),將語音數(shù)據(jù)封裝成RTP包(RTP包封裝/解封503)后,用自己的私鑰對RTP包生成DSA數(shù)字簽名(DSA數(shù)字簽名/簽名驗證504)。之后使用協(xié)商好的會話密鑰,對整個包進行AES加密(RTP包加密/解密505)后,再嵌到UDP包中(UDP包封裝/解封506),最后進行發(fā)送。接收UDP包后的流程則反過來。在終端收到Μ)Ρ包后,先對UDP包解封(UDP包封裝/解封506),使用會話密鑰對加密過的RTP包進行AES解密(RTP包加密/解密505),之后DSA簽名驗證(DSA數(shù)字簽名/簽名驗證504):比對用明文及公鑰生成的DSA數(shù)字簽名與發(fā)送來的DSA數(shù)字簽名:若不相同則證明包內(nèi)容受到篡改,丟棄該RTP包;若匹配,則對RTP包進行解封(RTP包封裝/解封503),將語音數(shù)據(jù)解碼(編碼/解碼502)后送到聲音器件,最后用揚聲器播放(聲音器件處理501)出來。該部分內(nèi)容在動態(tài)鏈接庫中進行功能實現(xiàn)。
[0069]圖9所示為DSA數(shù)字簽名的計算圖。在終端獲取到RTP包rtp_pkt后,選擇一個長度160位的素數(shù)q,且滿足q能夠整除(p_l);選擇g滿足g=h(Iri)7Vodq,其中h是I到p-Ι之間的整數(shù)使得g大于I ;產(chǎn)生隨機數(shù)k,計算r = (^i mod p) mod q與
s = [_k 1(//(/7/) — /從/) + 辦)]1110(^,其中,函數(shù)!1(1^_口1^)生成了 RTP 包 rtp_pkt 的消息散
列碼。最后,將得到的DSA簽名(r,s)附在RTP包rtp_pkt后,即生成簽名后的RTP包rtp_pkt I I (r, s)。
[0070]圖10所示為RTP包加密的具體實現(xiàn)方法。使用協(xié)商好的128bit會話密鑰Ks,對封裝好的RTP包rtp_pkt與其生成的簽名(r, s)進行AES算法加密,即得到E{KS, rtp_pkt I I (r, s)} ο然后將加密后的密文輸出E{KS, rtp_pkt I | (r, s)}嵌入UDP包,進行傳輸。
[0071]圖11所示為RTP包解密的計算圖。使用協(xié)商好的128bit的會話密鑰Ks,對收到的加密的RTP包rtp_pkt '與(r ' , s ')進行AES算法解密,即對E{KS, rtp_pkt '
I (r ;,sf )}解密。然后對解密后的明文輸出rtp_pkt ' I (r ;,sf )進行DSA數(shù)字簽名驗證。
[0072]圖12所示為DSA簽名驗證的計算圖。解密后,取出收到的附DSA數(shù)字簽名的RTP包,進行 DSA 簽名驗證。計算 Ir ξ (.s.1) ' modi/,= [H{np_pkt ')n ]modg,u2 = (/.')>!'modi/ ,
v = [(gUiyU2)modp]modq 0 檢驗/? = (&).、'1 mod/) v 是否等于 r ':若等于,則 DSA 簽名驗證成功,取出rtp_pkt 7 ;若不等于,則丟棄該包。
[0073]圖13所示為通話結(jié)束106的流程圖。當會話雙方通話結(jié)束時,一方掛斷,發(fā)送掛斷請求Bye601。對端請求回復2000K602后,呼叫釋放603,本次會話密鑰清零604。
【權(quán)利要求】
1.一種面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:包在于:包括用戶注冊(101)、使用加密模式發(fā)起呼叫(102)、密鑰協(xié)商(103)、會話建立(104)、加密通話(105)以及通話結(jié)束(106)六個步驟:用戶注冊(101)是終端向服務(wù)器驗證其合法性后,將用戶信息寫入數(shù)據(jù)庫中;使用加密模式發(fā)起呼叫(102)包括用戶撥號(201)、選擇通話模式(202)、加密模式初始化(203)、提示被叫采用加密模式通信(204)四個步驟,實現(xiàn)主叫用戶與被叫用戶進行通話模式的選擇;密鑰協(xié)商(103)包括身份認證(301)和會話密鑰協(xié)商(302)兩個部分,身份認證(301)確認收到的信息來自通信雙方,會話密鑰協(xié)商(302)交換雙方的公鑰并協(xié)商出本次的會話密鑰;會話建立(104)用于本次會話密鑰的初始化及其他參數(shù)、器件的初始化;加密通話(105 )包括聲音器件處理(501)、編碼/解碼(502 )、RTP包封裝/解封(503)、數(shù)字簽名/簽名驗證(504)、RTP包加密/解密(505)、UDP包封裝/解封(506),加密過程針對所發(fā)送的RTP包,采用先DSA簽名后AES加密的方法,解密過程針對接收到的RTP包,采用先AES解密后簽名驗證的方法;通話結(jié)束(106),通過發(fā)送掛斷請求Bye(601),對端回復2000K (602 )后,呼叫釋放(603 ),本次會話密鑰清零(604 )。
2.根據(jù)權(quán)利要求1所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:使用加密模式發(fā)起呼叫(102)為基于Android系統(tǒng)的Java程序框架層,通過JNI模塊與動態(tài)鏈接庫進行通信,實現(xiàn)參數(shù)傳遞及設(shè)置,包括以下步驟: 1)用戶撥號(201):主叫用戶完成注冊后,開始進行撥號; 2)選擇通話模式(202):當發(fā)起呼叫時,用戶首先進行模式選擇,加密模式或非加密模式,終端判斷是否使用加密模式:若為加密模式,則進行加密模式初始化,并提示被叫采用加密模式通信(204);若選擇普通模式,則進行普通模式初始化,用戶進行正常的語音通話;模式選擇的步驟在Android系統(tǒng)的Java程序框架層完成用戶與終端的交互,隨后將得到的結(jié)果通過JNI模塊傳到動態(tài)鏈接庫; 3)加密模式初始化(203):終端調(diào)用動態(tài)鏈接庫,判斷是否使用加密模式:若為加密模式,則進行加密模式初始化,加密狀態(tài)置1,并提示被叫采用加密模式通信(204);若選擇普通模式,加密狀態(tài)置0,則進行普通模式初始化,用戶進行正常的語音通話; 4)提示被叫采用加密模式通信(204):被叫若同意使用加密模式,則雙方進行密鑰協(xié)商;若不同意使用加密模式,則通過彈出對話框的方式向主叫方提示會話未被加密,本次通話掛斷;被叫用戶的加密模式判斷的過程在Java程序框架層完成,之后把結(jié)果通過JNI模塊傳到動態(tài)鏈接庫,進行配置及調(diào)用;主叫用戶提示:本次通話未加密的過程,則是當主叫用戶收到被叫拒絕加密的消息后,由動態(tài)鏈接庫將狀態(tài)上傳到JNI模塊,然后在界面給出提示。
3.根據(jù)權(quán)利要求1所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:密鑰協(xié)商(103),同時使用SIP協(xié)議進行會話初始協(xié)商和密鑰協(xié)商,該過程在動態(tài)鏈接庫中進行功能實現(xiàn),包含身份認證(301)和會話密鑰協(xié)商(302)兩個步驟: 1)會話初始協(xié)商的過程中,若身份認證(301)不成功,則呼叫結(jié)束并返回認證不成功錯誤;若身份認證(301)成功,則會話雙方進行會話密鑰協(xié)商(302);若主叫使用加密模式而被叫使用普通模式,則主叫的公鑰為本次的會話密鑰; 2)若會話密鑰協(xié)商(302)不成功,則呼叫結(jié)束返回協(xié)商失敗錯誤;若會話密鑰協(xié)商(302)成功,則會話建立。
4.根據(jù)權(quán)利要求3所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:身份認證(301)可實現(xiàn)會話雙方間的雙向身份認證,包含以下步驟: 1)終端A向終端B發(fā)送Invite請求時,附上采用固定密鑰Kfixed進行AES加密的身份消息 IDA,即 Invite E (Kfixed, Ya | IDa N1); 2)終端B接收到含有身份消息的Invite請求Invite’ | E(Kfixed, Ya| | IDa N1)后,先用固定密鑰解密,然后比對ID與發(fā)送頭域是否相符:若相符,則繼續(xù);若不符,則返回錯誤:身份認證(301)失??; 3)終端B向終端A發(fā)送200OK消息時,附上采用固定密鑰Kfixed進行AES加密的身份消息 IDb,即 2000KI IE (Kfixed, Yb | | IDb | | N11 | N2); 4)終端A收到該消息2000KIIE (Kfixed, Yb | | IDb | | N11 | N2)后,先用固定密鑰解密,然后比對IDb與收到SIP協(xié)議的From頭域是否相符:若相符,則繼續(xù);若不符,則返回錯誤:身份認證(301)失敗。
5.根據(jù)權(quán)利要求3或4所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:會話密鑰協(xié)商(302)包含以下步驟: 1)終端A取隨機數(shù)Xa作為自己的私鑰,計算公鑰&=αλ 1 modp ;終端A向終端B發(fā)送Invite請求時,附上采用固定密鑰Kfixed進行AES加密的公鑰Ya和隨機數(shù)N1,即Invite E (Kfixed, Ya I |IDa N1); 2)終端B在接收到轉(zhuǎn)發(fā)消息Invite丨|E (Kfixed, Ya IDa| | N1),且通過身份認證(301)后,保存終端A的公鑰Yb和隨機數(shù)N1 ; 3)被叫用戶摘機,終端B取隨機數(shù)Xb作為自己的私鑰,計算公鑰&三modP和本次會話密鑰尺5 = (y,yYl: mod P ;終端B向服務(wù)器返回表示連接成功的應(yīng)答2000K,在SDP中附上采用固定密鑰Kfixed進行AES加密的公鑰Yb、終端A發(fā)送的隨機數(shù)N1及自己產(chǎn)生的隨機數(shù) N2,即發(fā)送 2000KI IE (Kfixed, Yb I I IDb | | N11 | N2); 4)終端A收到消息,檢查N1是否正確,若條件都滿足,則保存隨機數(shù)N2,計算本次會話密鑰K = (Kii)'-1 mod P,Ks=Ks ;;否則返回錯誤:會話密鑰協(xié)商(302)失?。? 5)終端B檢查隨機數(shù)N2的正確性,若正確則主被叫用戶之間會話建立(104 ),開始加密通話;否則返回錯誤:會話密鑰協(xié)商(302)失敗。
6.根據(jù)權(quán)利要求5所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:加密通話(105)具體步驟為:通話語音首先經(jīng)過聲音器件的處理后采樣為語音數(shù)據(jù),然后對數(shù)據(jù)進行PCM編碼,將語音數(shù)據(jù)封裝成RTP包,接著采用自己的私鑰對RTP包生成DSA數(shù)字簽名;然后使用協(xié)商好的會話密鑰,對整個包進行AES加密后,再嵌到UDP包中,最后進行發(fā)送;接收UDP包后的流程則反過來,在接收端收到UDP包后,先使用會話密鑰對加密的RTP包進行AES解密,之后比對用明文及公鑰生成的DSA數(shù)字簽名與收到的DSA數(shù)字簽名:若不相同,則證明包內(nèi)容受到篡改,丟棄該RTP包并返回錯誤:DSA身份驗證失??;若相同,則進行RTP包封裝/解封(503 )的RTP包解封,將語音通過編碼/解碼(502 )的解碼后送到聲音器件,最后經(jīng)聲音器件處理(501)后用揚聲器播放出來。
7.根據(jù)權(quán)利要求6所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于,DSA數(shù)字簽名/簽名驗證(504)的DSA數(shù)字簽名具有以下幾個步驟:1)在獲取到RTP包rtp_pkt后,選擇一個長度160位的素數(shù)q,且滿足q能夠整除(p-Ι);選擇g滿足g^—DAmodp,產(chǎn)生隨機數(shù)k,計算
8.根據(jù)權(quán)利要求7所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:RTP包加密/解密(505)的RTP包加密使用協(xié)商好的128bit的會話密鑰Ks,對封裝好的RTP包rtp_pkt與其生成的簽名(r,s)進行AES算法加密;然后將加密后的密文輸出E {Ks, rtp_pkt I I (r, s)}嵌入 UDP 包,進行傳輸。
9.根據(jù)權(quán)利要求8所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:RTP包加密/解密(505)的RTP包解密,使用協(xié)商好的128bit的會話密鑰Ks,對接收到的加密RTP包rtp_pkt '與(r ' , s ')進行AES算法解密,即對E{Ks,rtp_pkt I (r ; ,Sf )}解密;然后對解密后的明文輸出rtp_pkt ’ I (r ; , s ;)進行DSA數(shù)字簽名/簽名驗證(504)的DSA數(shù)字簽名驗證。
10.根據(jù)權(quán)利要求9所述的面向Android系統(tǒng)移動終端的語音端到端加密方法,其特征在于:DSA數(shù)字簽名/簽名驗證(504)的DSA簽名驗證具有以下步驟: O在進行RTP包解密后,取出收到的附DSA數(shù)字簽名的RTP包rtp_pkt ’I (r ; , S ;);計算
【文檔編號】H04W12/06GK103974241SQ201310046868
【公開日】2014年8月6日 申請日期:2013年2月5日 優(yōu)先權(quán)日:2013年2月5日
【發(fā)明者】蔣睿, 許蓓蓓, 鄧成軍 申請人:東南大學常州研究院