如果我有一個網站或移動應用程序,它通過安全的SSL / TLS連接(即HTTPS)與服務器對話,並在已經安全的連接之上對用戶和服務器之間發送和接收的消息進行加密,我會做不必要的舉動嗎?還是雙重加密是常見的方法?如果是這樣,為什麼?
如果我有一個網站或移動應用程序,它通過安全的SSL / TLS連接(即HTTPS)與服務器對話,並在已經安全的連接之上對用戶和服務器之間發送和接收的消息進行加密,我會做不必要的舉動嗎?還是雙重加密是常見的方法?如果是這樣,為什麼?
這並不少見,但可能不是必需的。許多開發人員似乎忘記了HTTPS流量已被加密-僅查看有關在此網站上實施客戶端加密的問題數量-或由於之類的廣為宣傳的問題而感到無法信任它。 > Lenovo SSL MitM混亂。
但是,大多數人並沒有受到此影響,並且目前還沒有針對TLSv1.2的特別可行的攻擊,因此它沒有。
另一方面,在某些情況下,有合理的理由在傳輸之前先對數據進行加密。例如,如果您正在開發存儲應用程序,則可能需要使用客戶端上只有用戶才知道的密鑰的應用程序進行加密-這意味著服務器將完全無法解密數據,但它仍然可以存儲它。通過HTTPS發送將意味著攻擊者也不應該能夠獲取客戶端加密的數據,但是即使他們這樣做了也沒關係。這種模式通常由基於雲的密碼管理器使用。
本質上,它取決於您要防禦的內容-但是,如果您不信任SSL / TLS,則可能不信任加密您正在發送的代碼(在Web應用程序中)!
HTTPS僅在消息通過網絡/ Internet傳輸時提供加密。
如果消息是在客戶端與客戶端之間某個位置由中介(例如消息隊列)存儲或處理的,最終處理它的服務器,那麼它在中介服務器中時就不會保持加密。
此外,如果TLS / SSL在服務邊界(例如在負載均衡器上)終止,則可能不會在內部網絡上加密。在要求較高安全性的情況下(例如在某些受管制的環境中),這可能是一個問題。最終接收者。
正如@honze所說,這稱為深度防禦,它旨在確保即使系統受到部分破壞(例如,他們設法進行中間人攻擊)破壞SSL / TLS或利用消息隊列中的漏洞獲取靜態數據)攻擊者無法獲取受保護的數據。
我想分享我在標題問題上的經驗。它與完整的問題本身並沒有真正的關係,但這回答了“為什麼有人會雙重加密?”的問題。
過去,我曾在一個處理護理提供者(醫生,醫院)之間通信的組織中工作。等)和保險組織(共同體)。我們有點像路由器。
該架構大致如下:
護理提供者1 \ /確保組織1護理提供者2 ----路由器(美國) ----保險機構2護理提供者3 / \保險機構3
我們獲得了以下保護:
我希望這可以為為什麼需要幾層加密提供一些啟發。
您是對的。這是一個稱為深度防禦的多層安全性概念。這是一個有用的模式。
HTTPS在傳輸過程中被加密,並在最後解密。因此,您可能希望進行雙重加密的明顯情況是,您不希望其中一個(或可能兩個!)的末端都看到明文。
某些情況我可以想到:
通過網絡郵件提供商加密的電子郵件。如果我通過通過HTTPS連接訪問的Gmail發送GPG加密郵件,則該郵件會被加密兩次。因為我不想gmail讀取內容。
加密的備份服務。我想使用HTTPS阻止我的登錄憑據被盜,但我不希望備份服務看到備份的“內部”。
支付網關。您可以想像一個在安全支付硬件令牌和銀行之間通過用戶不安全的設備和商人站點 發送加密消息的情況。中間的鏈接應該是HTTPS,但這還不夠:需要在不安全的PC和不太安全的商人的網站上對其進行加密。
請注意,S / MIME提供“三重包裹”(簽名/加密/簽名): https://tools.ietf.org/html/rfc2634,因此,如果您考慮簽名和加密,那麼更多的可能性可能就有意義
我想給出一個附加的理由:標準化。
我有一個應用程序,出於安全原因,所有流入和流出其中的數據都必須加密。因為已經被加密一次,所以數據可以通過http(舊版)和https(當前)連接傳輸。加密兩次比創建一個版本的應用程序要有意義得多,該版本的應用程序可以不通過https運行,而可以通過HTTP運行。
當處理高度敏感的信息(例如財務,醫療,軍事或心理數據)時,這是最佳做法。多重加密的基本思想是防止任何未經授權的用戶檢索數據。假設加密方法的初始可能組合為10億個。通過在其之上應用另一種加密方法,我們可以將可能性增加到1b ^3。這將需要未經授權的用戶花費更長的時間來解密數據。雖然加密仍不完美,但效果更好。
在我工作的組織之一中,我們使用了多種加密。這是先前流程的簡化:
如果您不處理網絡密集的環境
此方法背後的策略可確保對設備,組件(MAC)和IP進行身份驗證。加密數據是標準過程,因此通過HTTPS發送也是如此。一些組織超越了基本安全性,還需要利用Freenet,I2P,IPsec / VPN或Tor進行類似暗網的網絡連接。無論加密如何,數據壓縮都會減少所需的存儲和網絡資源;但是,這會將您的性能抵消到RAM或處理上。最後,我們在斷開連接後重新啟動連接的原因是,我們發現了一種通過中間人劫持數據流的方法。
最終,沒有完美的方法可以永遠加密數據,但是要集中精力進行加密,直到數據或信息變得無關緊要,或者您產生了一種更好的加密數據的方法。
通過加密連接發送加密數據的原因有很多:
即使所有通信都是通過HTTPS加密的,客戶端仍然可以選擇在使用各種調試工具加密之前查看其流量。尤其是如果您使用瀏覽器環境或基礎系統提供的具有https的應用程序。
在這種情況下,您可以使用靜態密鑰對數據進行加密,因此客戶端無法輕鬆讀取和操縱流量。當然,這只是混淆,因為密鑰需要存儲在客戶端計算機上的某個位置(至少在RAM中),但是對於軟件源代碼,它始終只是混淆。用戶將不得不花費大量的精力來恢復您的密鑰並解密您的訪問量以讀取對他的請求的操縱。
示例可能是基於網絡的遊戲,該遊戲為玩家帶來了高分。
>
如果我理解正確,那麼Tor網絡就是這樣工作的:
愛麗絲給戴夫寫了一封信,並對其加密了三次:首先用戴夫的密鑰,然後添加戴夫的地址,用克雷格的密鑰加密包裹,然後添加Craig的地址並用Bob的密鑰對包裹進行加密。
她然後將信件發送給Bob,然後解密,找到Craig的地址,然後將其轉發給他。
Craig解密,找到戴夫的地址,並將其轉發給他。戴夫解密後發現這封信是給他的。
在一個完美的世界中,除了愛麗絲和戴夫之外,沒有人能說出戴夫確實是那封信的收件人,因為它很可能是他找到的艾米莉(Emily)在信封內的地址並將其轉發。
第二個應用是使用私鑰和收件人的公鑰對郵件進行加密。收件人使用您的公共密鑰和他的私鑰解密郵件,從而可以獲取該郵件來自您以及他的信息。但通常,使用HMAC來確保郵件確實來自某個發件人,並且未被篡改。
進行多級加密的主要原因是關注點分離。
通常一組數據可能由多個服務器處理,可能由多個組織控制,並非所有服務器都完全受整個機構信任數據。在大多數情況下,這些中間服務器中的大多數只需要對數據的一部分進行操作,因此,如果它們不需要查看數據的某些部分,則可以對該部分進行加密。您將獲得他們需要的數據的中間訪問權限,以查看他們擁有的密鑰中已加密的數據以及可以傳遞給其他服務器進行進一步處理的已加密Blob。
最簡單的示例是電子郵件使用GPG和TLS加密。郵件傳輸代理(電子郵件中繼)的主要工作是將電子郵件從一跳傳輸到下一跳。他們需要查看郵件路由信息才能完成工作,但是他們不需要查看郵件本身。因此,您將使用郵件傳輸代理可以理解的一個密鑰和僅收件人可以理解的另一個密鑰對郵件連接進行雙重加密。
另一個示例是日曆/通知調度服務。您將事件放入日曆中,以便日曆應用程序通知在特定時間發生了某些事情。日曆無需知道事件是什麼,事件中涉及的人,也不知道事件在哪裡。
多重加密的第二個原因是,如果加密層之一是破碎。 IMO,這是一個較弱的原因,因為您需要考慮每個不必要的附加層都會增加實現的複雜性,而復雜性是安全性的敵人。
我在這裡沒有看到此內容,但我認為它比評論要重要得多。他們可能這樣做是為了完美的前向保密性。攻擊者可能不知道您的HTTPS連接的密鑰,但他們可能會記錄每個字節並將其存儲多年。然後,他們可能會黑客入侵您,發現漏洞或稍後迫使您透露服務器的私鑰,然後返回曆史記錄並解密您的消息。通過在HTTPS連接下使用臨時臨時密鑰對消息進行加密,攻擊者仍將無法讀取消息,或者至少會明顯延遲。
為避免PCI合規性問題,開發人員希望使用支付網關並將合規性放在第三方。
表單發布中的字段可以在客戶端進行加密,因此開發人員沒有任何未加密的卡詳細信息通過他們的系統(因此要比不存儲它們更進一步)。
值得注意的是,這是在HTTPS之上。因此,該網站甚至看不到未加密的數據,只有用戶和付款網關。
Brain Tree付款網關的示例: https://www.braintreepayments.com/blog/客戶端加密/
算法和實現中的缺陷可能現在都存在,但尚未發現。理想情況下,這些缺陷將不存在,但它們確實存在。如果第一層被破壞,則攻擊者只能獲取密文。如果第二層被破壞,則攻擊者將無法通過第一層。在一個籃子裡。
並非完全是HTTPS問題,但在Tor中經常使用另一種雙重加密的有效用例,以防“我不相信送貨人員,並希望通過更多步驟保持匿名”。
每個“送貨員”僅解密信封以找出另一個送貨員。在這種情況下,通信被封裝並加密在SOCKS代理中。