Encryption

我需要一種不需要密鑰且計算上易於加密、難以解密的加密算法

  • July 21, 2022

我需要一種不需要密鑰且計算上易於加密、難以解密的加密算法。

解密可能涉及蠻力。

如果可以一次又一次地應用該算法(加密文本,然後加密加密的,…),那會更好,因為我能夠像我一樣擴展解密時間,但是,它不應該像vigenere cipher,無論你加密了多少次,你都可以在有限的步驟 (O(1)) 中解密它。

此外,如果它有一個 Python 或 C 庫,或者它對我來說足夠簡單來實現它,那就更好了。

任何幫助表示讚賞,我真的需要它。

更新:這非常有幫助,描述了公認答案指出的算法:https ://www.cs.tufts.edu/comp/116/archive/fall2013/wclarkson.pdf

甚至已經為它編寫了腳本:

https://github.com/wclarkson/timelock

https://gist.github.com/raullenchai/3042166


有點離題,我需要它的個人原因:

如果我知道它的密碼,我就會很快沉迷於我的智能手機。很長一段時間以來,我將手機密碼設置為一個我無法記住的很長的東西,並將其寫在紙上,然後將紙放在離我家很遠的地方(這樣需要很多時間才能訪問)它)。這很有效,我的工作效率更高、紀律嚴明、工作勤奮,而不是殭屍,而且我無需解鎖手機就可以做一些重要的事情,比如打電話、回复消息和做筆記。但恐怕有人會在不知不覺中取走密碼。所以我決定加密我的密碼並保存在我的電腦上。


從您提到您更關心掛鐘(即現實生活)開始,我認為您正在尋找的是延遲(即順序)功能。基本概念是要求您的電腦連續計算許多操作(在完成前一個操作之前不要盯著一個),同時保持所需的工作總量相對較低。這樣,如果您在雲上租用一台非常大的電腦,您將不會比讓您自己的電腦在後台使用備用硬體執行緒處理數字獲得巨大優勢。

我應該注意,只要您在加密時知道輸出,要求延遲函式的輸出來解密您的密碼是微不足道的。為此,只需散列輸出並將其用作加密密鑰。

基於雜湊

我將首先提出一個非常簡單的函式來實現,但缺點是您必須同時執行該函式來進行加密和解密。這個缺點在一定程度上得到了緩解,因為我們正在減少計算它所需的工作總量。

首先找到一個具有加密雜湊函式的 C 庫。我們對雜湊函式的要求很低,任何現代密碼雜湊函式就足夠了。它應該包含在一個易於在編譯語言中使用的高效庫中。

讓 $ f $ 是散列函式,k 是初始值(比如你的名字或隨機數)。將您的加密密鑰設置為 $ (f\circ f\circ f\circ \ldots f\circ f\circ f)(k) $ . 迭代次數, $ t $ , 確定這需要多長時間。在虛擬碼中:

x = k
loop t times {
x = hash(x)
}
return x

嘗試不同的較低測試 $ t $ s 來確定您的電腦的速度。

以使它稍微複雜一點為代價,您可以修改它以使加密可並行化(即利用多執行緒),而解密可並行化。然而,加密仍然需要與解密相同的總工作量。我不會在這裡解釋這種技術。

RSW

如果您希望加密比解密花費更少的總工作量,那麼您需要使用帶有陷門的延遲函式。擁有陷門的人(例如函式的創建者)可以輕鬆評估函式,但那些不需要執行許多步驟的人。加密密碼後,您只需刪除活板門。

顧名思義,RSW 與 RSA 非常相似,只是它的用途不同:帶有陷門的延遲函式。該函式的基本思想是評估 $ k^{2^t}\mod N $ 其中的質因數分解 $ N $ 是活板門。這需要 $ t $ 沒有活板門的計算步驟。我不會描述 RSW,而是給你一個指向原始論文的連結。我會給你一些實現細節。

您提到了解 C 和 Python。我建議在你的電腦上安裝 GMP 庫,然後安裝 Python 介面 GMPY2。由於拼圖的創建有點複雜但計算量不算太大,我建議使用 Python 的 IDLE 來創建函式並找到初始結果。雖然在大多數現實生活場景中,您希望選擇至少1024 位的模數大小,但考慮到您的威脅模型是 6 小時內的您自己,512 位是有意義的。

對於函式評估,我推薦 C 或 C++。我發現最快的方法是將整數設置e為 $ 2^s $ 在哪裡 $ s $ 是一個除數 $ t $ 並且可能超過約10000。GMP 將儲存所有 $ s $ RAM 中的位,這就是為什麼我們不希望它像 $ 2^t $ . mpz_powm()使用GMPe作為指數呼叫 $ t/s $ 次。

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