Encryption
新手問題:密碼學中的單向函式
我正在閱讀這篇關於密碼學基礎的文章,它說主要原理是採用這樣一種算法,知道最終結果和算法,竊聽者將無法確定初始數據。
他們舉了一個例子:
假設我知道第二行和第三行的數字,但不知道x,無法推導出x。但我可以:我需要做的就是做這樣的事情:
for (int i=0; i<100_000_000; i++) { if (i%7==5) { if (getPower(i, 3)!=-1) { System.out.println(i+", " + getPower(i, 3)); } } }
它給了我:
243, 5 177147, 11
意思是,243 和 177147 分別是 3^5 和 3^11,除以 7 時也給出殘差 5。所以對我來說它看起來不像是單向函式。
所以對我來說它看起來不像是單向函式。
您缺少的是密碼學中使用的規模和基本思想。即以下三個事實:
- 離散對數的密碼指數具有數千位而不是問題中的範例*3 。*因此,一次僅嘗試一個值,至少需要數十億年的時間。
- 在密碼學中,您只能看到模約減後的求冪結果(圖形的第三行),因為有有效的算法可以在實數上找到對數。
- 在密碼學中使用這些系統時,我們實際上並沒有執行 $ 2^{1000} $ 左右乘法,而是使用重複的平方和乘法,這將其減少到幾千次乘法。請注意,此算法需要完全了解要應用的指數。