技術(shù)分享:一網(wǎng)打盡!每個程序員都該了解的黑客技術(shù)大匯總!

文章來源于:微信公眾號丨軒轅之風(fēng)
上面這個段子估計很多朋友都看過,程序員被黑過無數(shù)次,在其他人眼中,仿佛我們需要寫得了木馬,翻得了圍墻,修得了電腦,找得到資源,但凡是跟計算機沾點邊的,咱都得會才行。

段子歸段子,言歸正傳,對于咱們程序員來說,多多少少了解一些信息安全的技術(shù)知識還是大有裨益的,不僅能了解一些計算機和網(wǎng)絡(luò)的底層原理,也能反哺我們的開發(fā)工作,帶著安全思維編程,減少漏洞的產(chǎn)生。
本文內(nèi)容:
- 網(wǎng)絡(luò)安全
- SQL注入
- XSS攻擊
- CSRF攻擊
- DDoS攻擊
- DNS劫持
- TCP劫持
- 端口掃描技術(shù)
- 系統(tǒng)安全
- 棧溢出攻擊
- 整數(shù)溢出攻擊
- 空指針攻擊
- 釋放后使用攻擊
- HOOK
- 權(quán)限提升
- 可信計算
- 密碼學(xué)
- 對稱加密 & 非對稱加密
- 秘鑰交換技術(shù)
- 信息摘要算法
- 數(shù)據(jù)編碼技術(shù)
- 多因子認證技術(shù)
信息安全大體可分為三個大的分支:
網(wǎng)絡(luò)安全
系統(tǒng)安全
密碼學(xué)
下面軒轅君就這三個領(lǐng)域分別羅列一些常用的黑客技術(shù),部分技術(shù)是存在領(lǐng)域交叉的,就將其劃入主要那個類別里去了。
網(wǎng)絡(luò)安全
SQL注入
Web安全三板斧之首,大名鼎鼎的SQL注入。

SQL注入攻擊的核心在于讓W(xué)eb服務(wù)器執(zhí)行攻擊者期望的SQL語句,以便得到數(shù)據(jù)庫中的感興趣的數(shù)據(jù)或?qū)?shù)據(jù)庫進行讀取、修改、刪除、插入等操作,達到其邪惡的目的。
而如何讓W(xué)eb服務(wù)器執(zhí)行攻擊者的SQL語句呢?SQL注入的常規(guī)套路在于將SQL語句放置于Form表單或請求參數(shù)之中提交到后端服務(wù)器,后端服務(wù)器如果未做輸入安全校驗,直接將變量取出進行數(shù)據(jù)庫查詢,則極易中招。

舉例如下:
對于一個根據(jù)用戶ID獲取用戶信息的接口,后端的SQL語句一般是這樣:
selectname,[...]fromt_userwhereid=$id
其中,$id就是前端提交的用戶id,而如果前端的請求是這樣:
GET xx/userinfo?id=1%20or%201=1
其中請求參數(shù)id轉(zhuǎn)義后就是1 or 1=1,如果后端不做安全過濾直接提交數(shù)據(jù)庫查詢,SQL語句就變成了:
selectname,[...]fromt_userwhereid=1or1=1
其結(jié)果是把用戶表中的所有數(shù)據(jù)全部查出,達到了黑客泄露數(shù)據(jù)的目的。
以上只是一個極簡單的示例,在真實的SQL注入攻擊中參數(shù)構(gòu)造和SQL語句遠比這復(fù)雜得多,不過原理是一致的。

防御手段:對輸入進行檢測,阻斷帶有SQL語句特征對輸入
重點關(guān)注:前端工程師、Web后端工程師
XSS攻擊
Web安全三板斧之二,全稱跨站腳本攻擊(Cross Site Scripting),為了與重疊樣式表CSS區(qū)分,換了另一個縮寫XSS。

XSS攻擊的核心是將可執(zhí)行的前端腳本代碼(一般為JavaScript)植入到網(wǎng)頁中,聽起來比較拗口,用大白話說就是攻擊者想讓你的瀏覽器執(zhí)行他寫的JS代碼。那如何辦到呢?一般XSS分為兩種:
反射型

1、攻擊者將JS代碼作為請求參數(shù)放置URL中,誘導(dǎo)用戶點擊
? ? ?示例:
http://localhost:8080/test?name=alert("you are under attack!")
2、用戶點擊后,該JS作為請求參數(shù)傳給Web服務(wù)器后端
3、后端服務(wù)器沒有檢查過濾,簡單處理后放入網(wǎng)頁正文中返回給瀏覽器
4、瀏覽器解析返回的網(wǎng)頁,中招!
存儲型

上述方式攻擊腳本直接經(jīng)服務(wù)器轉(zhuǎn)手后返回瀏覽器觸發(fā)執(zhí)行,存儲型與之的區(qū)別在于能夠?qū)⒐裟_本入庫存儲,在后面進行查詢時,再將攻擊腳本渲染進網(wǎng)頁,返回給瀏覽器觸發(fā)執(zhí)行。常見的套路舉例如下:
1、攻擊者網(wǎng)頁回帖,帖子中包含JS腳本
2、回帖提交服務(wù)器后,存儲至數(shù)據(jù)庫
3、其他網(wǎng)友查看帖子,后臺查詢該帖子的回帖內(nèi)容,構(gòu)建完整網(wǎng)頁,返回瀏覽器
4、該網(wǎng)友瀏覽器渲染返回的網(wǎng)頁,中招!
防御手段:前后端均需要做好內(nèi)容檢測,過濾掉可執(zhí)行腳本的侵入
重點關(guān)注:前端工程師、Web后端工程師
CSRF攻擊
Web安全三板斧之三,攻擊示意圖如下:

核心思想在于,在打開A網(wǎng)站的情況下,另開Tab頁面打開惡意網(wǎng)站B,此時在B頁面的“唆使”下,瀏覽器發(fā)起一個對網(wǎng)站A的HTTP請求。這個過程的危害在于2點:
1、這個HTTP請求不是用戶主動意圖,而是B“唆使的”,如果是一個危害較大的請求操作(發(fā)郵件?刪數(shù)據(jù)?等等)那就麻煩了
2、因為之前A網(wǎng)站已經(jīng)打開了,瀏覽器存有A下發(fā)的Cookie或其他用于身份認證的信息,這一次被“唆使”的請求,將會自動帶上這些信息,A網(wǎng)站后端分不清楚這是否是用戶真實的意愿
重點關(guān)注:前端工程師、Web后端工程師
DDoS攻擊
DDoS全稱Distributed Denial of Service:分布式拒絕服務(wù)攻擊。是拒絕服務(wù)攻擊的升級版。拒絕攻擊服務(wù)顧名思義,讓服務(wù)不可用。常用于攻擊對外提供服務(wù)的服務(wù)器,像常見的:
Web服務(wù)
郵件服務(wù)
DNS服務(wù)
即時通訊服務(wù)
......

在早期互聯(lián)網(wǎng)技術(shù)還沒有那么發(fā)達的時候,發(fā)起DoS攻擊是一件很容易的事情:一臺性能強勁的計算機,寫個程序多線程不斷向服務(wù)器進行請求,服務(wù)器應(yīng)接不暇,最終無法處理正常的請求,對別的正常用戶來說,看上去網(wǎng)站貌似無法訪問,拒絕服務(wù)就是這么個意思。
后來隨著技術(shù)對發(fā)展,現(xiàn)在的服務(wù)器早已不是一臺服務(wù)器那么簡單,你訪問一個www.baidu.com的域名,背后是數(shù)不清的CDN節(jié)點,數(shù)不清的Web服務(wù)器。
這種情況下,還想靠單臺計算機去試圖讓一個網(wǎng)絡(luò)服務(wù)滿載,無異于雞蛋碰石頭,對方?jīng)]趴下,自己先趴下了。

技術(shù)從來都是一柄雙刃劍,分布式技術(shù)既可以用來提供高可用的服務(wù),也能夠被攻擊方用來進行大規(guī)模殺傷性攻擊。攻擊者不再局限于單臺計算機的攻擊能力,轉(zhuǎn)而通過成規(guī)模的網(wǎng)絡(luò)集群發(fā)起拒絕服務(wù)攻擊。

拒絕服務(wù)攻擊實際上是一類技術(shù),根據(jù)具體實施手段的不同,又可以進一步細分:
SYN Flood
ICMP Flood
UDP Flood
......
防御手段:即便是到現(xiàn)在,面對DDoS也沒有100%打包票的防御方法,只能靠一些緩解技術(shù)一定層面上減輕攻擊的威力。這些技術(shù)包括:流量清洗、SYN Cookie等等。
重點關(guān)注:運維工程師、安全工程師
DNS劫持
當(dāng)今互聯(lián)網(wǎng)流量中,以HTTP/HTTPS為主的Web服務(wù)產(chǎn)生的流量占據(jù)了絕大部分。Web服務(wù)發(fā)展的如火如荼,這背后離不開一個默默無聞的大功臣就是域名解析系統(tǒng):

如果沒有DNS,我們上網(wǎng)需要記憶每個網(wǎng)站的IP地址而不是他們的域名,這簡直是災(zāi)難,好在DNS默默在背后做了這一切,我們只需要記住一個域名,剩下的交給DNS來完成吧。
也正是因為其重要性,別有用心的人自然是不會放過它,DNS劫持技術(shù)被發(fā)明了出來。
DNS提供服務(wù)用來將域名轉(zhuǎn)換成IP地址,然而在早期協(xié)議的設(shè)計中并沒有太多考慮其安全性,對于查詢方來說:
我去請求的真的是一個DNS服務(wù)器嗎?是不是別人冒充的?
查詢的結(jié)果有沒有被人篡改過?這個IP真是這個網(wǎng)站的嗎?

DNS協(xié)議中沒有機制去保證能回答這些問題,因此DNS劫持現(xiàn)象非常泛濫,從用戶在地址欄輸入一個域名的那一刻起,一路上的兇險防不勝防:
本地計算機中的木馬修改hosts文件
本地計算機中的木馬修改DNS數(shù)據(jù)包中的應(yīng)答
網(wǎng)絡(luò)中的節(jié)點(如路由器)修改DNS數(shù)據(jù)包中的應(yīng)答
網(wǎng)絡(luò)中的節(jié)點(如運營商)修改DNS數(shù)據(jù)包中的應(yīng)答
......

后來,為了在客戶端對收到對DNS應(yīng)答進行校驗,出現(xiàn)了DNSSEC技術(shù),一定程度上可以解決上面的部分問題。但限于一些方面的原因,這項技術(shù)并沒有大規(guī)模用起來,尤其在國內(nèi),鮮有部署應(yīng)用。

再后來,以阿里、騰訊等頭部互聯(lián)網(wǎng)廠商開始推出了httpDNS服務(wù),來了一招釜底抽薪,雖然這項技術(shù)的名字中還有DNS三個字母,但實現(xiàn)上和原來但DNS已經(jīng)是天差地別,通過這項技術(shù)讓DNS變成了在http協(xié)議之上的一個應(yīng)用服務(wù)。
重點關(guān)注:安全工程師、后端工程師、運維工程師
TCP劫持
TCP是TCP/IP協(xié)議族中非常重要的成員,位于傳輸層。協(xié)議本身并沒有對TCP傳輸?shù)臄?shù)據(jù)包進行身份驗證,所以我們只要知道一個TCP連接中的seq和ack后就可以很容易的偽造傳輸包,假裝任意一方與另一方進行通信,我們將這一過程稱為TCP會話劫持(TCP
Session Hijacking)

TCP劫持技術(shù)是一種很老的技術(shù),1995年被提出來后深受黑客青睞。不過近些年來,隨著操作系統(tǒng)層面的安全機制增強和防火墻軟件的檢測能力提升,這種基礎(chǔ)的攻擊方式越來越容易被發(fā)現(xiàn),慢慢的淡出了人們的視野。
重點關(guān)注:安全工程師、運維工程師
端口掃描技術(shù)
端口掃描是黑客經(jīng)常使用的一種技術(shù),它一般是作為網(wǎng)絡(luò)攻擊的前期階段,用于探測目標開啟了哪些服務(wù),以便接下來發(fā)起針對該服務(wù)的攻擊。
記得剛剛學(xué)習(xí)網(wǎng)絡(luò)安全的時候,大家總會沒事拿出工具來掃一掃,雖然掃了之后就沒有了下文,也總是樂此不疲,在不懂的人面前秀一把自己的“黑客”能力。

以TCP/IP協(xié)議族構(gòu)建的互聯(lián)網(wǎng),網(wǎng)絡(luò)服務(wù)總是離不開端口這個概念,不管是TCP也好,UDP也罷,應(yīng)用層都需要一個端口號來進行網(wǎng)絡(luò)通信。而我們常見的服務(wù)端口有:
21: FTP文件傳輸服務(wù)
25: SMTP郵件服務(wù)
53: DNS域名解析系統(tǒng)服務(wù)
80: HTTP超文本傳輸協(xié)議服務(wù)
135: RPC遠程過程調(diào)用服務(wù)
443: HTTPS
3389: MSRDP微軟遠程桌面連接服務(wù)
......
端口掃描都原理,對于基于UDP的服務(wù),發(fā)送對應(yīng)服務(wù)都請求包,查看是否有應(yīng)答;對于基于TCP的服務(wù),嘗試發(fā)起三次握手發(fā)送TCP SYN數(shù)據(jù)包,查看是否有應(yīng)答。
如果遠端服務(wù)器進行了響應(yīng),則表明對端服務(wù)器上運行了對應(yīng)的服務(wù),接下來則是進一步探知對端服務(wù)器使用的操作系統(tǒng)、運行的服務(wù)器程序類型、版本等等,隨即針對對應(yīng)的漏洞程序發(fā)起網(wǎng)絡(luò)攻擊。

由此可見,為安全著想,在互聯(lián)網(wǎng)上應(yīng)當(dāng)盡可能少暴露信息,關(guān)閉不需要的服務(wù)端口。
防御手段:使用防火墻等安全產(chǎn)品,即時發(fā)現(xiàn)和阻斷非法的掃描探測行為。
重點關(guān)注:運維工程師、安全工程師
系統(tǒng)安全
系統(tǒng)安全版塊中的技術(shù),一般是指攻擊發(fā)生在終端之上,與操作系統(tǒng)息息相關(guān)。
棧溢出攻擊
棧溢出攻擊歷史悠久,也是發(fā)生在系統(tǒng)側(cè)最基礎(chǔ)的攻擊。
現(xiàn)代計算機基本上都是建立在馮-諾伊曼體系之上,而這一體系有一個最大的問題就是數(shù)據(jù)和指令都保存在存儲器中。

在計算機的內(nèi)存中,既包含了程序運行的所有代碼指令,又包含了程序運行的輸入輸出等各種數(shù)據(jù),并沒有一種強制的機制將指令和數(shù)據(jù)區(qū)分。因為對于計算機來說它們都是一樣的二進制0和1,大部分時候都是靠程序按照既定的“規(guī)則”去解釋理解內(nèi)存中的這些0和1。而一旦這些“規(guī)則”理解錯誤,事情就變得糟糕起來。
具體到我們現(xiàn)代CPU和OS,不管是x86/x64處理器,還是ARM處理器,均采用了寄存器+堆棧式的設(shè)計,而這個堆棧中,既包含了程序運行各個函數(shù)棧幀中的變量數(shù)據(jù)等信息,還保存了函數(shù)調(diào)用產(chǎn)生的返回地址。

所謂棧溢出攻擊,則是通過一些手段輸入到棧中的緩沖區(qū)中,沖破緩沖區(qū)原有的界限,將存儲返回地址的位置覆蓋為一個數(shù)值,使其指向攻擊者提前布置的惡意代碼位置,劫持了程序的執(zhí)行流程。
防御手段:現(xiàn)代操作系統(tǒng)針對棧溢出攻擊已經(jīng)有非常成熟的應(yīng)對方案,像Linux平臺的Stack Canary,Windows平臺的GS機制等等,程序員需要做的就是充分利用這些機制。
重點關(guān)注:C/C++工程師
整數(shù)溢出攻擊
和棧溢出攻擊一樣,整數(shù)溢出攻擊也是屬于溢出類攻擊,不一樣的是溢出的目標不是棧中的緩沖區(qū),而是一個整數(shù)。

我們知道,計算機數(shù)值以補碼的方式表示和存儲。在表示一個有符號數(shù)時,最高位是用來表示這是一個正數(shù)(0)還是一個負數(shù)(1),比如對于一個16位的short變量而言,+1和-1的表示方法如下:
+1: 0000 0000 0000 0001
-1: 1111 1111 1111 1111
一個16位的short變量表示的范圍是-32768~32767,現(xiàn)在思考一個問題,假如一個short變量的值現(xiàn)在是32767:
32767: 0111 1111 1111 1111
如果現(xiàn)在對其執(zhí)行+1操作,將變成:
1000 0000 0000 0000
而這正是-32768的補碼形式!
試想一下,如果這個變量名字叫l(wèi)ength作為strcpy參數(shù),或是叫index作為數(shù)組的下標,整數(shù)的溢出將導(dǎo)致可怕的后果,輕則進程崩潰,服務(wù)宕機,重則遠程代碼執(zhí)行,拿下控制權(quán)。
重點關(guān)注:所有程序員
空指針攻擊
空指針一般出現(xiàn)在指針沒有初始化,或者使用new進行對象創(chuàng)建/內(nèi)存分配時失敗了,而粗心的程序員并沒有檢查指針是否為空而進行訪問導(dǎo)致的攻擊。

大多數(shù)情況下,這將導(dǎo)致內(nèi)存地址訪問異常,程序會崩潰退出,造成拒絕服務(wù)的現(xiàn)象

而在一些特殊的情況下,部分操作系統(tǒng)允許分配內(nèi)存起始地址為0的內(nèi)存頁面,而攻擊者如果提前在該頁面準備好攻擊代碼,則可能出現(xiàn)執(zhí)行惡意代碼的風(fēng)險。
釋放后使用攻擊
釋放后使用Use After Free意為訪問一個已經(jīng)釋放后的內(nèi)存塊。較多的出現(xiàn)在針對瀏覽器的JavaScript引擎的攻擊中。
正常情況下,一個釋放后的對象我們是沒法再訪問的,但如果程序員粗心大意,在delete對象后,沒有即時對指針設(shè)置為NULL,在后續(xù)又繼續(xù)使用該指針訪問對象(比如通過對象的虛函數(shù)表指針調(diào)用虛函數(shù)),將出現(xiàn)內(nèi)存訪問異常。

在上面的場景中,如果攻擊者在delete對象后,馬上又new一個同樣內(nèi)存大小的對象,在現(xiàn)代操作系統(tǒng)的堆內(nèi)存管理算法中,會有很大概率將這個新的對象放置于剛剛被delete的對象的位置處。這個時候還通過原來對象的指針去訪問,將出現(xiàn)鳩占鵲巢,出現(xiàn)可怕的后果。
養(yǎng)成好的編程習(xí)慣,對象delete后,指針及時置空。
重點關(guān)注:C/C++工程師
HOOK
HOOK原意鉤子的意思,在計算機編程中時常用到,用來改變原有程序執(zhí)行流程。

在那個互聯(lián)網(wǎng)充斥著流氓軟件的年代,流行著一種鍵盤記錄器的木馬,用于記錄用戶鍵盤的輸入,從而盜取密碼,這其中QQ曾經(jīng)是重災(zāi)區(qū)。

而實現(xiàn)這一功能的技術(shù)就是用到了HOOK技術(shù),鉤到了鍵盤敲擊的事件消息。
除了消息HOOK,用得更多的是程序執(zhí)行流程層面的HOOK。惡意代碼被注入目標程序后,在函數(shù)入口處添加跳轉(zhuǎn)指令,導(dǎo)致執(zhí)行到此處的線程轉(zhuǎn)而執(zhí)行攻擊者的代碼,實現(xiàn)修改參數(shù)、過濾參數(shù)的目的。

HOOK技術(shù)不僅為黑客使用,安全軟件用的更多,安全軟件需要守護整個系統(tǒng)的安全防線,通過HOOK技術(shù)在各處敏感API處設(shè)立檢查,從而抵御非法調(diào)用攻擊行為。

另外,軟件補丁技術(shù)中也時常用到HOOK技術(shù),軟件廠商發(fā)現(xiàn)原來程序漏洞后,通過HOOK,修改既有程序的執(zhí)行邏輯,從而達到修復(fù)漏洞的目的。
重點關(guān)注:C/C++工程師
權(quán)限提升
現(xiàn)代操作系統(tǒng)都對運行于其中的進程、線程提供了權(quán)限管理,因為安全攻擊無可避免,而權(quán)限的限制作為一道頗為有效的屏障將程序被攻擊后的影響減少到最小。
換句話說,即便我們的程序因為漏洞原因被攻擊執(zhí)行了惡意代碼,但因為操作系統(tǒng)的權(quán)限控制,惡意代碼能干的事情也有限。

就像一枚硬幣總有兩個面,有權(quán)限限制,自然而然就有權(quán)限提升。攻擊者想要做更多事情,就得突破操作系統(tǒng)的限制,獲取更高的權(quán)限。
在Windows上,經(jīng)常叫獲得管理員權(quán)限。
在Linux上,經(jīng)常叫獲得Root權(quán)限,手機Root也是這個意思。
在iOS上,經(jīng)常叫“越獄”。

權(quán)限提升的方式五花八門,總體來說,程序執(zhí)行的時候,所屬進程/線程擁有一個安全令牌,用以標識其安全等級,在訪問資源和執(zhí)行動作的時候由操作系統(tǒng)內(nèi)核審核。
權(quán)限提升的目標就是將這個安全令牌更改為高等級的令牌,使其在后續(xù)訪問敏感資源和執(zhí)行敏感動作時,憑借該令牌可以通過系統(tǒng)的安全審核。

而更改這個安全令牌的慣用伎倆便是利用操作系統(tǒng)內(nèi)核漏洞(如前面所述的棧溢出、整數(shù)溢出、釋放后使用等)執(zhí)行攻擊者的代碼,實現(xiàn)安全令牌的篡改。
重點關(guān)注:安全工程師
可信計算
安全攻擊無處不在,不僅應(yīng)用程序的環(huán)境不可靠,甚至連操作系統(tǒng)內(nèi)核的環(huán)境也充滿了風(fēng)險。
如果一段程序(比如支付)必須在一個極度絕密的環(huán)境下執(zhí)行,該怎么辦?

可信計算的概念被安全研究者提了出來,根據(jù)百科的解釋:
可信計算/可信用計算(Trusted
Computing,TC)是一項由可信計算組(可信計算集群,前稱為TCPA)推動和開發(fā)的技術(shù)??尚庞嬎闶窃谟嬎愫屯ㄐ畔到y(tǒng)中廣泛使用基于硬件安全模塊支持下的可信計算平臺,以提高系統(tǒng)整體的安全性
[1]
。簽注密鑰是一個2048位的RSA公共和私有密鑰對,它在芯片出廠時隨機生成并且不能改變。這個私有密鑰永遠在芯片里,而公共密鑰用來認證及加密發(fā)送到該芯片的敏感數(shù)據(jù)。
可信計算中一個非常重要的概念是可信執(zhí)行環(huán)境TEE(Trusted ?Execution ?Environment),簡單來說就是在現(xiàn)有的計算機內(nèi)部的世界里,再構(gòu)建一個秘密基地,專門用于運行極度機密的程序。該秘密基地甚至連操作系統(tǒng)都輕易無法訪問,更別說操作系統(tǒng)之上的應(yīng)用程序了。
在移動端,ARM芯片占據(jù)了主流市場,ARM芯片提供了名為TrustZone技術(shù)的技術(shù),在硬件層面新增一個可信計算環(huán)境,包含一個可信OS,和一些可信APP,和普通環(huán)境在硬件層面隔離,處理器內(nèi)部進行通信完成兩個世界的交互。

重點關(guān)注:終端系統(tǒng)工程師
密碼學(xué)
由于數(shù)據(jù)傳輸?shù)倪^程中會遇到信息泄漏、篡改、偽造的風(fēng)險,加密技術(shù)應(yīng)運而生。
對稱加密 & 非對稱加密
有加密就有解密,根據(jù)加密過程使用的密鑰和解密過程使用的密鑰是否相同,將加密算法分為了兩個大類:對稱加密和非對稱加密。

最早出現(xiàn)的加密技術(shù)是對稱加密
對稱加密:加密密鑰和解密密鑰一致,特點是加密速度快、加密效率高。常用的對稱加密算法有:
DES
AES
RC4
這種加密方式中有一個非常關(guān)鍵的問題是,解密方需要拿到密鑰才能進行解密,而密鑰鑰匙通過網(wǎng)絡(luò)傳輸又會面臨不安全的風(fēng)險,這成了一個雞生蛋,蛋生雞的問題。
于是通信技術(shù)上一個劃時代的技術(shù)被發(fā)明了出來,這就是非對稱加密!
非對稱加密:加密密鑰與解密密鑰不一致,特點是算法較復(fù)雜,但安全性高。非對稱加密的密鑰一般分為公鑰和私鑰,公鑰公開,私鑰需保密。常用于數(shù)字認證,如HTTPS中握手階段的服務(wù)器認證。常用的非對稱加密算法有:
RSA
DH
ECC(橢圓曲線加密)
可以毫不夸張的說,沒有了非對稱加密,互聯(lián)網(wǎng)絕不會發(fā)展到今天這樣的高度。
秘鑰交換技術(shù)
在互聯(lián)網(wǎng)通信中,有加密就有解密,解密自然就需要密鑰,那如何把這個密鑰告訴對方呢?密鑰交換算法就是要解決這個問題:如何安全的將密鑰傳輸給對方?

回頭看看上面提到的非對稱加密,它就可以解決這個問題:
服務(wù)器負責(zé)生成一對公私鑰,公鑰告訴客戶端,私鑰自己保存
客戶端拿到公鑰后,使用它來對后續(xù)通信將要使用的對稱加密算法密鑰進行加密傳輸
服務(wù)端收到后使用私鑰解密,拿到這個密鑰
以后雙方可以通過對稱加密進行傳輸通信
上面這個例子并不只是舉例,在早期版本的HTTPS中,就是通過這種方式來進行密鑰交換。而后來的版本中,另外一種叫DH及其變種的密鑰交換算法用的越來越多。

DH全稱Diffie-Hellman,是兩位數(shù)學(xué)家的名稱構(gòu)成,這種算法的核心是完全依靠數(shù)學(xué)運算實現(xiàn)密鑰的交換。
信息摘要算法
信息摘要算法其實不算是一種加密算法,加密的前提是可以通過解密還原,而信息摘要算法的目的并不是對數(shù)據(jù)進行保護,也無法解密還原。
在一些語境下,信息摘要我們聽得少,聽的更多的名詞是哈希
信息摘要算法的目的之一是校驗數(shù)據(jù)的正確性,算法公開,數(shù)據(jù)通過該算法得出一個摘要值,收到數(shù)據(jù)后通過該算法計算出這個摘要,前后對比就知道是否有被篡改。
常用的信息摘要算法有:
MD5
SHA1
SHA256
數(shù)據(jù)編碼技術(shù)
嚴格來說,數(shù)據(jù)編碼技術(shù)也不算是加密算法,因為其目的同樣不是為了加密,而只是為了將數(shù)據(jù)編碼以便傳輸。

最常見的編碼算法就是base64了,多用于編碼二進制的數(shù)據(jù),將不可見的字符編碼后轉(zhuǎn)換成64個常見字符組成的文本,便于打印、展示、傳輸、存儲。如郵件eml格式中,將附件文件通過base64編碼。

除了base64,還有常用于比特幣錢包地址編碼的base58。base家族還有base85、base92、base128等眾多算法。它們的區(qū)別不僅僅在于參與編碼的字符集不同,算法執(zhí)行也是各有千秋。
多因子認證技術(shù)
說到認證,最常出現(xiàn)的莫過于登錄、支付等場景。傳統(tǒng)的認證技術(shù)就是密碼技術(shù),但隨著網(wǎng)絡(luò)攻擊的日益猖獗以及互聯(lián)網(wǎng)滲透到人們生活的方方面面,傳統(tǒng)密碼技術(shù)的安全性不足以滿足互聯(lián)網(wǎng)的發(fā)展。

多因子認證技術(shù)意為在傳統(tǒng)密碼認證之外,引入其他認證技術(shù)進行補充,使用2種及以上的方式共同完成認證。隨著人工智能技術(shù)的發(fā)展,基于生物特征的認證技術(shù)突飛猛進:
指紋認證
虹膜認證
人臉識別
......

這個世界從來不缺先行者,多因子認證看上去很復(fù)雜,好在已經(jīng)有不少頭部企業(yè)搭建了認證平臺,對于絕大多數(shù)企業(yè),需要做的只是下載SDK,調(diào)用API而已。
目前國內(nèi)外主流的多因子認證平臺有三大派系:
FIDO,國際標準,在國內(nèi),翼支付、百度錢包、京東錢包、微眾銀行等都已經(jīng)應(yīng)用

IFAA,阿里系,憑借阿里在電商領(lǐng)域的優(yōu)勢,也吸引了眾多追隨者。

TUSI,騰訊系

總結(jié)
本文羅列了一些常見的信息安全技術(shù),主要分網(wǎng)絡(luò)安全、系統(tǒng)安全和密碼學(xué)三個領(lǐng)域展開。
信息安全技術(shù)不僅僅是安全工程師的事情,作為一位程序員,了解這些技術(shù)將幫助我們更好的Build The World!
知識在于分享,轉(zhuǎn)發(fā)這篇文章,讓更多的人看到。

其實每個人都有自己的選擇,每一種編程語言的存在都有其應(yīng)用的方向,選擇你想從事的方向,去進行合適的選擇就對了!對于準備學(xué)習(xí)編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號:C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
