關於PHP加解密的青年擡高篇(API安全加強篇二)

爲什麼標題總是要帶上“API安全”關鍵字呢?因爲我想我樂意。

實際上這一篇和上一篇均可以看作是《關於PHP加解密的懶漢入門篇(API安全加強篇一)》》")的後續,只不過側重點在於安全上。

如果說,你沒有看上篇,你一定回去看,不然一定會斷篇兒!

爲了避免文章陷入過於抽象複雜的理論講解,所以這次還得藉助元首和東線的將領們以及“反派角色”朱可夫同志。

人民好演員列表:

  • 男一元首:

  • 男二古德里安:

  • 路人甲曼施坦因:

  • 路人乙馮*博克

  • “反派”男一

上篇我們知道元首和古德里安翻臉了,然後兩個人通過非對稱加密技術diss彼此,朱可夫沒有私鑰只能在路邊兒打醬油。

根據事實,我們知道古德里安又重返了東線戰場。當初把人擼了下來,現在又得讓人去東線救火,反正這臉我是拉不下來,但元首拉的下來。

回到上篇結果提到的問題,就是:對稱加密的安全性要人命,非對稱加密的性能非常要人命。用我黨地話來說就是“不能多快好省”,不符合“可持續發展”,不滿足“社會主義主流價值觀”。

這篇主要就是說“多快好省”的綠色方案。

讓古德里安回東線肯定得是祕密下令的,加密是肯定。但是這個地方一定要值得注意:那就是元首一定得是用古德里安同志的給他公鑰進行加密,然後再發送出去,此時這個密文雖然在東線用飛機撒的滿地都是,但是隻有古德里安同志自己能用藏在自己褲襠裏的私鑰進行解密後才能得到明文,也就是說這事兒也只有古德里安和元首兩個人知道了。

除此之外,還有兩種情況,可能愛思考的青年已經考慮到了:

  • 元首是不是可以利用自己的公鑰對密文進行加密。但這種做法的最終結果就是這個密文只能用元首的私鑰進行解密,但是元首的私鑰在元首的褲襠裏,別人是無法知道的。元首作爲高智商罪犯,這種低級錯誤是不可能犯的。
  • 元首用自己的私鑰對密文進行加密。這個時候就意味着只有持有元首公鑰的東線將領們纔可以解密這個密文,然而假如元首並不想讓其他人知道他天才一般的部署,這種方式就顯得有點兒2了。

綜上,這種情況下,最正確的方式就是元首利用古德里安的公鑰對密文進行加密,然而再撒的滿天飛,這會兒只有古德里安能用自己的私鑰進行解密。此時,無論是自己家的曼施坦因、馮*博克,還是“反派”的朱可夫,都只能默默當路人甲。

在上述案例中(注意,客戶端不要理解爲狹義角度的手機客戶端!

  • 元首充當API服務器的角色。
  • 古德里安充當客戶端的角色。
  • 曼施坦因、馮*博克充當路人甲客戶端角色。
  • 朱可夫充當中間劫持者的角色。

我們迴歸到現實中,也就是真正搬磚擼代碼的現實中。這個時候,如果要對服務器和客戶端傳輸的數據進行非對稱加密,那麼就得有如下條件:

  • 客戶端有自己一對公鑰私鑰,客戶端持有服務器的公鑰
  • 服務器有自己一對公鑰私鑰,服務器持有客戶端的公鑰

那麼問題來了,服務器只有少數一臺,客戶端成千上萬。這會兒擺在搬磚俠們面前的只有兩個選擇:

  • 客戶端的公鑰和私鑰共用一對,這樣服務器只要一個公鑰就算是擁有了所有客戶端的公鑰
  • 客戶端的公鑰和私鑰都是特立獨行的,是顏色不一樣的煙火。這會兒服務器就苦逼了,必須維護一坨彼此不同的客戶端,同時還要建立和不同客戶端的對應關係

那麼,好了,下面讓各位搬磚俠們吃口屎保持一下冷靜,我們看看支付寶是怎麼做的。當你的系統接入支付寶的時候,支付寶會要求你生成一對你的公私鑰,然後私鑰你自己藏好了,公鑰上傳到支付寶(這個過程相當於支付寶有了你的公鑰),然後再你上傳完你的公鑰後,支付寶會返回給你支付寶的公鑰。其中當你使用RSA普通版本的時候,所有商戶得到的支付寶公鑰都是同一個,當你使用RSA2的時候,每個商戶收到的支付寶公鑰都是不盡相同的。

所以說,怎麼做都行,一切都看你選擇。

說起支付寶,你們接入的時候都一定看到有個叫做簽名驗證的功能,我認爲這個很重要,是必須值得一提的一件事情。回到元首這裏來,我們說元首給古德里安發消息“滾到東線,去庫爾斯克棱角部”,正確的做法應該是用古德里安的公鑰進行加密,此時該消息只能被古德里安的私鑰解密,其他人都只能乾瞪眼。如果元首抽風了,用自己的私鑰加密了密文,這會兒會是什麼情況咧?那就是持有元首公鑰的人都可以看到“滾到東線,去庫爾斯克棱角部”這條機密消息了,很多人都會發朋友圈或者私聊類似於“聽說古德里安要回來了”。其實,用自己私鑰解密,然後利用自己公鑰解密是一個二逼的行爲,但是,這個過程可以用來驗籤是沒有任何問題的。什麼是驗籤?

假如有一天,希姆萊想提前篡位,冒充元首給古德里安發號施令了。此時,古德里安只需要用元首的公鑰驗證一下命令的簽名,一驗返回了false,那就說明這坨命令不是來自於元首,這種數據就應該直接扔掉即可!

所以,上面叨逼叨叨逼叨這麼久,爲的就是得出一個結論,你們理(bei)解(song)一下:

  • 公鑰加密,私鑰解密
  • 私鑰加密,公鑰驗籤

然後我們再往前追溯一下,我們的爲什麼要用非對稱加密?是爲了防止對稱加密措施密鑰的泄漏,而非對稱加密不存在密鑰泄漏的情況。

但是,非對稱加解密的性能以及部署使用方式,非土豪所能及也!那麼,有沒有辦法既能得到魚,又能得到熊掌咧?

最近開了一個微信公衆號:高性能API社區,所有文章都先發這裏

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章