第220章 加密算法
第220章加密算法
對cqcq軟件重構(gòu)的想法,林鴻實際上在和凱文聊過之后,就開始在腦海中慢慢成型。
對發(fā)送消息進行加密這個問題比較好解決,據(jù)林鴻所知,目前有一些加密性能比較好的加密算法都是免費并且公開的,他可以直接拿來使用。
關(guān)鍵在于如何建立起負責消息傳遞中轉(zhuǎn)的“秘密據(jù)點”。
這些據(jù)點必須具有隨機的特點,不能一直固定,這樣就可以增加被追蹤攔截的難度。
現(xiàn)在這種一臺服務器管理并轉(zhuǎn)發(fā)所有在線聊天客戶端的信息的模式肯定是行不通了,因為這種結(jié)構(gòu)太過脆弱,只要對方攻占了服務器,整個聊天網(wǎng)絡就會癱瘓。
林鴻經(jīng)過慎重思考,覺得還是回歸到自己最初的想法比較靠譜,也就是,把客戶端和服務器端集成到一起。
也就是說,網(wǎng)絡上有多少個是用整個軟件的客戶,那么就有多少臺消息中繼服務器,每一臺服務器都可以對消息進行中轉(zhuǎn),構(gòu)成一個龐大的沒有任何規(guī)律的網(wǎng)狀網(wǎng)絡。
確定好了這個大體的方向之后,他腦海中各種靈感不斷冒出,以至于他立刻從課桌里面拿出幾張白紙,開始以極快地速度將這些想法以圖形和簡短的文字記錄在這些紙上。
不一會兒,不斷冒出的想法就記滿了五張白紙,林鴻這才停了下來。
林鴻抽出其中一張,這張紙上,畫了一張用方塊代表計算機的網(wǎng)絡拓撲圖,用線條表示數(shù)據(jù)流動的方向。
林鴻重新回過頭來,對之前的思路進行整理,然后又對這張圖進行完善和修補。
接下來便又抽出另外一張紙,這張紙上畫了四個方塊表示計算機,中間用幾條細線和一條粗線連接,細線表示少量數(shù)據(jù)交換,粗線表示真正的數(shù)據(jù)。
想了一下,林鴻又重新在它們之間添加了兩條粗線,將原來的那一根粗線給劃掉了。
經(jīng)過剛才一陣頭腦風暴,林鴻對于cqcq新版的架構(gòu)已經(jīng)有了底稿,總體的設計框架已經(jīng)想清楚了,接下來就是對它的技術(shù)細節(jié)的實現(xiàn)。
放棄中央控制服務器的架構(gòu),轉(zhuǎn)而采用點對點的架構(gòu),消息可以通過每一個客戶端進行中轉(zhuǎn)。
不過,還是會存在一個對整個拓撲網(wǎng)絡節(jié)點進行維護的“中繼服務器端”,這些服務器端并不涉及到數(shù)據(jù)的中轉(zhuǎn),只保存客戶端節(jié)點信息,例如ip映射地址,在線節(jié)點列表以及它們之間的拓撲結(jié)構(gòu)。
考慮到穩(wěn)定性方面的問題,這些服務器端不能只有一個,而是多個,并且他們共同維護同一張數(shù)據(jù)表,即每一臺服務器上都有全部的備份,這樣,即時某一臺服務器下線了,整個通信網(wǎng)絡也不會受到影響。
并且,按照林鴻現(xiàn)在的設想,就算是所有中繼服務器都被關(guān)停或者下線,也不會造成整個通信網(wǎng)絡的癱瘓,最多會影響到消息發(fā)送的即時性。
當網(wǎng)絡中存在中繼服務器的時候,客戶端會和中繼服務器保持連接,以便獲知自己好友在線狀態(tài),要發(fā)送信息的時候,也會先向中繼服務器查詢整個拓撲結(jié)構(gòu),然后通過算法計算,隨機找出一條最優(yōu)路徑,通過這條最優(yōu)路徑將消息發(fā)送到目的地。
而假設所有中繼服務器都掛掉了,大家便無法確認好友是否在線,數(shù)據(jù)傳輸?shù)臅r候,是一種廣播式的行為,即向全網(wǎng)廣播自己的消息,在傳輸之前,還得確認下一個節(jié)點是否在線,然后再傳輸,最終總會到達自己發(fā)送的目的。
不過這樣一來,通信就失去了時效性,可能一條信息發(fā)送出去,快則幾秒鐘,慢則要好幾分鐘甚至上十分鐘對方才能夠收到,時間的長短和網(wǎng)絡的拓撲結(jié)構(gòu)有關(guān)。
這種結(jié)構(gòu),在安全方面也有保證。
一條信息發(fā)出,會首先通過自身的軟件進行加密,然后再傳送到“中轉(zhuǎn)節(jié)點”中,那些節(jié)點都是匿名的,經(jīng)過至少五次跳轉(zhuǎn)之后,完全查不到來源路徑,最終從“出口節(jié)點”對消息進行解密,然后再傳遞到目標客戶端。
在整個流程中,唯一有可能被監(jiān)聽的環(huán)節(jié)就在于最后的“出口節(jié)點”,假設有人正好在出口節(jié)點監(jiān)控,則就可以截獲被發(fā)送的消息。
這個缺點林鴻也發(fā)現(xiàn)了,所以他在后來對圖紙進行整理的時候,再次進行了完善。
他想了一個解決方案,那就是消息發(fā)送之后,會加密成一個數(shù)據(jù)包,然后再對這個數(shù)據(jù)包進行分割,包的各部分通過幾條不同的路徑最終傳遞到目的地,這樣,就算某一個“出口節(jié)點”被監(jiān)控了,他們截獲的內(nèi)容也只有一部分,沒有截獲其他包的話,根本無法對整個包進行解密。
理論上,同時將所有包都截獲的可能性是趨近于零的,所以這樣一來,通訊安全得到了最大限度的保障。
林鴻設計的整個新的架構(gòu),不但實現(xiàn)了信息傳遞的匿名性,而且消除了中心化的服務器端,極大地提升了軟件的保密性和穩(wěn)定性。
經(jīng)過反復完善和優(yōu)化,林鴻覺得最終沒有問題之后,便開始著手進行代碼編寫。
由于他對加密解密方面還不是很了解,所先將其他基本功能暫時實現(xiàn),將加密解密放到了最后。
到天亮的時候,新版cqcq的原型便被編寫出來了,首先實現(xiàn)的功能非常簡單,只能傳遞文字版,并且還沒有對其進行加密。
今天是周一,林鴻的課不多,上午在十點多的時候就已經(jīng)沒課,他便立刻奔向了學校圖書館。
今天來這里有兩個問題需要解決。
一個是查找一下,看看有沒有posix標準的書籍,另外就是學習一下加密解密算法方面的內(nèi)容。
由于林鴻是圖書館的常客,另外又是最近風頭正盛的sam小組成員,圖書館中的不少工作人員都對他非常熟悉了,見到他之后,紛紛和他打著招呼。
林鴻微笑著一一回應,這幾個月來,他算是徹底融入了拉丁學校的這個大集體當中。雖然這里也存在著一些瑕疵,但是總體上還是讓人覺得比較舒服的,大家相互之間都比較友好,別人遇到什么困難,也會熱心幫忙。
有一點林鴻感觸最深:這里的學生和老師之間的關(guān)系完全是對等的,相互間說話,完全沒有國內(nèi)的那種一個聆聽,另外一個不是訓話就是大講道理的那種常見情況(求魔最新章節(jié))。
林鴻來到計算機科學類區(qū)域,開始慢慢尋找自己所需要的內(nèi)容。
“posix……加密算法……”
林鴻口中念叨著這兩個詞匯,在書架間一格格看過去。
走過幾個格子之后,林鴻停了下來,一本書籍吸引住了他的目光——《md5算法應用》。
他將這本書拿到手中,翻看了一下前言和目錄,于是將其拿在了手里,繼續(xù)查看書架上其他書籍。
在書架走廊上轉(zhuǎn)了幾圈之后,林鴻手中已經(jīng)多了好幾本大部頭:《rsa加密算法》、《加密算法導論》、《公鑰密碼學》、《對稱和非對稱加密算法》……
在選擇這幾本書的時候,林鴻都會大致看一下前沿和目錄,他原本只是想研究其中的一本,可是這幾本書他實在是難以選擇,覺得都非常不錯,于是決定干脆都進行閱讀,反正他看書的速度很快。
讓林鴻有點遺憾的是,這個圖書管里面并沒有關(guān)于posix標準的書籍。
實際上,對于這點他早就有所預料。算法這么科學本質(zhì)上是屬于數(shù)學領(lǐng)域,很早的時候就有數(shù)學家在進行研究,只是具體的應用實現(xiàn)在計算機領(lǐng)域得以開始爆發(fā)。
而posix標準則是最近幾年才開始興起的,發(fā)行量并不是很多,拉丁學校圖書館沒有收藏是很正常的,畢竟這是一所中學的圖書館,有這么多關(guān)于算法的書籍已經(jīng)非常不錯了。
按照往常一樣,林鴻找了一個比較偏僻的小角落位置坐了下來,然后開始按順序閱讀這幾本書。
首先閱讀的是《加密算法導論》,這本書對初學者來說比較容易理解,作者專門回顧了算法的歷史,重點介紹了古代戰(zhàn)場上凱撒大帝用于軍隊情報傳遞的密碼系統(tǒng)。
當時的密碼加密方式還比較簡單,就是單純地向前或者向后推移幾個字母就得出了密文,解密的時候方向操作即可,例如abc情報,向后推移一位加密之后就變成了bcd,敵人就算截獲了這份情報,如果不知道加密原理,是很難破解密文的。
不過隨著時代的發(fā)展,簡單的加密技術(shù)自然無法滿足要求,破解和反破解技術(shù)是伴隨著發(fā)展起來的。
看完《加密算法導論》,林鴻接著看其他幾本書籍。
此刻,他的大腦急速運轉(zhuǎn),如同海綿一樣吸收著書籍里面的知識。
林鴻一邊看,一邊還有時候在稿紙上計算著什么。他對書籍里面的內(nèi)容理解起來完全沒有障礙,甚至有一種如魚得水,相見恨晚的感覺。
他真心感嘆,前人的智慧真不是蓋的,竟然在對這方面的內(nèi)容有了如此深刻的研究,要是自己重新去摸索,可能一輩子都達不到這個高度。
時間逐漸流逝,林鴻完全陷入了加密算法的世界之中,對外界發(fā)生的事情完全沒有了感知。
!@#
,