為什么非對稱加密比對稱加密慢患雏?

這個問題是一個讀者面試時遇到的一個問題,準備過面試的人應(yīng)該都記得罢维,非對稱加密與對稱加密的區(qū)別之一就是非對稱加密的速度慢淹仑,但是我們做業(yè)務(wù)開發(fā)的時候通常都是直接調(diào)用算法,對其原因并沒有過多深究肺孵,因此如果有面試官問到了這個問題匀借,的確會讓人措手不及。正好借著這篇文章來說一說平窘。

對稱加密與非對稱加密

首先我們先來說一下到底什么是對稱加密吓肋,什么是非對稱加密,這一節(jié)主要是用一些例子來介紹一下對稱加密和非對稱加密是什么瑰艘,如果你已經(jīng)了解了是鬼,可以跳過本節(jié)。

對稱加密

高中生小明和小紅是一對“地下情侶”紫新,可偏偏他們一個坐在教室前均蜜,一個坐在教室后,所以晚自習(xí)的時候也只能通過紙條傳情芒率。這時一個很尷尬的事情就出現(xiàn)了囤耳,由于無法直接將紙條交給對方,因此紙條必須要經(jīng)過多個人的傳遞偶芍,可總有一兩個八卦的人喜歡看紙條里寫的什么充择。為了避免被班主任抓包以及被同學(xué)們窺視,他們兩約定匪蟀,用現(xiàn)代漢語詞典當(dāng)作“密碼本”椎麦,以后傳紙條時,紙條上的內(nèi)容是要寫的字在詞典里的頁碼及順序材彪,這樣即使紙條被別人看了观挎,不知道密碼本是什么的人也就不會得知紙條里的真正內(nèi)容了撒桨。
在上述的例子中,紙條是承載信息的載體键兜,紙條里的內(nèi)容是信息凤类,漢語詞典是密鑰,將文字映射到漢語詞典的頁碼和順序是加密方式(算法)普气。
類似于上面這種谜疤,在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰的加密方式就是對稱密鑰加密(Symmetric-key algorithm)现诀,簡稱對稱加密夷磕。常見的對稱加密算法有:AES、DES仔沿、3DES
所以你可以將對稱加密簡單理解為:一方通過密鑰將信息加密后坐桩,把密文傳給另一方,另一方通過這個相同的密鑰將密文解密封锉,轉(zhuǎn)換成可以理解的明文绵跷。他們之間的關(guān)系如下圖所示(這里借用一下@寒食君的圖):

弊端

這種加密方式雖然簡單,但是其弊端也是非常明顯的成福。在上面的例子中碾局,如果傳遞紙條的人知道了他們這種加密方式,那就同樣可以通過查閱漢語詞典解析出他們的紙條內(nèi)容奴艾。如下圖所示净当。這樣為什么眾多抗戰(zhàn)片中會出現(xiàn)瘋狂搶奪密碼本這一情節(jié)也就很好理解了。


非對稱加密

再舉一個生活中非常常見的例子蕴潦。小區(qū)里的小伙伴們經(jīng)诚裉洌可以在自家的郵箱里收到信件,比如你的錄取通知書潭苞,當(dāng)然更多可能是廣告忽冻。不過,雖然說所有人都可以往里面扔郵件萄传,但是只有你可以打開這個郵箱查看這個郵件甚颂。
上面這個過程就是一個很形象的非對稱加密蜜猾。


非對稱加密不同于對稱加密秀菱,它有一對秘鑰,一個稱為公鑰(publicKey) 蹭睡,另一個稱為私鑰(privateKey)衍菱,并且*只知道公鑰是無法推算出私鑰。*就和上面的例子中只知道郵箱位置卻并不能打開郵箱是一個道理肩豁。常見的非對稱加密算法有:RSA脊串、DSA辫呻、ECC
另外,這種算法還有一個特別神奇的功能琼锋,那就是通過公鑰加密的內(nèi)容放闺,只有私鑰才可以解開,而通過私鑰加密的內(nèi)容缕坎,只有公鑰才可以解開怖侦。

公鑰/私鑰的用法

第一種用法:公鑰加密,私鑰解密谜叹。---用于加解密
第二種用法:私鑰簽名匾寝,公鑰驗簽。---用于簽名
其實很容易理解:
既然是加密荷腊,那肯定是不希望別人知道我的消息艳悔,所以只有我才能解密,所以可得出公鑰負責(zé)加密女仰,私鑰負責(zé)解密猜年;
既然是簽名,那肯定是不希望有人冒充我發(fā)消息疾忍,只有我才能發(fā)布這個簽名码倦,所以可得出私鑰負責(zé)簽名,公鑰負責(zé)驗證锭碳。

這里提一點:簽名 ≠ 加密袁稽,通俗點說加密就是你哪怕看到了不該看到的東西,也理解不了擒抛。而簽名就是你做了任何事推汽,都抵賴不了。

為什么非對稱加密比對稱加密慢歧沪?

介紹了這兩種加密方式后歹撒,我們終于可以回到本篇文章的開頭了,為什么非對稱加密會比對稱加密慢诊胞?
這是因為對稱加密主要的運算是位運算暖夭,速度非常快撵孤,如果使用硬件計算迈着,速度會更快。以 AES 算法為例邪码,如下圖所示裕菠,其運算本質(zhì)上來說就是位移和替換。

但是非對稱加密計算一般都比較復(fù)雜闭专,比如 RSA奴潘,它里面涉及到大數(shù)乘法旧烧、大數(shù)模等等運算。其加解密可以用下面的公式來表示:


image.png
image.png


我們知道画髓,冪運算的本質(zhì)是乘法掘剪,乘法的基礎(chǔ)單位是加法,也就是我們最常見的整數(shù)加奈虾。學(xué)過數(shù)字邏輯電路的同學(xué)想必都知道杖小,在電路上實現(xiàn)“加法”比異或(XOR)要麻煩的多,況且后面還有一個模運算愚墓。因此非對稱加密的速度自然而然是比不過對稱加密的予权。
當(dāng)然,我想另外還有一個原因是浪册,AES 中的許多中間計算過程是可以事先計算好的扫腺。加密數(shù)據(jù)時許多中間過程可以直接查表,而不需要實時地計算村象。

通常情況下笆环,非對稱加密(如 RSA)的解密速度會比加密速度更慢,詳情可參考Why is RSA decryption slow?

時空性


這里另外提一點厚者,我們在學(xué)習(xí)算法的時候躁劣,一定聽過時間復(fù)雜度和空間復(fù)雜度這兩個名詞。魚和熊掌不可兼得库菲,通常情況下账忘,一個算法如果運行比較快,那么空間消耗相對來說就會高一些熙宇,反之亦然鳖擒。因此才會有拿空間換時間的說法。
從上一節(jié)我們可以知道烫止,非對稱加密運行起來通常比對稱加密慢蒋荚,那么這時就有一個問題了,對于密鑰的存儲情況也是這樣嗎馆蠕?非對稱加密對于密鑰的存儲會比對稱加密的密鑰存儲少嗎期升?
答案是的確如此,在對稱加密中互躬,當(dāng)信息量大的時候播赁,要求密鑰量也要足夠大,需要每兩個人之間都有一個密鑰吨铸,也就是對于 n 個人來說行拢,一共需要 n(n-1)/2 個密鑰才能確保兩兩之間對話不被其他人知道。
而在非對稱加密中诞吱,每個人都有公鑰和私鑰舟奠,對于 n 個人來說,一共要 2n 個密鑰房维,就能保證兩兩之間對話不被其他人知道沼瘫。

什么?你問我這個公式怎么來的咙俩?數(shù)學(xué)歸納法了解一下耿戚?

這么看,非對稱加密雖然效率低下阿趁,但是存儲成本低且相對安全膜蛔,這也就解釋了為什么非對稱加密應(yīng)用如此廣泛了。

HTTPS

既然無法做到既安全又快速的加解密脖阵,那我們在實際使用時只能盡量達到一個動態(tài)的平衡皂股。
因此我們在項目中通常會采用如下這種將兩種加密算法結(jié)合在一起的使用方式:

  1. 首先隨機生成單次請求加密密鑰(clientAesKey,長度為 16 位命黔,可以用 26 個字母和數(shù)字組成)
  2. RSA 負責(zé)加密一個字符串(clientAesKey)呜呐、
  3. AES 負責(zé)用這個字符串(clientAesKey)、明文加密為一個密文悍募。
  4. 解密時首先要用 RSA 獲取這個字符串(clientAesKey)蘑辑、然后再用 AES 解密密文。

之所以本節(jié)的標題是 HTTPS坠宴,是因為在 HTTPS 中就使用了上述這種加解密的方式洋魂。關(guān)于 HTTPS 的詳解,可以參考我的好朋友寒食君的這篇《談戀愛也要懂 HTTPS》喜鼓。
現(xiàn)在如果有面試官問你忧设,在 https 中采用了哪種加密方式,我想你應(yīng)該知道答案了吧颠通。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末址晕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子顿锰,更是在濱河造成了極大的恐慌谨垃,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼控,死亡現(xiàn)場離奇詭異刘陶,居然都是意外死亡,警方通過查閱死者的電腦和手機牢撼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門匙隔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熏版,你說我怎么就攤上這事纷责『床簦” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵再膳,是天一觀的道長挺勿。 經(jīng)常有香客問我,道長喂柒,這世上最難降的妖魔是什么不瓶? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮灾杰,結(jié)果婚禮上蚊丐,老公的妹妹穿的比我還像新娘。我一直安慰自己艳吠,他們只是感情好麦备,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讲竿,像睡著了一般泥兰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上题禀,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天鞋诗,我揣著相機與錄音,去河邊找鬼迈嘹。 笑死削彬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秀仲。 我是一名探鬼主播融痛,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼神僵!你這毒婦竟也來了雁刷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤保礼,失蹤者是張志新(化名)和其女友劉穎沛励,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炮障,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡目派,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胁赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片企蹭。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谅摄,到底是詐尸還是另有隱情徒河,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布螟凭,位于F島的核電站虚青,受9級特大地震影響它呀,放射性物質(zhì)發(fā)生泄漏螺男。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一纵穿、第九天 我趴在偏房一處隱蔽的房頂上張望下隧。 院中可真熱鬧,春花似錦谓媒、人聲如沸淆院。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽土辩。三九已至,卻和暖如春抢野,著一層夾襖步出監(jiān)牢的瞬間拷淘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工指孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留启涯,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓恃轩,卻偏偏與公主長得像结洼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叉跛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354