Hash

當速度無關緊要時,非對稱密碼(如 RSA)算法是否足以滿足所有基本需求?

  • May 18, 2022

**為什麼我關心:**我想實現一些安全會話以通過 Internet 進行通信,因為我完全是這方面的業餘愛好者,不想花很多時間學習密碼學或特定庫(因為我這樣做只是為了有趣),我想從程式方面做最少的準備。從數學方面來說,我很擅長,所以花額外的時間思考(而不是Google搜尋和閱讀文件)不是問題。

**我的猜想/問題:**當我意識到只有一個不對稱密碼(塊或流)時,有趣的部分就出現了,稱之為 $ X $ , 足以滿足所有基本的加密需求。換句話說,所有其他基本密碼類別(其他類型的密碼、散列函式和簽名,沒有其他)可以簡化為該算法;您可以僅使用 $ X $ ,以及僅使用的簽名算法 $ X $ . 這意味著當速度無關緊要時,組合諸如 RSA+ChaCha+Poly1305 之類的算法或任何其他算法都已過時。我的目標不高於網際網路通信。FHE 和類似的不在範圍內。那麼,僅僅實現還不夠 $ X $ 當時間和速度不相關時?除了速度原因,為什麼人們會發明所有這些算法?

我的證明:

將流密碼轉換為分組密碼:

只需使用流密碼處理固定長度的流並將其稱為分組密碼。

將作用於一組任意大小的分組密碼轉換為作用於一組大小的分組密碼 $ 2 $ .

讓 $ A $ 成為集合 $ {1,\dots,N} $ . 讓 $ X $ 是具有兩個功能的分組密碼 $ E $ 和 $ D $ (加密和解密函式)映射元素 $ A $ 至 $ A $ . 讓 $ 2^k $ 成為最大的力量 $ 2 $ 小於或等於 $ N $ . 讓 $ B $ 成為集合 $ {1,\dots,2^k} $ . 讓 $ x $ 是一個數字 $ A $ . 序列 $ x,E(x),E(E(x)),… $ 假設在集合上是隨機且均勻分佈的 $ A $ (也是一個 looong 循環,因為這是一個不對稱密碼),它產生一個數字 $ B $ 平均發生在每 $ \frac{|B|}{|A|} $ 元素。我們可以將第一個這樣的事件作為新函式的圖像 $ E’ $ 現在從 $ B $ 至 $ B $ . 定義 $ D’ $ 是的倒數 $ E’ $ . 這對 $ (E’,D’) $ 是一種新的分組密碼,作用於一組大小 $ 2^k $ ,換句話說,在塊 $ k $ 位。它和它一樣安全 $ X $ 因為如果我們能破解這個密碼,那麼這意味著我們可以找到應用幾次原始密碼的結果,比如說 $ m $ 次。然後我們可以重新應用密碼 $ m-1 $ 在加密消息上多次,然後使用此破解來撤消它 $ m $ 次。自從 $ m $ 預計小於 $ k $ ,這是可行的。

轉換大小的分組密碼 $ 2^k $ 成流密碼。

讓我們假設 $ k $ 是偶數(解釋這個概念更簡單)。從技術上講,我只是加密和解密任意大小的消息,這不完全是流密碼。首先,將消息擴展為長度為的倍數 $ \frac{k}{2} $ . 將此消息視為一系列大小的塊 $ \frac{k}{2} $ . 我們可以對這些塊進行就地加密:第一個和第二個塊在一起,然後是第二個和第三個,依此類推……直到最後。到目前為止,這類似於流密碼。如果消息最初太短,我們可以選擇在消息中添加一些隨機開頭。我們還可以選擇顛倒這些塊的順序並應用相同的加密序列。現在,我們要麼解密整個消息,要麼什麼都不解密:如果我們失去了其中的一部分,我們就無法解密任何東西。就像最初的分組密碼一樣。這與原始分組密碼一樣安全,因為如果我們可以破解整個消息,那麼我們可以重新執行加密並產生所有互積,包括解密加密器加密的最後 2 個塊。

將塊密碼轉換為雜湊函式。

我編輯了這部分,因為第一個想法是錯誤的……

創建兩個密鑰對並將私鑰扔掉,並在算法中對公鑰進行硬編碼。就像 int 上一部分一樣,準備塊。現在加密第一個 $ k $ 首先用一把鑰匙就位,然後用另一把鑰匙,移除 $ l<<k $ , $ l|k $ “隨機”(偽隨機,由消息的一些簡單雜湊播種)由此產生的位 $ k $ 位並連接其餘位。繼續這樣做,直到只有 $ k $ 剩下的位,然後將其稱為強雜湊。這和密碼一樣安全,因為如果我們假設我們找到了具有相同輸出的另一條消息,那麼當我們同時對它們進行重新散列時,在某個時刻我們會產生相同的結果 $ k-l $ 位(去除隨機 $ l $ 位)。這就是為什麼很難:那些 $ k-l $ 位可以填充到 $ k $ 最多位 $ 2^l\binom{k}{l} $ 方式(我們可以綁定到少數),那麼它們中的大多數不會產生相同的 $ k-l $ 有助於限制它的位,那麼即使我們可以解密另一個組合 $ k $ 位(這可能是可能的,因為它們類似於原始 $ k $ 位),解密的 $ k $ 位必須再次解密,但現在它們與原始的不同 $ k $ 位,所以我們基本上必須在這一點上破解密碼。我們使用兩個不同的密碼(兩個不同的公鑰),因為我們想消除任何延展性。

將分組密碼轉換為簽名功能。

我們可以先計算消息的雜湊值,然後對雜湊值進行加密。這顯然是安全的,因為這就是目前算法的工作方式。

我為使用不同的標籤而道歉,我只是不知道該使用什麼。

請注意,除了 RSA 之外,根據問題的定義(本質上是陷門排列),我們不知道許多“非對稱分組密碼”,因此在此基礎上建構將不允許用更快的東西進行替換,或者對假設的Cryptographically Relevant Quantum Computers的抵抗力。

在任何應用中,即使是在實驗規模上,對於無關緊要的速度可以保持多遠,總會有一些限制。建議的方法會碰壁,我相信有兩件事

  • 教科書 RSA 解密和簽名比對稱加密慢幾個十進制數量級,因此您最終需要混合加密才能獲得可及的速度。
  • RSA 密鑰生成再次比 RSA 本身慢一些十進制數量級,並且使用 RSA(或建立在某些非對稱加密方案之上)具有前向安全性的密鑰建立(許多人會說已成為基本的現代 SSL/TLS 的標準功能) ) 似乎需要在每個會話中生成密鑰。

最後,RSA 陷門置換遠非理想。它有固定點 $ {0,1,n-1} $ ,更一般地說是乘法性質。將其視為大型分組密碼的不對稱替代品是災難的根源,在 RSA 的最初幾十年中經過試驗和測試,並且還在不斷增加,正如Dan Boneh 在某些時候所記錄的那樣。解決方案比比皆是,但至少那些常見的或具有安全證明的假設是散列。因此, “您可以只使用” (RSA 陷門)來製作散列算法,雖然可能,但除了速度慢之外還很冒險。

對於相同的密鑰大小,對稱加密協議比非對稱協議更安全。

非正式地,用於破譯 RSA 的密碼分析算法試圖辨識用於創建值N的素值,而(我在這裡很可能錯了)用於破解對稱加密方案的算法是基於對明文消息的暴力辨識,基於已知明文攻擊,並檢測密文比特分佈中的一些模式。

這些算法的安全性差異在於,128 位密鑰大小的 AES 加密與 2048 位密鑰大小的 RSA 密鑰一樣難以破譯。

最終,在我看來,這一切都歸結為性能。如果您打算使用巨大的 RSA 密鑰,那麼您將不需要任何其他加密方案;但是您會在頻寬使用和延遲方面付出巨大的代價。

這一切都假設您計劃為每個會話生成一個新密鑰。否則,如果有人最終辨識出您的密鑰,那麼您已發送(並將發送)的所有資訊都將被洩露。

你可以通過擁有巨大的密鑰大小來解決這個問題。再次,這是性能問題。

引用自:https://crypto.stackexchange.com/questions/100175